| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | <?php/** * Created by PhpStorm. * User: Administrator * Date: 2019/4/9 0009 * Time: 14:05 */namespace App\Http\Controllers\Admin\System;use App\Http\Logics\Admin\RoleLogic;use App\Http\Models\Permission;use App\Http\Models\Role;use App\Http\Models\Site;use App\Http\Models\User;use App\Http\Requests\System\StoreUserRequest;use App\Http\Requests\System\UpdateUserRequest;use Illuminate\Database\Eloquent\Builder;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{    public function index(Request $request)    {        if (!$request->ajax()) {            return view('admin/system/user', [                'roles' => Role::all()            ]);        }        $keyword = $request->input('keyword');        if ($roleId = $request->input('role_id')) {            $filter[] = ['role_id', '=', $roleId];        }        $select = ['id', 'username', 'email', 'created_at', 'role_id', 'status', 'is_super', 'nickname', 'profile_img'];        $roles = User::query()->with('role')->select($select)            ->where($filter ?? [])->where(function (Builder $builder) use ($keyword) {                if ($keyword) {                    $builder->where('username', 'like', '%' . $keyword . '%')                        ->orWhere('nickname', 'like', '%' . $keyword . '%');                }            })->orderByDesc('id')            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);        $items = $roles->items();        array_walk($items, function ($item) {            $item->role_name = $item->is_super ? ($item->role->name ?? '' . '【超级管理员】') : $item->role->name ?? '';            $item->status_title = $item->status_with_css;            unset($item->role);        });        return response()->json([            'rows' => $items,            'total' => $roles->total()        ]);    }    public function userPermission(Request $request)    {        $userIds = $request->input('userIds');        if (!$request->ajax()) {            $selects = [];            if (count($userIds) == 1) {                $user = User::query()->where(['id' => $userIds[0]])->first();                if (!$user) return response()->json(['message' => '参数错误'], 400);                $selects = $user->permissions->pluck('id')->toArray();            }            $permissions = Permission::query()->whereIn('id', RoleLogic::Customer_Permissions)->select(['title as name', 'id', 'parent_id', 'type'])->get()->toArray();            array_walk($permissions, function (&$item) use ($selects) {                $item['open'] = true;                $item['name'] = $item['name'] . ($item['type'] == 1 ? '【菜单】' : '【功能】');                if (in_array($item['id'], $selects)) {                    $item['checked'] = true;                }            });            $trees = list_to_tree($permissions, 'id', 'parent_id', 'children');            return view('admin/system/user_permission', [                'trees' => $trees,                'userIds' => $userIds            ]);        }        $permissionIds = $request->input('permissionIds');        $records = User::query()->whereIn('id', $userIds)->get();        foreach ($records as $record) {            $record->permissions()->sync($permissionIds);        }        return response()->json(['message' => '操作成功']);    }    public function store(StoreUserRequest $request)    {        $validated = $request->validated();        $validated['password'] = bcrypt($validated['password']);        $validated['profile_img'] = asset('img/social_round_github_64px_1196568_easyicon.net.png');        $siteIds = $validated['site_ids'] ?? null;        unset($validated['site_ids']);        $user = User::query()->create($validated);        /**@var  \App\Http\Models\User $user * */        if ($siteIds) {            $user->sites()->sync($siteIds);        }        if ($validated['role_id'] == Role::TYPE_CUSTOMER) {            $user->permissions()->sync(RoleLogic::Customer_Permissions);        }        return response()->json(['message' => '操作成功']);    }    public function update(UpdateUserRequest $request, $id)    {        $user = User::query()->with('sites')->where(['id' => $id])->first();        /**@var  \App\Http\Models\User $user * */        if (!$user) return response()->json(['message' => '数据不存在']);        $validated = $request->validated();        $siteIds = $validated['site_ids'] ?? [];        unset($validated['site_ids']);        if (!empty($validated['password'])) {            $validated['password'] = bcrypt($validated['password']);        } else {            unset($validated['password']);        }        $user->update($validated);        $user->sites()->sync($siteIds);        return response()->json(['message' => '操作成功']);    }    public function show($id)    {        if ($id > 0) {            $user = User::query()->with('sites')->where(['id' => $id])->first();            if (!empty($user->entry_time)) {                $user->entry_time = substr($user->entry_time, 0, 10);            }            $hasSiteIds = $user->sites->pluck('id')->toArray(); //用户所关联的站点        }        return view('admin/system/user_show', [            'user' => $user ?? null,            'roles' => Role::query()->select(['id', 'name'])->get(),            'sites' => Site::all(),            'hasSiteIds' => $hasSiteIds ?? []        ]);    }    public function detail($id)    {        $user = User::query()->select()->find($id);        return view('/admin/system/user_detail', [            'user' => $user        ]);    }    public function destroy($id)    {        User::destroy($id);        return response()->json(['message' => '操作成功']);    }    public function batchDestroy(Request $request)    {        $ids = $request->input('ids');        User::destroy($ids);        return response()->json(['message' => '操作成功']);    }    public function on(Request $request)    {        $ids = $request->input('ids');        User::query()->whereIn('id', $ids)->update(['status' => 1]);        return response()->json(['message' => '操作成功']);    }    public function off(Request $request)    {        $ids = $request->input('ids');        User::query()->whereIn('id', $ids)->update(['status' => 0]);        return response()->json(['message' => '操作成功']);    }}
 |