assign('breadcrumb1','用户管理');
$this->assign('breadcrumb2','后台管理员');
}
/**
* 列表页
*
* */
public function index(Model $Model){
$mp = [];
$session = session('userRule');
if ($session){
$mp[] = ['admin_rule.company_id','=',$session['company_id']];
if ($session['business_id']){
$mp[] = ['admin_rule.business_id','=',$session['business_id']];
}
}
if(!in_array(admin('uid'), explode(',', config('administrator')))){
$mp['admin_rule.type'] = 1;
}
// 查询系统用户
$list = $Model::query();
if($mp) $list->join('admin_rule','admin_rule.admin_uid','=','admin.uid');
$list = $list->where($mp)
->orderByDesc('admin.uid')
->paginate(config('page_num',10));
// 循环处理
foreach ($list as $key => $value) {
// 获取分组名
$group = DB::table('auth_group')
->join('auth_group_access','auth_group_access.group_id','=','auth_group.id')
->where([['auth_group_access.user_uid','=',$value['uid']]])
->pluck('auth_group.title')->toArray();
if (in_array($value['uid'],explode(',',config('administrator')))) $group[] = '超管';
// 切成字符串
$value['title'] = implode('、', $group);
//获取用户角色
$rule = DB::table('admin_rule')->where('admin_uid',$value['uid'])->first();
$rule_title = '';
if ($rule){
switch ($rule['menu_type']){
case 1:
$rule_title = '商户';
break;
case 2:
$rule_title = '店铺';
break;
}
if ($rule['menu_type'] == 1){
if ($rule['data_type'] == 1){
$rule_title = '商户普通员工';
}elseif ($rule['data_type'] == 2){
$rule_title = '商户代表';
}
}elseif ($rule['menu_type'] == 2){
if ($rule['data_type'] == 1){
$rule_title = '店铺普通员工';
}elseif ($rule['data_type'] == 2){
$rule_title = '店铺推广员';
}
}
}
$value['rule_title'] = $rule_title;
// 重组
$list[$key] = $value;
}
// 分配数据
$this->assign('empty', '
~~暂无数据 |
');
$this->assign('list',$list);
// 加载模板
return $this->fetch();
}
/**
* 添加
*
* */
public function add(Request $request,Model $Model,AdminRule $AdminRule){
if( request()->isMethod('post') ){
// 验证参数
$request->scene('add')->validate();
// 接收数据
$data['username'] = request('username','');
$data['phone'] = request('phone','');
$data['password'] = request('password','');
$data['password'] = md5($data['password']);
$dataType = request('data_type',1);
// 角色数据
$ruleData = ['menu_type'=>1,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
// 当前登录用户角色数据
$session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
// 修改数据
if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
// 所属权限组
$groups = (array) request('groups',[]);
// 开启事务
DB::beginTransaction();
// 写入数据表
$uid = $Model->add($data);
// 如果操作失败
if( !$uid ) {
// 回滚事务
DB::rollBack();
// 告知错误
return json_send(['code'=>'error','msg'=>'新增失败']);
}
// 权限组
$access = [];
// 循环数据
foreach ( $groups as $group_id) {
// 追加数据
$access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
}
// 写入用户权限组
$result = DB::table('auth_group_access')->insert($access);
// 如果操作失败
if( !$result ) {
// 回滚事务
DB::rollBack();
// 告知错误
return json_send(['code'=>'error','msg'=>'权限分配失败']);
}
//写入用户角色表
$ruleData['admin_uid'] = $uid;
$ruleUid = $AdminRule->add($ruleData);
// 如果操作失败
if( !$ruleUid ){
// 回滚事务
DB::rollBack();
return json_send(['code'=>'error','msg'=>'新增管理员角色失败']);
}
// 提交事务
DB::commit();
// 记录行为
$this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,1,[],$data);
// 告知结果
return json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
}
$whereGroup = [];
// 如果不是超管 查询当前用户所属组
$administrator = explode(',', config('administrator'));
if(!in_array(admin('uid'),$administrator)){
//用户所属组
$gsGroup = DB::table('auth_group_access')->where(['user_uid'=>admin('uid')])->pluck('group_id')->toArray();
//用户所属组 上级
$upGroup = DB::table('auth_group')->whereIn('id',$gsGroup)->pluck('group_pid')->toArray();
//用户所属组的下级
$groupLower = DB::table('auth_group')->whereIn('group_pid',$gsGroup)->pluck('id')->toArray();
//var_dump($groupLower);
$whereGroup = array_merge($upGroup,$gsGroup,$groupLower);
}
// 查询用户组
$query = DB::table('auth_group');
if($whereGroup) $query->whereIn('id',$whereGroup);
$group = $query->whereNotIn('id',explode(',',config('CUSTOM_GROUP')))->select(['id','title'])->get()->toArray();
// 错误告知
if( !$group ) $this->error('请先添加用户组');
// 分配数据
$this->assign('group',$group);
$this->assign('crumbs','新增');
// 加载模板
return $this->fetch();
}
/**
* 修改
*
* */
public function edit(Request $request,Model $Model,AdminRule $AdminRule){
// 接收参数
$uid = request('uid',0);
// 查询用户
$oldData = $Model->where(['uid'=>$uid])->first();
if(request()->isMethod('post')){
// 验证参数
$request->scene('edit')->validate();
// 接收数据
$data['username'] = request('username','');
$data['phone'] = request('phone','');
$dataType = request('data_type',1);
// 角色数据
$ruleData = $AdminRule::query()->where([['admin_uid','=',$uid]])->first(['id','admin_uid','menu_type','data_type','type','company_id','business_id']);
// 如果不存在的话
$ruleData = $ruleData ? $ruleData->toArray() : ['admin_uid'=>$uid,'menu_type'=>1,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
// 当前登录用户角色数据
$session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
// 修改数据
if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
// 密码
$password = request('password','');
// 所属权限组
$groups = (array) request('groups',[]);
// 如果用户不存在
if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
// 不能修改超管的账号
if( $oldData['username'] == config('administrator') ) return json_send(['code'=>'error','msg'=>'这是被禁止的操作']);
// 如果要修密码
if( $password ) $data['password'] = md5($password);
// 开启事务
DB::beginTransaction();
// 写入数据表
$result = $Model->edit($uid,$data);
// 如果操作失败
if( !$result ) {
// 回滚事务
DB::rollBack();
// 告知错误
return json_send(['code'=>'error','msg'=>'新增失败']);
}
// 清空权限组
DB::table('auth_group_access')->where([['user_uid','=',$uid]])->delete();
// 权限组
$access = [];
// 循环数据
foreach ( $groups as $group_id) {
// 追加数据
$access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
}
// 写入用户权限组
$result = DB::table('auth_group_access')->insert($access);
// 如果操作失败
if( !$result ) {
// 回滚事务
DB::rollBack();
// 告知错误
return json_send(['code'=>'error','msg'=>'权限分配失败']);
}
// 写入数据表
$result = empty($ruleData['id']) ? $AdminRule->add($ruleData) : $AdminRule->edit($ruleData['id'],$ruleData);
// 如果操作失败
if( !$result ) {
// 回滚事务
DB::rollBack();
// 告知错误
return json_send(['code'=>'error','msg'=>'修改失败']);
}
// 提交事务
DB::commit();
// 记录行为
$this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,2,$oldData,$data);
// 告知结果
return json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
}
$whereGroup = [];
// 如果不是超管 查询当前用户所属组
$administrator = explode(',', config('administrator'));
if(!in_array(admin('uid'),$administrator)){
// 用户所属组
$gsGroup = DB::table('auth_group_access')->where(['user_uid'=>admin('uid')])->pluck('group_id')->toArray();
// 用户所属组 上级
$upGroup = DB::table('auth_group')->whereIn('id',$gsGroup)->pluck('group_pid')->toArray();
// 用户所属组的下级
$groupLower = DB::table('auth_group')->whereIn('group_pid',$gsGroup)->pluck('id')->toArray();
// 下属组
$whereGroup = array_merge($upGroup,$gsGroup,$groupLower);
}
// 查询用户组
$query = DB::table('auth_group');
// 查询组
if($whereGroup) $query->whereIn('id',$whereGroup);
// 获取
$group = $query->whereNotIn('id',explode(',',config('CUSTOM_GROUP')))->select(['id','title'])->get()->toArray();
// 错误告知
if( !$group ) return $this->error('请先添加用户组');
// 错误告知
if( !$oldData ) return $this->error('查无数据');
// 查询用户的用户组
$oldData['group'] = DB::table('auth_group_access')->where([['user_uid','=',$uid]])->pluck('group_id')->toArray();
// 分配数据
$this->assign('oldData',$oldData);
$this->assign('group',$group);
$this->assign('crumbs','修改');
// 加载模板
return $this->fetch();
}
/**
* 操作历史
*
* */
public function history(){
// 查询
$list = DB::table('user_action')->orderByDesc('ua_id')->paginate(config('page_num',10))->appends(request()->all());
// 分配数据
$this->assign('empty', '~~暂无数据 |
');
$this->assign('breadcrumb2','操作记录');
$this->assign('list',$list);
// 加载模板
return $this->fetch();
}
/**
* 修改状态
*
* */
public function set_status(Request $request,Model $Model){
// 验证参数
$request->scene('set_status')->validate();
// 设置状态
$id = request('uid',0);
$status = request('status',0);
// 查询用户
$oldData = $Model->where(['uid'=>$id])->first();
// 如果用户不存在
if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
// 执行修改
$result = $Model->edit($id,['status'=>$status]);
// 提示新增失败
if( !$result ) return json_send(['code'=>'error','msg'=>'设置失败']);
// 记录行为
$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,['status'=>$status]);
// 告知结果
return json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
}
}