RoleController.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. namespace App\Http\Controllers\AdminApi;
  3. use App\Models\SysModels\Menu;
  4. use App\Models\UserModels\Role;
  5. use App\Models\UserModels\User;
  6. use App\Http\Controllers\AdminController;
  7. use App\Servers\Common\MenuServer;
  8. use App\Servers\Common\RedisDataServer;
  9. class RoleController extends AdminController
  10. {
  11. /**
  12. * 后台账号列表
  13. * @return \Illuminate\Http\JsonResponse
  14. */
  15. function getList(){
  16. $status = request()->input('status', 0);//是否通过 1启用 2停用
  17. $search = request()->input('search', '');//搜索的内容
  18. $start = request()->input('start', '');//获取开始时间
  19. $end = request()->input('end', '');//获取结束时间
  20. //获取店铺角色列表
  21. $where = [['is_del',0]];
  22. if(in_array($status,[1,2])) $where[] = ['status','=',$status];
  23. if ($search) $where[] = ['name', 'like', "%$search%"];
  24. if ($start) $where[] = ['created_at', '>=', $start . ' 00:00:00'];
  25. if ($end) $where[] = ['created_at', '<=', $end . ' 23:59:59'];
  26. $list = Role::where($where)
  27. ->select(['id','name','status','created_at'])
  28. ->orderBy('created_at','desc')
  29. ->paginate(10);
  30. foreach ($list as $value){
  31. $value['count'] = User::where('role_id',$value['id'])->where('is_del',0)->count();
  32. }
  33. return $this->apiResponseSuccess('获取信息成功', [
  34. 'list' => $list->items(),
  35. 'total' => $list->total(),
  36. 'limit' => 10
  37. ]);
  38. }
  39. /**
  40. * 新增&编辑店铺角色
  41. * @return \Illuminate\Http\JsonResponse
  42. */
  43. function saveRole(){
  44. $id = request()->input('id','');//记录id
  45. $name = request()->input('name','');//名称
  46. $status = request()->input('status',1);//状态1启用 2停用
  47. $permission_ids = request()->input('ids','');//权限节点id
  48. if (empty($name)) return $this->apiResponseError( '角色名称必填');
  49. if (empty($permission_ids)) return $this->apiResponseError( '请选择权限节点');
  50. if(!in_array($status,[1,2])) return $this->apiResponseError( '状态错误');
  51. if(is_array($permission_ids)){
  52. $permission_ids = implode(',',$permission_ids);
  53. }
  54. $data = compact('name','status','permission_ids');
  55. if(empty($id)){
  56. $count = Role::where('name', '=', $name)->where('is_del',0)->count();
  57. if ($count > 0 ) {
  58. return $this->apiResponseError( '该角色已存在');
  59. }
  60. $res = Role::create($data);
  61. }else{
  62. if (empty($id)) return $this->apiResponseError( '缺少必要参数');
  63. $info = Role::where('id',$id)->first();
  64. if(!$info) return $this->apiResponseError( '记录不存在');
  65. $count = Role::where('name', '=', $name)->where('id', '<>', $id)->where('is_del',0)->count();
  66. if ($count > 0 ) {
  67. return $this->apiResponseError( '该角色已存在');
  68. }
  69. $res = $info->update($data);
  70. //更新该角色redis节点信息
  71. RedisDataServer::creatServer()->delData('gw_role_ids_' . $id);
  72. }
  73. if ($res) {
  74. return $this->apiResponseSuccess('成功');
  75. } else {
  76. return $this->apiResponseError('失败');
  77. }
  78. }
  79. /**
  80. * 获取记录详情
  81. * @return \Illuminate\Http\JsonResponse
  82. */
  83. function getInfo()
  84. {
  85. $id = request()->input('id', '');//获取需要查询的记录id
  86. if (empty($id)) return $this->apiResponseError('缺少必要参数');
  87. //查询数据
  88. $where = [['id', $id], ['is_del',0]];
  89. $info = Role::where($where)->select(['id','name','status'])->first();
  90. if (empty($info)) return $this->apiResponseError('没有找到该记录');
  91. return $this->apiResponseSuccess('获取成功', $info);
  92. }
  93. /**
  94. * 获取后台菜单
  95. * @return \Illuminate\Http\JsonResponse
  96. */
  97. function getMenuList(){
  98. $role_id = request()->input('role_id','');
  99. $list = MenuServer::creatServer()->getMenuList($role_id);
  100. return $this->apiResponseSuccess('获取列表成功', [
  101. 'items' => $list,
  102. ]);
  103. }
  104. /**
  105. * 获取导航栏目
  106. * @return \Illuminate\Http\JsonResponse
  107. */
  108. function getSideMenu(){
  109. $role_id = $this->getRoleId();//获取登录物流公司id
  110. //获取该角色的权限节点
  111. $permission_ids =Role::where('id', $role_id)->value('permission_ids');
  112. $url_ids = explode(',', $permission_ids);
  113. //获取导航栏数据
  114. $data = Menu::where([['status',1], ['is_del',0]])
  115. ->where(function ($q) use ($role_id,$url_ids){
  116. if($role_id){
  117. $q->whereIn('id',$url_ids);
  118. }
  119. })
  120. ->where(function ($q){
  121. $q->orWhere('level',1);
  122. $q->orWhere('level',2);
  123. })
  124. ->orderBy('id','asc')
  125. ->pluck('id')
  126. ->toArray();
  127. return $this->apiResponseSuccess('获取信息成功', $data);
  128. }
  129. /**
  130. * 删除(批量)角色
  131. * @return \Illuminate\Http\JsonResponse
  132. */
  133. function destroys(){
  134. $ids = request()->input('ids','');//获取需要删除的id
  135. if(empty($ids)) return $this->apiResponseError('请选择需要删除的数据');
  136. //数据条件
  137. if(!is_array($ids)){
  138. $ids = array_filter(explode(',', $ids));
  139. }
  140. foreach ($ids as $value){
  141. //检查每一个角色下面是否有使用
  142. $where = [['is_del',0], ['role_id',$value]];
  143. $count = User::where($where)->count();
  144. if($count > 0){
  145. return $this->apiResponseError('所选角色还有管理员使用,不能删除');
  146. }
  147. }
  148. $res = Role::whereIn('id',$ids)->update(['is_del' => 1,'status'=>2]);
  149. if ($res) {
  150. return $this->apiResponseSuccess('删除成功');
  151. } else {
  152. return $this->apiResponseError('删除失败');
  153. }
  154. }
  155. }