2022-08-08 14:05:32 +08:00

179 lines
5.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\MenuModel;
use App\Models\User;
use App\Models\UserMenuLineModel;
use App\Models\UserNodeLine;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\Eloquent\Builder;
class UserController extends Controller
{
//查看用户列表
public function index(Request $request){
$map = function (Builder $builder) use ($request) {
$keywords = $request->get('keywords');
if (!$keywords) {
return;
}
$reg = "%" . $keywords . "%";
$builder->where('nickname', 'like', $reg);
$builder->orWhere('account', '=', $keywords);
};
$model = User::withTrashed()->where($map)->orderByDesc('id');
if ($request->get('size')) {
$user = $model->paginate($request->get("size",10));
} else {
$user = $model->get();
}
if (!$user) {
$user = [];
} else {
$user = $user->toArray();
}
return $this->success($user);
}
//查看用户所拥有的权限组
public function show($uid) {
if (!is_numeric($uid)) {
return $this->error(ERROR_CODE_PARAM_INVALID, '参数格式不对');
}
$user = User::withTrashed()->with('nodeGroup')->find($uid);
if (!$user) {
$user = [];
} else {
$user = $user->toArray();
}
return $this->success($user);
}
//查看用户所拥有的菜单
public function showMenu($uid) {
if (!is_numeric($uid)) {
return $this->error(ERROR_CODE_PARAM_INVALID, '参数格式不对');
}
$user = User::withTrashed()->with('menu')->find($uid);
if (!$user) {
$user = [];
} else {
$user = $user->toArray();
}
return $this->success($user);
}
// 给用户配权限组
public function allotNodeGroup($id,Request $request) {
if (!is_numeric($id)) {
return $this->error(ERROR_CODE_PARAM_INVALID, '参数格式不对');
}
$validator = Validator::make($request->all(),[
'node_group_id' => 'array',
], [
'node_group_id.array' => '权限组id必须为数组'
]);
if ($validator->fails()){
return $this->error(ERROR_CODE_PARAM_INVALID,$validator->errors()->first());
}
$arr = $request->all();
if (!$arr){
UserNodeLine::where('user_id',$id)->delete();
return $this->success([]);
}
$user = User::find($id);
$user->nodeGroup()->sync($arr['node_group_id']);
return $this->success();
}
// 给用户配菜单
public function allotMenu($id, Request $request) {
if (!is_numeric($id)) {
return $this->error(ERROR_CODE_PARAM_INVALID, '参数格式不对');
}
$validator = Validator::make($request->all(),[
'menu_ids' => 'array',
], [
'menu_ids.array' => '菜单id必须为数组'
]);
if ($validator->fails()){
return $this->error(ERROR_CODE_PARAM_INVALID,$validator->errors()->first());
}
$arr = $request->all();
if (! $arr){
UserMenuLineModel::where('user_id',$id)->delete();
return $this->success([]);
}
$user = User::find($id);
$user->menu()->sync($arr['menu_ids']);
return $this->success();
}
//修改昵称
public function update(Request $request){
$validator = Validator::make($request->all(),[
'nickname' => 'required',
], [
'nickname.required' => '用户昵称不能为空',
]);
if ($validator->fails()){
return $this->error(ERROR_CODE_PARAM_INVALID,$validator->errors()->first());
}
$account = auth()->user()->account;
$res = User::where('account',$account)->update($request->input());
if (! $res){
return $this->error(ERROR_CODE_NO,'系统繁忙,稍后再试');
}
return $this->success([],'修改成功');
}
//修改昵称
public function updateEmail($id,Request $request){
$validator = Validator::make($request->all(),[
'email' => 'required',
], [
'nickname.required' => '用户邮箱不能为空',
]);
if ($validator->fails()){
return $this->error(ERROR_CODE_PARAM_INVALID,$validator->errors()->first());
}
$res = User::where('id',$id)->update($request->input());
if (! $res){
return $this->error(ERROR_CODE_NO,'系统繁忙,稍后再试');
}
return $this->success([],'修改成功');
}
public function myMenu() {
$user = User::with([
'menu' => function ($query) {
$query->where('state', 1);
},
'nodeGroup'
])->find(auth()->id())->toArray();
if ($user['node_group'] && in_array('超级管理员',array_column($user['node_group'],'name'))){
$arr = MenuModel::orderByDesc('id')->get()->toArray();
$menu = getTreeList($arr);
return $this->success($menu);
}
$pid = [];
if (!empty($user['menu'])) {
foreach ($user['menu'] as $k => $v) {
unset($user['menu'][$k]['pivot']);
$pid[] = $v['pid'];
}
}
$pid = array_unique($pid);
$arr = MenuModel::whereIn('id', $pid)->orderByDesc('id')->get()->toArray();
$arr = array_unique(array_merge($arr, $user['menu']), SORT_REGULAR);
$menu = getTreeList($arr);
return $this->success($menu);
}
}