UserController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/4/9 0009
  6. * Time: 14:05
  7. */
  8. namespace App\Http\Controllers\Admin\System;
  9. use App\Http\Logics\Admin\RoleLogic;
  10. use App\Http\Models\Permission;
  11. use App\Http\Models\Role;
  12. use App\Http\Models\Site;
  13. use App\Http\Models\User;
  14. use App\Http\Requests\System\StoreUserRequest;
  15. use App\Http\Requests\System\UpdateUserRequest;
  16. use Illuminate\Database\Eloquent\Builder;
  17. use Illuminate\Http\Request;
  18. use App\Http\Controllers\Controller;
  19. class UserController extends Controller
  20. {
  21. public function index(Request $request)
  22. {
  23. if (!$request->ajax()) {
  24. return view('admin/system/user', [
  25. 'roles' => Role::all()
  26. ]);
  27. }
  28. $keyword = $request->input('keyword');
  29. if ($roleId = $request->input('role_id')) {
  30. $filter[] = ['role_id', '=', $roleId];
  31. }
  32. $select = ['id', 'username', 'email', 'created_at', 'role_id', 'status', 'is_super', 'nickname', 'profile_img'];
  33. $roles = User::query()->with('role')->select($select)
  34. ->where($filter ?? [])->where(function (Builder $builder) use ($keyword) {
  35. if ($keyword) {
  36. $builder->where('username', 'like', '%' . $keyword . '%')
  37. ->orWhere('nickname', 'like', '%' . $keyword . '%');
  38. }
  39. })->orderByDesc('id')
  40. ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  41. $items = $roles->items();
  42. array_walk($items, function ($item) {
  43. $item->role_name = $item->is_super ? ($item->role->name ?? '' . '【超级管理员】') : $item->role->name ?? '';
  44. $item->status_title = $item->status_with_css;
  45. unset($item->role);
  46. });
  47. return response()->json([
  48. 'rows' => $items,
  49. 'total' => $roles->total()
  50. ]);
  51. }
  52. public function userPermission(Request $request)
  53. {
  54. $userIds = $request->input('userIds');
  55. if (!$request->ajax()) {
  56. $selects = [];
  57. if (count($userIds) == 1) {
  58. $user = User::query()->where(['id' => $userIds[0]])->first();
  59. if (!$user) return response()->json(['message' => '参数错误'], 400);
  60. $selects = $user->permissions->pluck('id')->toArray();
  61. }
  62. $permissions = Permission::query()->whereIn('id', RoleLogic::Customer_Permissions)->select(['title as name', 'id', 'parent_id', 'type'])->get()->toArray();
  63. array_walk($permissions, function (&$item) use ($selects) {
  64. $item['open'] = true;
  65. $item['name'] = $item['name'] . ($item['type'] == 1 ? '【菜单】' : '【功能】');
  66. if (in_array($item['id'], $selects)) {
  67. $item['checked'] = true;
  68. }
  69. });
  70. $trees = list_to_tree($permissions, 'id', 'parent_id', 'children');
  71. return view('admin/system/user_permission', [
  72. 'trees' => $trees,
  73. 'userIds' => $userIds
  74. ]);
  75. }
  76. $permissionIds = $request->input('permissionIds');
  77. $records = User::query()->whereIn('id', $userIds)->get();
  78. foreach ($records as $record) {
  79. $record->permissions()->sync($permissionIds);
  80. }
  81. return response()->json(['message' => '操作成功']);
  82. }
  83. public function store(StoreUserRequest $request)
  84. {
  85. $validated = $request->validated();
  86. $validated['password'] = bcrypt($validated['password']);
  87. $validated['profile_img'] = asset('img/social_round_github_64px_1196568_easyicon.net.png');
  88. $siteIds = $validated['site_ids'] ?? null;
  89. unset($validated['site_ids']);
  90. $user = User::query()->create($validated);
  91. /**@var \App\Http\Models\User $user * */
  92. if ($siteIds) {
  93. $user->sites()->sync($siteIds);
  94. }
  95. if ($validated['role_id'] == Role::TYPE_CUSTOMER) {
  96. $user->permissions()->sync(RoleLogic::Customer_Permissions);
  97. }
  98. return response()->json(['message' => '操作成功']);
  99. }
  100. public function update(UpdateUserRequest $request, $id)
  101. {
  102. $user = User::query()->with('sites')->where(['id' => $id])->first();
  103. /**@var \App\Http\Models\User $user * */
  104. if (!$user) return response()->json(['message' => '数据不存在']);
  105. $validated = $request->validated();
  106. $siteIds = $validated['site_ids'] ?? [];
  107. unset($validated['site_ids']);
  108. if (!empty($validated['password'])) {
  109. $validated['password'] = bcrypt($validated['password']);
  110. } else {
  111. unset($validated['password']);
  112. }
  113. $user->update($validated);
  114. $user->sites()->sync($siteIds);
  115. return response()->json(['message' => '操作成功']);
  116. }
  117. public function show($id)
  118. {
  119. if ($id > 0) {
  120. $user = User::query()->with('sites')->where(['id' => $id])->first();
  121. if (!empty($user->entry_time)) {
  122. $user->entry_time = substr($user->entry_time, 0, 10);
  123. }
  124. $hasSiteIds = $user->sites->pluck('id')->toArray(); //用户所关联的站点
  125. }
  126. return view('admin/system/user_show', [
  127. 'user' => $user ?? null,
  128. 'roles' => Role::query()->select(['id', 'name'])->get(),
  129. 'sites' => Site::all(),
  130. 'hasSiteIds' => $hasSiteIds ?? []
  131. ]);
  132. }
  133. public function detail($id)
  134. {
  135. $user = User::query()->select()->find($id);
  136. return view('/admin/system/user_detail', [
  137. 'user' => $user
  138. ]);
  139. }
  140. public function destroy($id)
  141. {
  142. User::destroy($id);
  143. return response()->json(['message' => '操作成功']);
  144. }
  145. public function batchDestroy(Request $request)
  146. {
  147. $ids = $request->input('ids');
  148. User::destroy($ids);
  149. return response()->json(['message' => '操作成功']);
  150. }
  151. public function on(Request $request)
  152. {
  153. $ids = $request->input('ids');
  154. User::query()->whereIn('id', $ids)->update(['status' => 1]);
  155. return response()->json(['message' => '操作成功']);
  156. }
  157. public function off(Request $request)
  158. {
  159. $ids = $request->input('ids');
  160. User::query()->whereIn('id', $ids)->update(['status' => 0]);
  161. return response()->json(['message' => '操作成功']);
  162. }
  163. }