User.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. /**
  3. * Created by PhpStorm
  4. * User raingad@foxmail.com
  5. * Date 2022/12/14 17:24
  6. */
  7. namespace app\manage\controller;
  8. use app\BaseController;
  9. use app\enterprise\model\{User as UserModel,GroupUser,Friend};
  10. use think\facade\Db;
  11. use think\facade\Cache;
  12. class User extends BaseController
  13. {
  14. // 获取用户列表
  15. public function index()
  16. {
  17. $map = [];
  18. $model=new UserModel();
  19. $param = $this->request->param();
  20. //搜索关键词
  21. if ($keyword = $this->request->param('keywords')) {
  22. $model = $model->whereLike('realname|account|name_py|email', '%' . $keyword . '%');
  23. }
  24. // 排序
  25. $order='user_id DESC';
  26. if ($param['order_field'] ?? '') {
  27. $order = orderBy($param['order_field'],$param['order_type'] ?? 1);
  28. }
  29. $list = $this->paginate($model->where($map)->order($order));
  30. if ($list) {
  31. $data = $list->toArray()['data'];
  32. foreach($data as $k=>$v){
  33. $data[$k]['avatar']=avatarUrl($v['avatar'],$v['realname'],$v['user_id'],120);
  34. $data[$k]['location']=$v['last_login_ip'] ? implode(" ", \Ip::find($v['last_login_ip'])) : '--';
  35. $data[$k]['reg_location']=$v['register_ip'] ? implode(" ", \Ip::find($v['register_ip'])) : '--';
  36. $data[$k]['last_login_time']=$v['last_login_time'] ? date('Y-m-d H:i:s',$v['last_login_time']) : '--';
  37. unset($data[$k]['password']);
  38. }
  39. }
  40. return success('', $data, $list->total(), $list->currentPage());
  41. }
  42. // 添加用户
  43. public function add()
  44. {
  45. try{
  46. $data = $this->request->param();
  47. $user=new UserModel();
  48. $verify=$user->checkAccount($data);
  49. if(!$verify){
  50. return warning($user->getError());
  51. }
  52. $salt=\utils\Str::random(4);
  53. $data['password'] = password_hash_tp($data['password'],$salt);
  54. $data['salt'] =$salt;
  55. $data['register_ip'] =$this->request->ip();
  56. $data['name_py'] = pinyin_sentence($data['realname']);
  57. $user->save($data);
  58. $data['user_id']=$user->user_id;
  59. return success(lang('system.addOk'), $data);
  60. }catch (\Exception $e){
  61. return error(lang('system.addFail'));
  62. }
  63. }
  64. // 修改用户
  65. public function edit()
  66. {
  67. try{
  68. $data = $this->request->param();
  69. $user=new UserModel();
  70. $verify=$user->checkAccount($data);
  71. if(!$verify){
  72. return warning($user->getError());
  73. }
  74. $user=UserModel::find($data['user_id']);
  75. $user->account =$data['account'];
  76. $user->realname =$data['realname'];
  77. $user->email =$data['email'];
  78. $user->remark=$data['remark'];
  79. $user->sex =$data['sex'] ?? 0;
  80. $user->friend_limit =$data['friend_limit'];
  81. $user->group_limit =$data['group_limit'];
  82. $csUid=$data['cs_uid'] ?? 0;
  83. if($csUid && $csUid==$data['user_id']){
  84. return warning(lang('user.notOwn'));
  85. }
  86. $user->cs_uid =$data['cs_uid'];
  87. // 只有超管才能设置管理员
  88. if($this->userInfo['user_id']==1){
  89. $user->role =$data['role'];
  90. }
  91. $user->status =$data['status'];
  92. $user->name_py= pinyin_sentence($data['realname']);
  93. $user->save();
  94. return success(lang('system.editOk'), $data);
  95. }catch (\Exception $e){
  96. return error(lang('system.editFail'));
  97. }
  98. }
  99. // 删除用户
  100. public function del()
  101. {
  102. $user_id = $this->request->param('user_id');
  103. $user=UserModel::find($user_id);
  104. if(!$user || $user->user_id==1){
  105. return warning(lang('user.exist'));
  106. }
  107. Db::startTrans();
  108. try{
  109. // 删除其好友关系
  110. Friend::where('create_user', $user_id)->whereOr(['friend_user_id'=>$user_id])->delete();
  111. // 删除其群组关系
  112. GroupUser::where('user_id', $user_id)->delete();
  113. UserModel::destroy($user_id);
  114. Db::commit();
  115. return success(lang('system.delOk'));
  116. }catch (\Exception $e){
  117. Db::rollback();
  118. return error($e->getMessage());
  119. }
  120. }
  121. // 修改用户状态
  122. public function setStatus()
  123. {
  124. $user_id = $this->request->param('user_id');
  125. $user=UserModel::find($user_id);
  126. if(!$user){
  127. return warning(lang('user.exist'));
  128. }
  129. try{
  130. $status = $this->request->param('status',0);
  131. // 将禁用状态写入缓存
  132. if(!$status){
  133. Cache::set('forbidUser_'.$user_id,true,env('jwt.ttl',86400));
  134. }
  135. UserModel::where('user_id', $user_id)->update(['status'=>$status]);
  136. return success(lang('system.editOk'));
  137. }catch (\Exception $e){
  138. return error(lang('system.editFail'));
  139. }
  140. }
  141. // 获取用户信息
  142. public function detail()
  143. {
  144. $user_id = $this->request->param('user_id');
  145. $user=UserModel::find($user_id);
  146. if(!$user){
  147. return error(lang('user.exist'));
  148. }
  149. $user->avatar=avatarUrl($user->avatar,$user->realname,$user->user_id,120);
  150. $location='';
  151. if($user->last_login_ip){
  152. $location=implode(" ", \Ip::find($user->last_login_ip));
  153. }
  154. $user->location=$location;
  155. $user->password='';
  156. return success('', $user);
  157. }
  158. // 设置用户角色
  159. public function setRole()
  160. {
  161. $user_id = $this->request->param('user_id');
  162. $user=UserModel::find($user_id);
  163. if(!$user){
  164. return warning(lang('user.exist'));
  165. }
  166. try{
  167. $role = $this->request->param('role');
  168. UserModel::where('user_id', $user_id)->update(['role'=>$role]);
  169. return success('');
  170. }catch (\Exception $e){
  171. return error('');
  172. }
  173. }
  174. // 修改密码
  175. public function editPassword()
  176. {
  177. $user_id = $this->request->param('user_id');
  178. $user=UserModel::find($user_id);
  179. if(!$user){
  180. return warning(lang('user.exist'));
  181. }
  182. try{
  183. $password = $this->request->param('password','');
  184. if($password){
  185. $salt=$user->salt;
  186. $user->password= password_hash_tp($password,$salt);
  187. Cache::set('forbidUser_'.$user_id,true,env('jwt.ttl',86400));
  188. }
  189. $user->save();
  190. return success('');
  191. }catch (\Exception $e){
  192. return error('');
  193. }
  194. }
  195. }