UsersController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Model\DBCache;
  5. use App\Module\Base;
  6. use App\Module\Users;
  7. use DB;
  8. use Request;
  9. use Session;
  10. /**
  11. * @apiDefine users
  12. *
  13. * 会员
  14. */
  15. class UsersController extends Controller
  16. {
  17. public function __invoke($method, $action = '')
  18. {
  19. $app = $method ? $method : 'main';
  20. if ($action) {
  21. $app .= "__" . $action;
  22. }
  23. return (method_exists($this, $app)) ? $this->$app() : Base::ajaxError("404 not found (" . str_replace("__", "/", $app) . ").");
  24. }
  25. /**
  26. * 登陆
  27. * @return array
  28. */
  29. public function login()
  30. {
  31. $user = Base::DBC2A(DB::table('users')->where('username', trim(Request::input('username')))->first());
  32. if (empty($user)) {
  33. return Base::retError('账号或密码错误。');
  34. }
  35. if ($user['userpass'] != Base::md52(Request::input('userpass'))) {
  36. return Base::retError('账号或密码错误!');
  37. }
  38. //
  39. $array = [
  40. 'token' => Users::token($user),
  41. 'loginnum' => $user['loginnum'] + 1,
  42. 'lastip' => Base::getIp(),
  43. 'lastdate' => Base::time(),
  44. 'lineip' => Base::getIp(),
  45. 'linedate' => Base::time(),
  46. ];
  47. Base::array_over($user, $array);
  48. DB::table('users')->where('id', $user['id'])->update($array);
  49. //
  50. if (intval(Request::input('onlydata')) !== 1) {
  51. Session::put('sessionToken', $array['token']);
  52. }
  53. return Base::retSuccess("登陆成功!", Users::retInfo($user));
  54. }
  55. /**
  56. * 获取会员信息
  57. * @return array|mixed
  58. */
  59. public function info()
  60. {
  61. $callback = Request::input('callback');
  62. //
  63. $user = Users::authE();
  64. if (Base::isError($user)) {
  65. if (strlen($callback) > 3) {
  66. return $callback . '(' . json_encode($user) . ')';
  67. }
  68. return $user;
  69. } else {
  70. $user = $user['data'];
  71. }
  72. //
  73. if (strlen($callback) > 3) {
  74. return $callback . '(' . json_encode(Base::retSuccess('success', Users::retInfo($user))) . ')';
  75. }
  76. return Base::retSuccess('success', Users::retInfo($user));
  77. }
  78. /**
  79. * 获取基本信息
  80. * @return array
  81. */
  82. public function basic()
  83. {
  84. return Base::retSuccess('success', Users::username2basic(trim(Request::input('username'))));
  85. }
  86. /**
  87. * 搜索会员列表
  88. */
  89. public function searchinfo()
  90. {
  91. $keys = Request::input('where');
  92. $whereArr = [];
  93. $whereRaw = null;
  94. if ($keys['usernameequal']) $whereArr[] = ['username', '=', $keys['usernameequal']];
  95. if ($keys['identity']) $whereArr[] = ['identity', 'like', '%,' . $keys['identity'] . ',%'];
  96. if ($keys['noidentity']) $whereArr[] = ['identity', 'not like', '%,' . $keys['noidentity'] . ',%'];
  97. if ($keys['username']) {
  98. $whereRaw.= $whereRaw ? ' AND ' : '';
  99. $whereRaw.= "(`username` LIKE '%" . $keys['username'] . "%' OR `nickname` LIKE '%" . $keys['username'] . "%')";
  100. }
  101. if (intval($keys['projectid']) > 0) {
  102. $whereRaw.= $whereRaw ? ' AND ' : '';
  103. $whereRaw.= "`username` IN (SELECT username FROM `" . env('DB_PREFIX') . "project_users` WHERE `type`='成员' AND `projectid`=" . intval($keys['projectid']) .")";
  104. }
  105. if ($keys['nousername']) {
  106. $nousername = [];
  107. foreach (explode(",", $keys['nousername']) AS $name) {
  108. $name = trim($name);
  109. if ($name && !in_array($name, $nousername)) {
  110. $nousername[] = $name;
  111. }
  112. }
  113. if ($nousername) {
  114. $whereRaw.= $whereRaw ? ' AND ' : '';
  115. $whereRaw.= "(`username` NOT IN ('" . implode("','", $nousername) . "'))";
  116. }
  117. }
  118. if (intval($keys['noprojectid']) > 0) {
  119. $whereRaw.= $whereRaw ? ' AND ' : '';
  120. $whereRaw.= "`username` NOT IN (SELECT username FROM `" . env('DB_PREFIX') . "project_users` WHERE `type`='成员' AND `projectid`=" . intval($keys['noprojectid']) .")";
  121. }
  122. //
  123. $lists = DBCache::table('users')->select(['id', 'username', 'nickname', 'userimg', 'profession'])
  124. ->where($whereArr)
  125. ->whereRaw($whereRaw)
  126. ->orderBy('id')
  127. ->cacheMinutes(now()->addSeconds(10))
  128. ->take(Min(Max(Base::nullShow(Request::input('take'), 10), 1), 100))
  129. ->get();
  130. foreach ($lists AS $key => $item) {
  131. $lists[$key]['userimg'] = Base::fillUrl($item['userimg']);
  132. $lists[$key]['identitys'] = explode(",", trim($item['identity'], ","));
  133. $lists[$key]['setting'] = Base::string2array($item['setting']);
  134. }
  135. return Base::retSuccess('success', $lists);
  136. }
  137. /**
  138. * 修改资料
  139. * @return array|mixed
  140. */
  141. public function editdata()
  142. {
  143. $user = Users::authE();
  144. if (Base::isError($user)) {
  145. return $user;
  146. } else {
  147. $user = $user['data'];
  148. }
  149. //
  150. $array = [];
  151. //头像
  152. $userimg = Request::input('userimg');
  153. if ($userimg) {
  154. $userimg = is_array($userimg) ? $userimg[0]['path'] : $userimg;
  155. $array['userimg'] = Base::unFillUrl($userimg);
  156. }
  157. //昵称
  158. $nickname = trim(Request::input('nickname'));
  159. if ($nickname) {
  160. if (mb_strlen($nickname) < 2) {
  161. return Base::retError('昵称不可以少于2个字!');
  162. } elseif (mb_strlen($nickname) > 8) {
  163. return Base::retError('昵称最多只能设置8个字!');
  164. } else {
  165. $array['nickname'] = $nickname;
  166. }
  167. }
  168. //职位/职称
  169. $profession = trim(Request::input('profession'));
  170. if ($profession) {
  171. if (mb_strlen($profession) < 2) {
  172. return Base::retError('昵称不可以少于2个字!');
  173. } elseif (mb_strlen($profession) > 20) {
  174. return Base::retError('昵称最多只能设置20个字!');
  175. } else {
  176. $array['profession'] = $profession;
  177. }
  178. }
  179. //背景
  180. $bgid = intval(Request::input('bgid'));
  181. if ($bgid > 0) {
  182. $array['bgid'] = $bgid;
  183. }
  184. //
  185. if ($array) {
  186. DB::table('users')->where('id', $user['id'])->update($array);
  187. } else {
  188. return Base::retError('请设置要修改的内容!');
  189. }
  190. return Base::retSuccess('修改成功!');
  191. }
  192. /**
  193. * 修改密码
  194. * @return array|mixed
  195. */
  196. public function editpass()
  197. {
  198. $user = Users::authE();
  199. if (Base::isError($user)) {
  200. return $user;
  201. } else {
  202. $user = $user['data'];
  203. }
  204. //
  205. $oldpass = trim(Request::input('oldpass'));
  206. $newpass = trim(Request::input('newpass'));
  207. if (strlen($newpass) < 6) {
  208. return Base::retError('密码设置不能小于6位数!');
  209. } elseif (strlen($newpass) > 32) {
  210. return Base::retError('密码最多只能设置32位数!');
  211. }
  212. if ($oldpass == $newpass) {
  213. return Base::retError('新旧密码一致!');
  214. }
  215. //
  216. if ($user['setpass']) {
  217. $verify = DB::table('users')->where(['id'=>$user['id'], 'userpass'=>Base::md52($oldpass)])->count();
  218. if (empty($verify)) {
  219. return Base::retError('请填写正确的旧密码!');
  220. }
  221. }
  222. DB::table('users')->where('id', $user['id'])->update(['encrypt' => Base::generatePassword(6), 'userpass'=>Base::md52($newpass)]);
  223. return Base::retSuccess('修改成功');
  224. }
  225. /**
  226. * 团队列表
  227. *
  228. * @apiParam {Object} [sorts] 排序方式,格式:{key:'', order:''}
  229. * - key: username|id(默认)
  230. * - order: asc|desc
  231. * @apiParam {Number} [firstchart] 是否获取首字母,1:获取
  232. * @apiParam {Number} [page] 当前页,默认:1
  233. * @apiParam {Number} [pagesize] 每页显示数量,默认:10,最大:100
  234. */
  235. public function team__lists()
  236. {
  237. $user = Users::authE();
  238. if (Base::isError($user)) {
  239. return $user;
  240. } else {
  241. $user = $user['data'];
  242. }
  243. //
  244. $orderBy = '`id` DESC';
  245. $sorts = Base::json2array(Request::input('sorts'));
  246. if (in_array($sorts['order'], ['asc', 'desc'])) {
  247. switch ($sorts['key']) {
  248. case 'username':
  249. $orderBy = '`' . $sorts['key'] . '` ' . $sorts['order'] . ',`id` DESC';
  250. break;
  251. }
  252. }
  253. //
  254. $lists = DB::table('users')->select(['id', 'username', 'nickname', 'userimg', 'profession', 'regdate'])->orderByRaw($orderBy)->paginate(Min(Max(Base::nullShow(Request::input('pagesize'), 10), 1), 100));
  255. $lists = Base::getPageList($lists);
  256. if ($lists['total'] == 0) {
  257. return Base::retError('未找到任何相关的团队成员');
  258. }
  259. foreach ($lists['lists'] AS $key => $item) {
  260. $lists['lists'][$key]['userimg'] = Users::userimg($item['userimg']);
  261. $lists['lists'][$key]['firstchart'] = Base::getFirstCharter($item['username']);
  262. }
  263. return Base::retSuccess('success', $lists);
  264. }
  265. /**
  266. * 添加团队成员
  267. */
  268. public function team__add()
  269. {
  270. $user = Users::authE();
  271. if (Base::isError($user)) {
  272. return $user;
  273. } else {
  274. $user = $user['data'];
  275. }
  276. //
  277. if (Base::isError(Users::identity('admin'))) {
  278. return Base::retError('身份权限不足!', [], -1);
  279. }
  280. //头像
  281. $userimg = Request::input('userimg');
  282. if ($userimg) {
  283. $userimg = is_array($userimg) ? $userimg[0]['path'] : $userimg;
  284. }
  285. //昵称
  286. $nickname = trim(Request::input('nickname'));
  287. if ($nickname) {
  288. if (mb_strlen($nickname) < 2) {
  289. return Base::retError('昵称不可以少于2个字!');
  290. } elseif (mb_strlen($nickname) > 8) {
  291. return Base::retError('昵称最多只能设置8个字!');
  292. }
  293. }
  294. //职位/职称
  295. $profession = trim(Request::input('profession'));
  296. if ($profession) {
  297. if (mb_strlen($profession) < 2) {
  298. return Base::retError('昵称不可以少于2个字!');
  299. } elseif (mb_strlen($profession) > 20) {
  300. return Base::retError('昵称最多只能设置20个字!');
  301. }
  302. }
  303. //用户名
  304. $username = trim(Request::input('username'));
  305. if (strlen($username) < 2) {
  306. return Base::retError('用户名不可以少于2个字符!');
  307. } elseif (strlen($username) > 16) {
  308. return Base::retError('用户名最多只能设置16个字符!');
  309. }
  310. if (!preg_match('/^[A-Za-z0-9_\x{4e00}-\x{9fa5}]+$/u', $username)) {
  311. return Base::retError('用户名由2-16位数字或字母、汉字、下划线组成!');
  312. }
  313. if (Users::username2id($username) > 0) {
  314. return Base::retError('用户名已存在!');
  315. }
  316. //密码
  317. $userpass = trim(Request::input('userpass'));
  318. if (strlen($userpass) < 6) {
  319. return Base::retError('密码设置不能小于6位数!');
  320. } elseif (strlen($userpass) > 32) {
  321. return Base::retError('密码最多只能设置32位数!');
  322. }
  323. //
  324. if (DB::table('users')->insert([
  325. 'userimg' => $userimg ?: '',
  326. 'nickname' => $nickname ?: '',
  327. 'profession' => $profession ?: '',
  328. 'username' => $username,
  329. 'userpass' => Base::md52($userpass),
  330. 'regip' => Base::getIp(),
  331. 'regdate' => Base::time()
  332. ])) {
  333. return Base::retSuccess('添加成功!');
  334. } else {
  335. return Base::retError('添加失败!');
  336. }
  337. }
  338. /**
  339. * 删除团队成员
  340. */
  341. public function team__delete()
  342. {
  343. $user = Users::authE();
  344. if (Base::isError($user)) {
  345. return $user;
  346. } else {
  347. $user = $user['data'];
  348. }
  349. //
  350. if (Base::isError(Users::identity('admin'))) {
  351. return Base::retError('身份权限不足!', [], -1);
  352. }
  353. $id = intval(Request::input('id'));
  354. if ($user['id'] == $id) {
  355. return Base::retError('不能删除自己!');
  356. }
  357. //
  358. if (DB::table('users')->where('id', $id)->delete()) {
  359. return Base::retSuccess('删除成功!');
  360. } else {
  361. return Base::retError('删除失败!');
  362. }
  363. }
  364. }