AdminUser.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?php namespace App\Http\Controllers\Admin;
  2. use App\Http\Requests\Admin\AdminUser as Request;
  3. use App\Models\AdminUser as Model;
  4. use App\Models\AdminRule;
  5. use App\Models\Business;
  6. use App\Models\Company;
  7. use Illuminate\Support\Facades\DB;
  8. /**
  9. * 系统用户
  10. *
  11. * @author 刘相欣
  12. *
  13. */
  14. class AdminUser extends Auth{
  15. protected function _initialize(){
  16. parent::_initialize();
  17. $this->assign('breadcrumb1','用户管理');
  18. $this->assign('breadcrumb2','后台管理员');
  19. }
  20. /**
  21. * 列表页
  22. *
  23. * */
  24. public function index(Model $Model,Business $Business,Company $Company){
  25. // 查询数据
  26. $map = [];
  27. // 当前登录用户角色数据
  28. $session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>1,'business_id'=>0];
  29. // 非超管
  30. if( !in_array(admin('uid'), explode(',', config('administrator'))) ){
  31. // 规格条件
  32. $map[] = ['admin_rule.type','=',1];
  33. $map[] = ['admin_rule.company_id','=',$session['company_id']];
  34. if ($session['business_id']) $map[] = ['admin_rule.business_id','=',$session['business_id']];
  35. }
  36. // 查询系统用户
  37. $list = $Model->query()->join('admin_rule','admin_rule.admin_uid','=','admin.uid','LEFT')->where($map)->orderByDesc('admin.uid')->paginate(config('page_num',10));
  38. // 循环处理
  39. foreach ($list as $key => $value) {
  40. // 获取分组名
  41. $group = DB::table('auth_group')
  42. ->join('auth_group_access','auth_group_access.group_id','=','auth_group.id')
  43. ->where([['auth_group_access.user_uid','=',$value['uid']]])
  44. ->pluck('auth_group.title')->toArray();
  45. // 返回结果
  46. if ( in_array($value['uid'],explode(',',config('administrator'))) ) $group[] = '超管';
  47. // 切成字符串
  48. $value['title'] = implode('、', $group);
  49. //获取用户角色
  50. $rule = DB::table('admin_rule')->where('admin_uid',$value['uid'])->first();
  51. // 角色标题
  52. $rule_title = '';
  53. // 角色标题
  54. if ( $rule ) {
  55. if( $rule['menu_type'] == 1 && $rule['data_type'] == 1 ) $rule_title = '商户普通员工';
  56. if( $rule['menu_type'] == 1 && $rule['data_type'] == 2 ) $rule_title = '商户代表';
  57. if( $rule['menu_type'] == 2 && $rule['data_type'] == 1 ) $rule_title = '店铺普通员工';
  58. if( $rule['menu_type'] == 2 && $rule['data_type'] == 2 ) $rule_title = '店铺推广员';
  59. }
  60. $value['rule_title'] = $rule_title;
  61. $value['business_name'] = $value['business_id'] ? (string)$Business->getOne($value['business_id'] ,'name') : '';
  62. $value['company_name'] = $value['company_id'] ? $Company->getOne($value['company_id'],'name') : '';
  63. // 重组
  64. $list[$key] = $value;
  65. }
  66. // 分配数据
  67. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  68. $this->assign('list',$list);
  69. // 加载模板
  70. return $this->fetch();
  71. }
  72. /**
  73. * 添加
  74. *
  75. * */
  76. public function add(Request $request,Model $Model,AdminRule $AdminRule){
  77. // 当前登录用户角色数据
  78. $session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
  79. if( request()->isMethod('post') ){
  80. // 验证参数
  81. $request->scene('add')->validate();
  82. // 接收数据
  83. $data['username'] = request('username','');
  84. $data['phone'] = request('phone','');
  85. $data['password'] = request('password','');
  86. $data['password'] = md5($data['password']);
  87. $dataType = request('data_type',1);
  88. $groups = (array) request('groups',[]);
  89. // 角色数据
  90. $ruleData = ['menu_type'=>1,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
  91. // 修改数据
  92. if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
  93. if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
  94. if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
  95. // 开启事务
  96. DB::beginTransaction();
  97. // 写入数据表
  98. $uid = $Model->add($data);
  99. // 如果操作失败
  100. if( !$uid ) {
  101. // 回滚事务
  102. DB::rollBack();
  103. // 告知错误
  104. return json_send(['code'=>'error','msg'=>'新增失败']);
  105. }
  106. // 权限组
  107. $access = [];
  108. // 循环数据
  109. foreach ( $groups as $group_id) {
  110. // 追加数据
  111. $access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
  112. }
  113. // 写入用户权限组
  114. $result = DB::table('auth_group_access')->insert($access);
  115. // 如果操作失败
  116. if( !$result ) {
  117. // 回滚事务
  118. DB::rollBack();
  119. // 告知错误
  120. return json_send(['code'=>'error','msg'=>'权限分配失败']);
  121. }
  122. //写入用户角色表
  123. $ruleData['admin_uid'] = $uid;
  124. $ruleUid = $AdminRule->add($ruleData);
  125. // 如果操作失败
  126. if( !$ruleUid ){
  127. // 回滚事务
  128. DB::rollBack();
  129. return json_send(['code'=>'error','msg'=>'新增管理员角色失败']);
  130. }
  131. // 提交事务
  132. DB::commit();
  133. // 记录行为
  134. $this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,1,[],$data);
  135. // 告知结果
  136. return json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
  137. }
  138. // 查询条件
  139. $map = [];
  140. // 如果不是超管 查询当前用户所属组
  141. if(!in_array(admin('uid'),explode(',', config('administrator')))){
  142. $map[] = ['type','=',1];
  143. if($session && $session['menu_type'] ) $map[] = [['menu_type'],'=',$session['menu_type']];
  144. if($session && $session['company_id'] ) $map[] = [$map['company_id'],'=',$session['company_id']];
  145. if($session && $session['business_id'] ) $map[] = [$map['business_id'],'=',$session['business_id']];
  146. }
  147. // 查询用户组
  148. $group = DB::table('auth_group')->where($map)->select(['id','title'])->get()->toArray();
  149. // 错误告知
  150. if( !$group ) $this->error('请先添加用户组');
  151. // 分配数据
  152. $this->assign('group',$group);
  153. $this->assign('crumbs','新增');
  154. // 加载模板
  155. return $this->fetch();
  156. }
  157. /**
  158. * 修改
  159. *
  160. * */
  161. public function edit(Request $request,Model $Model,AdminRule $AdminRule){
  162. // 接收参数
  163. $uid = request('uid',0);
  164. // 查询用户
  165. $oldData = $Model->query()->join('admin_rule','admin_rule.admin_uid','=','admin.uid','LEFT')->where(['uid'=>$uid])->first();
  166. // 当前登录用户角色数据
  167. $session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
  168. // 修改提交
  169. if(request()->isMethod('post')){
  170. // 验证参数
  171. $request->scene('edit')->validate();
  172. // 接收数据
  173. $data['username'] = request('username','');
  174. $data['phone'] = request('phone','');
  175. $dataType = request('data_type',1);
  176. $groups = (array) request('groups',[]);
  177. // 角色数据
  178. $ruleData = $AdminRule::query()->where([['admin_uid','=',$uid]])->first(['id','admin_uid','menu_type','data_type','type','company_id','business_id']);
  179. // 如果不存在的话
  180. $ruleData = $ruleData ? $ruleData->toArray() : ['admin_uid'=>$uid,'menu_type'=>0,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
  181. // 修改数据
  182. if( $dataType ) $ruleData['data_type'] = $dataType;
  183. if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
  184. if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
  185. if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
  186. // 密码
  187. $password = request('password','');
  188. // 如果用户不存在
  189. if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
  190. // 不能修改超管的账号
  191. if( $oldData['username'] == config('administrator') ) return json_send(['code'=>'error','msg'=>'这是被禁止的操作']);
  192. // 如果要修密码
  193. if( $password ) $data['password'] = md5($password);
  194. // 开启事务
  195. DB::beginTransaction();
  196. // 写入数据表
  197. $result = $Model->edit($uid,$data);
  198. // 如果操作失败
  199. if( !$result ) {
  200. // 回滚事务
  201. DB::rollBack();
  202. // 告知错误
  203. return json_send(['code'=>'error','msg'=>'新增失败']);
  204. }
  205. // 清空权限组
  206. DB::table('auth_group_access')->where([['user_uid','=',$uid]])->delete();
  207. // 权限组
  208. $access = [];
  209. // 循环数据
  210. foreach ( $groups as $group_id) {
  211. // 追加数据
  212. $access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
  213. }
  214. // 写入用户权限组
  215. $result = DB::table('auth_group_access')->insert($access);
  216. // 如果操作失败
  217. if( !$result ) {
  218. // 回滚事务
  219. DB::rollBack();
  220. // 告知错误
  221. return json_send(['code'=>'error','msg'=>'权限分配失败']);
  222. }
  223. // 写入数据表
  224. $result = empty($ruleData['id']) ? $AdminRule->add($ruleData) : $AdminRule->edit($ruleData['id'],$ruleData);
  225. // 如果操作失败
  226. if( !$result ) {
  227. // 回滚事务
  228. DB::rollBack();
  229. // 告知错误
  230. return json_send(['code'=>'error','msg'=>'修改失败']);
  231. }
  232. // 提交事务
  233. DB::commit();
  234. // 记录行为
  235. $this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,2,$oldData,$data);
  236. // 告知结果
  237. return json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
  238. }
  239. // 查询条件
  240. $map = [];
  241. // 如果不是超管 查询当前用户所属组
  242. if(!in_array(admin('uid'),explode(',', config('administrator')))){
  243. $map[] = ['type','=',1];
  244. if($session && $session['menu_type'] ) $map[] = [['menu_type'],'=',$session['menu_type']];
  245. if($session && $session['company_id'] ) $map[] = [$map['company_id'],'=',$session['company_id']];
  246. if($session && $session['business_id'] ) $map[] = [$map['business_id'],'=',$session['business_id']];
  247. }
  248. // 查询用户组
  249. $group = DB::table('auth_group')->where($map)->select(['id','title'])->get()->toArray();
  250. // 错误告知
  251. if( !$group ) return $this->error('请先添加用户组');
  252. // 错误告知
  253. if( !$oldData ) return $this->error('查无数据');
  254. // 查询用户的用户组
  255. $oldData['group'] = DB::table('auth_group_access')->where([['user_uid','=',$uid]])->pluck('group_id')->toArray();
  256. // 分配数据
  257. $this->assign('oldData',$oldData);
  258. $this->assign('group',$group);
  259. $this->assign('crumbs','修改');
  260. // 加载模板
  261. return $this->fetch();
  262. }
  263. /**
  264. * 操作历史
  265. *
  266. * */
  267. public function history(){
  268. // 查询
  269. $list = DB::table('user_action')->orderByDesc('ua_id')->paginate(config('page_num',10))->appends(request()->all());
  270. // 分配数据
  271. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  272. $this->assign('breadcrumb2','操作记录');
  273. $this->assign('list',$list);
  274. // 加载模板
  275. return $this->fetch();
  276. }
  277. /**
  278. * 修改状态
  279. *
  280. * */
  281. public function set_status(Request $request,Model $Model){
  282. // 验证参数
  283. $request->scene('set_status')->validate();
  284. // 设置状态
  285. $id = request('uid',0);
  286. $status = request('status',0);
  287. // 查询用户
  288. $oldData = $Model->where(['uid'=>$id])->first();
  289. // 如果用户不存在
  290. if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
  291. // 执行修改
  292. $result = $Model->edit($id,['status'=>$status]);
  293. // 提示新增失败
  294. if( !$result ) return json_send(['code'=>'error','msg'=>'设置失败']);
  295. // 记录行为
  296. $this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,['status'=>$status]);
  297. // 告知结果
  298. return json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
  299. }
  300. }