Users.php 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 系统员工
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\admin\controller;
  8. use app\admin\model\User;
  9. use think\Request;
  10. use think\Session;
  11. use think\Hook;
  12. use think\Cache;
  13. use think\Db;
  14. use app\admin\model\LoginRecord;
  15. use app\admin\model\User as UserModel;
  16. use app\admin\logic\UserLogic;
  17. use app\admin\model\Admin as AdminModel;
  18. use app\crm\traits\StarTrait;
  19. class Users extends ApiCommon
  20. {
  21. use StarTrait;
  22. /**
  23. * 用于判断权限
  24. * @permission 无限制
  25. * @allow 登录员工可访问
  26. * @other 其他根据系统设置
  27. **/
  28. public function _initialize()
  29. {
  30. $action = [
  31. 'permission' => ['exceldownload'],
  32. 'allow' => [
  33. 'index',
  34. 'update',
  35. 'updatepwd',
  36. 'read',
  37. 'updateimg',
  38. 'resetpassword',
  39. 'userlistbystructid',
  40. 'groups',
  41. 'groupsdel',
  42. 'tobeusers',
  43. 'structureuserlist',
  44. 'getuserlist',
  45. 'usernameedit',
  46. 'import',
  47. 'setparent',
  48. 'loginRecord',
  49. 'userstar',
  50. 'querylist',
  51. 'starlist',
  52. 'copyrole',
  53. 'subordinate',
  54. 'countnumofuser',
  55. 'setuserdept'
  56. ]
  57. ];
  58. Hook::listen('check_auth', $action);
  59. $request = Request::instance();
  60. $a = strtolower($request->action());
  61. if (!in_array($a, $action['permission'])) {
  62. parent::_initialize();
  63. }
  64. }
  65. /**
  66. * 员工列表
  67. * @param
  68. * @return
  69. */
  70. public function index()
  71. {
  72. $userModel = model('User');
  73. $param = $this->param;
  74. $data = $userModel->getDataList($param);
  75. return resultArray(['data' => $data]);
  76. }
  77. /**
  78. * 员工详情
  79. * @param
  80. * @return
  81. */
  82. public function read()
  83. {
  84. $userModel = model('User');
  85. $param = $this->param;
  86. $userInfo = $this->userInfo;
  87. if (!$param['id']) $param['id'] = $userInfo['id'];
  88. $data = $userModel->getDataById($param['id']);
  89. if (!$data) {
  90. return resultArray(['error' => $userModel->getError()]);
  91. }
  92. $serverUserInfo = $this->queryLoginUser();
  93. if (!empty($serverUserInfo)) $data['serverUserInfo'] = $serverUserInfo;
  94. return resultArray(['data' => $data]);
  95. }
  96. /**
  97. * 员工创建
  98. * @param
  99. * @return
  100. */
  101. public function save()
  102. {
  103. $userModel = model('User');
  104. $param = $this->param;
  105. $userInfo = $this->userInfo;
  106. $data = $userModel->createData($param);
  107. if (!$data) {
  108. return resultArray(['error' => $userModel->getError()]);
  109. }
  110. return resultArray(['data' => '添加成功']);
  111. }
  112. /**
  113. * 员工编辑
  114. * @param
  115. * @return
  116. */
  117. public function update()
  118. {
  119. $userModel = model('User');
  120. $param = $this->param;
  121. $userInfo = $this->userInfo;
  122. $userData = db('admin_user')->where(['id' => $param['id']])->find();
  123. if (!$param['id']) {
  124. //修改个人信息
  125. $param['user_id'] = $userInfo['id'];
  126. } else {
  127. //权限判断
  128. if (!checkPerByAction('admin', 'users', 'update')) {
  129. header('Content-Type:application/json; charset=utf-8');
  130. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  131. }
  132. }
  133. unset($param['username']);
  134. $data = $userModel->updateDataById($param, $param['id']);
  135. if (!$data) {
  136. return resultArray(['error' => $userModel->getError()]);
  137. }
  138. $param['userInfo'] = $userData;
  139. $resSync = model('Sync')->syncData($param);
  140. return resultArray(['data' => '编辑成功']);
  141. }
  142. //批量设置密码
  143. public function updatePwd()
  144. {
  145. //权限判断
  146. if (!checkPerByAction('admin', 'users', 'update')) {
  147. header('Content-Type:application/json; charset=utf-8');
  148. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  149. }
  150. $param = $this->param;
  151. if ($param['password'] && is_array($param['id'])) {
  152. $userModel = model('User');
  153. $ret = $userModel->updatePwdById($param);
  154. if ($ret) {
  155. return resultArray(['data' => true]);
  156. } else {
  157. return resultArray(['error' => $userModel->getError()]);
  158. }
  159. } else {
  160. return resultArray(['error' => '参数错误']);
  161. }
  162. }
  163. /**
  164. * 员工状态
  165. * @param status 0禁用,1启用,2禁止登陆,3未激活
  166. * @return
  167. */
  168. public function enables()
  169. {
  170. $userModel = model('User');
  171. $param = $this->param;
  172. if (!is_array($param['id'])) {
  173. $ids[] = $param['id'];
  174. } else {
  175. $ids = $param['id'];
  176. }
  177. //顶级管理员不能修改
  178. foreach ($ids as $k => $v) {
  179. if ((int)$v == 1 && $param['status'] == '0') {
  180. unset($ids[$k]);
  181. }
  182. }
  183. $data = $userModel->enableDatas($ids, $param['status']);
  184. if (!$data) {
  185. return resultArray(['error' => $userModel->getError()]);
  186. }
  187. # 添加记录
  188. if ($param['status'] == 0) {
  189. $content = '禁用了:';
  190. } elseif ($param['status'] == 1) {
  191. $content = '激活了:';
  192. }
  193. $user = new ApiCommon();
  194. $userInfo = $user->userInfo;
  195. foreach ($ids as $key => $val) {
  196. $dataInfo = db('admin_user')->where('id', $val)->find();
  197. SystemActionLog($userInfo['id'], 'admin_user', 'employee', $val, 'update', '员工状态', '', '', $content . $dataInfo['realname']);
  198. }
  199. return resultArray(['data' => '操作成功']);
  200. }
  201. /**
  202. * 获取权限范围内的员工数组
  203. * @param
  204. * @return
  205. */
  206. public function getUserList()
  207. {
  208. $userModel = model('User');
  209. $param = $this->param;
  210. $by = $param['by'] ?: '';
  211. $user_id = $param['user_id'] ?: '';
  212. $where = [];
  213. $belowIds = [];
  214. if ($param['m'] && $param['c'] && $param['a']) {
  215. if ($param['m'] == 'oa' && $param['c'] == 'task') {
  216. $belowIds = getSubUserId(true, 1);
  217. } else {
  218. $belowIds = $userModel->getUserByPer($param['m'], $param['c'], $param['a']);
  219. }
  220. $where['user.id'] = ['in', $belowIds];
  221. } else {
  222. if ($by == 'sub') {
  223. $userInfo = $this->userInfo;
  224. $adminIds = $userModel->getAdminId();
  225. if (in_array($userInfo['id'], $adminIds)) {
  226. $belowIds = getSubUserId(true, 1);
  227. } else {
  228. //下属id
  229. $belowIds = getSubUserId();
  230. }
  231. $where['user.id'] = ['in', $belowIds];
  232. } elseif ($by == 'parent') {
  233. if ($user_id == 1) {
  234. $where['user.id'] = 0;
  235. } else {
  236. $unUserId[] = $user_id;
  237. $subUserId = getSubUser($user_id);
  238. $unUserId = $subUserId ? array_merge($subUserId, $unUserId) : $unUserId;
  239. }
  240. $where['user.id'] = ['not in', $unUserId];
  241. } else {
  242. $belowIds = getSubUserId(true, 1);
  243. $where['user.id'] = ['in', $belowIds];
  244. }
  245. }
  246. $userList = db('admin_user')
  247. ->alias('user')
  248. ->where($where)
  249. ->where('user.status>0 and user.type=1')
  250. ->join('__ADMIN_STRUCTURE__ structure', 'structure.id = user.structure_id', 'LEFT')
  251. ->field('user.id,user.realname,user.thumb_img,structure.name as s_name')
  252. ->select();
  253. # 角色数据
  254. $groupList = db('admin_access')->alias('access')
  255. ->join('__ADMIN_GROUP__ group', 'group.id = access.group_id', 'LEFT')
  256. ->field('group.id, group.title, access.user_id')->select();
  257. $groupArray = [];
  258. foreach ($groupList as $key => $value) {
  259. $groupArray[$value['user_id']]['roleId'][] = $value['id'];
  260. $groupArray[$value['user_id']]['roleName'][] = $value['title'];
  261. }
  262. foreach ($userList as $k => $v) {
  263. $userList[$k]['username'] = $v['realname'];
  264. $userList[$k]['thumb_img'] = $v['thumb_img'] ? getFullPath($v['thumb_img']) : '';
  265. # 员工新增角色ID和角色名称字段
  266. $userList[$k]['roleId'] = !empty($groupArray[$v['id']]['roleId']) ? implode(',', $groupArray[$v['id']]['roleId']) : '';
  267. $userList[$k]['roleName'] = !empty($groupArray[$v['id']]['roleName']) ? implode(',', $groupArray[$v['id']]['roleName']) : '';
  268. # 单独处理admin管理员的角色ID和角色名称字段
  269. if ($v['id'] == 1 && (empty($groupArray[$v['id']]['roleId']) || empty($groupArray[$v['id']]['roleName']))) {
  270. $userList[$k]['roleId'] = '1';
  271. $userList[$k]['roleName'] = '超级管理员角色';
  272. }
  273. }
  274. return resultArray(['data' => $userList ?: []]);
  275. }
  276. /**
  277. * 修改头像
  278. * @param
  279. * @return
  280. */
  281. public function updateImg()
  282. {
  283. $fileModel = model('File');
  284. $param = $this->param;
  285. $userInfo = $this->userInfo;
  286. //处理图片
  287. header('Access-Control-Allow-Origin: *');
  288. header('Access-Control-Allow-Methods: POST');
  289. header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
  290. $param['file'] = request()->file('file');
  291. $resImg = $fileModel->updateByField($param['file'], 'User', $param['id'], 'img', 'thumb_img', 150, 150);
  292. if (!$resImg) {
  293. return resultArray(['error' => $fileModel->getError()]);
  294. }
  295. return resultArray(['data' => '上传成功']);
  296. }
  297. /**
  298. * 重置密码
  299. * @param
  300. * @return
  301. */
  302. public function resetPassword()
  303. {
  304. $param = $this->param;
  305. $userInfo = $this->userInfo;
  306. $userModel = model('User');
  307. if (empty($param['new_pwd']) || empty($param['old_pwd'])) return resultArray(['error' => '密码不能为空!']);
  308. if ($param['id'] && (int)$param['id'] !== $userInfo['id']) {
  309. //权限判断
  310. if (!checkPerByAction('admin', 'users', 'update')) {
  311. header('Content-Type:application/json; charset=utf-8');
  312. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  313. }
  314. $user_id = $param['id'];
  315. if (!$param['new_pwd']) {
  316. $this->error = '请输入重置密码';
  317. return false;
  318. }
  319. $userInfo = $userModel->getDataById($user_id);
  320. if (user_md5($param['new_pwd'], $userInfo['salt'], $userInfo['username']) == $userInfo['password']) {
  321. $this->error = '密码没改变';
  322. return false;
  323. }
  324. if (db('admin_user')->where('id', $user_id)->setField('password', user_md5($param['new_pwd'], $userInfo['salt'], $userInfo['username']))) {
  325. $syncData = [];
  326. $syncModel = new \app\admin\model\Sync();
  327. $syncData['user_id'] = $userInfo['id'];
  328. $syncData['salt'] = $userInfo['salt'];
  329. $syncData['password'] = user_md5($param['new_pwd'], $userInfo['salt'], $userInfo['username']);
  330. $resSync = $syncModel->syncData($syncData);
  331. # 添加记录
  332. SystemActionLog($userInfo['id'], 'admin_user', 'employee', $userInfo['id'], 'update', $userInfo['realname'], '', '', '重置了密码:' . $userInfo['realname']);
  333. return resultArray(['data' => '密码重置成功']);
  334. } else {
  335. return resultArray(['error' => '密码重置失败,请重试']);
  336. }
  337. } else {
  338. $userModel = model('User');
  339. $old_pwd = $param['old_pwd'];
  340. $new_pwd = $param['new_pwd'];
  341. $data = $userModel->updatePaw($userInfo, $old_pwd, $new_pwd);
  342. if (!$data) {
  343. return resultArray(['error' => $userModel->getError()]);
  344. }
  345. return resultArray(['data' => $data]);
  346. }
  347. }
  348. /**
  349. * 员工角色关系
  350. * @param
  351. * @return
  352. */
  353. public function groups()
  354. {
  355. //权限判断
  356. if (!checkPerByAction('admin', 'groups', 'update')) {
  357. header('Content-Type:application/json; charset=utf-8');
  358. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  359. }
  360. $param = $this->param;
  361. if (!$param['users'] && !$param['structures']) {
  362. return resultArray(['error' => '请选择员工']);
  363. }
  364. if (!$param['groups']) {
  365. return resultArray(['error' => '请选择角色']);
  366. }
  367. $userModel = model('User');
  368. //部门下所有员工
  369. $userArr = [];
  370. if (is_array($param['structures'])) {
  371. foreach ($param['structures'] as $v) {
  372. $userArr[] = $userModel->getSubUserByStr($v);
  373. }
  374. }
  375. if ($userArr) $userArr = call_user_func_array('array_merge', $userArr); //数组合并
  376. if ($userArr && $param['users']) {
  377. $userIds = array_merge($userArr, $param['users']);
  378. } elseif ($userArr) {
  379. $userIds = $userArr;
  380. } else {
  381. $userIds = $param['users'];
  382. }
  383. $userIds = array_unique($userIds);
  384. $groups = $param['groups'];
  385. $accessModel = model('Access');
  386. $resData = true;
  387. $user_id = $this->userInfo;
  388. foreach ($userIds as $k => $v) {
  389. //角色员工关系处理
  390. $res = $accessModel->userGroup($v, $param['groups']);
  391. if (!$res) {
  392. $resData = false;
  393. }
  394. $userInfo = Db::name('admin_user')->where('id', $v)->find();
  395. $user_id=$this->userInfo;
  396. SystemActionLog($user_id['id'], 'admin_user', 'employee', $v, 'update', $userInfo['realname'], '', '', '员工关联了角色:' . $userInfo['realname']);
  397. }
  398. // if ($resData == false) {
  399. // return resultArray(['error' => '操作失败,请重试']);
  400. // }
  401. return resultArray(['data' => '创建成功']);
  402. }
  403. /**
  404. * 员工角色关系(删除)
  405. * @param
  406. * @return
  407. */
  408. public function groupsDel()
  409. {
  410. //权限判断
  411. if (!checkPerByAction('admin', 'groups', 'update')) {
  412. header('Content-Type:application/json; charset=utf-8');
  413. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  414. }
  415. $param = $this->param;
  416. if (!$param['user_id']) {
  417. return resultArray(['error' => '请选择员工']);
  418. }
  419. if (!$param['group_id']) {
  420. return resultArray(['error' => '参数错误']);
  421. }
  422. # 员工至少保留一个角色
  423. $count = db('admin_access')->where(['user_id' => $param['user_id']])->count();
  424. if ($count == 1) return resultArray(['error' => '员工至少保留一个角色!']);
  425. $res = db('admin_access')->where(['user_id' => $param['user_id'], 'group_id' => $param['group_id']])->delete();
  426. if (!$res) {
  427. return resultArray(['error' => '操作失败,请重试']);
  428. }
  429. return resultArray(['data' => '删除成功']);
  430. }
  431. /**
  432. * [structureUserList 部门员工混合数据]
  433. * @param
  434. * @return
  435. */
  436. public function structureUserList()
  437. {
  438. $structure_list = db('admin_structure')->select();
  439. $structureList = getSubObj(0, $structure_list, '', 1);
  440. foreach ($structureList as $k => $v) {
  441. $userList = [];
  442. $userList = db('admin_user')->where(['structure_id' => $v['id'], 'status' => array('in', ['1', '3'])])->field('id,realname')->select();
  443. $structureList[$k]['userList'] = $userList;
  444. }
  445. return $structureList;
  446. }
  447. //人资员工导入
  448. public function tobeusers()
  449. {
  450. $userModel = model('User');
  451. $param = $this->param;
  452. $flag = $userModel->beusers($param);
  453. if ($flag) {
  454. return resultArray(['data' => $flag]);
  455. } else {
  456. return resultArray(['error' => $userModel->getError()]);
  457. }
  458. }
  459. //根据部门ID获取员工列表
  460. public function userListByStructId()
  461. {
  462. $usermodel = model('User');
  463. $param = $this->param;
  464. $structure_id = $param['structure_id'] ?: '';
  465. $ret = $usermodel->getUserListByStructureId($structure_id) ?: [];
  466. return resultArray(['data' => $ret]);
  467. }
  468. /**
  469. * 员工账号修改
  470. * @param
  471. * @return
  472. */
  473. public function usernameEdit()
  474. {
  475. //权限判断
  476. if (!checkPerByAction('admin', 'users', 'update')) {
  477. header('Content-Type:application/json; charset=utf-8');
  478. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  479. }
  480. $param = $this->param;
  481. $userInfo = $this->userInfo;
  482. //权限判断
  483. if ($param['id'] == 1) {
  484. return resultArray(['error' => '管理员账号暂不能修改']);
  485. }
  486. $adminTypes = adminGroupTypes($userInfo['id']);
  487. if (!in_array(3, $adminTypes) && !in_array(1, $adminTypes) && !in_array(2, $adminTypes)) {
  488. header('Content-Type:application/json; charset=utf-8');
  489. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  490. }
  491. if (!$param['id'] || !$param['username'] || !$param['password']) {
  492. return resultArray(['error' => '参数错误!']);
  493. }
  494. if (db('admin_user')->where(['id' => ['neq', $param['id']], 'username' => $param['username']])->find()) {
  495. return resultArray(['error' => '手机号码已存在!']);
  496. }
  497. $userData = db('admin_user')->where(['id' => $param['id']])->field('username,salt,password,realname')->find();
  498. $data = [];
  499. $data['username'] = $param['username'];
  500. $data['password'] = user_md5($param['password'], $userData['salt'], $param['username']);
  501. $data['userInfo'] = $userData;
  502. $data['mobile'] = $param['username'];
  503. $resSync = model('Sync')->syncData($data);
  504. if ($resSync) {
  505. unset($data['userInfo']);
  506. $res = db('admin_user')->where(['id' => $param['id']])->update($data);
  507. SystemActionLog($userInfo['id'], 'admin_user', 'employee', $param['id'], 'update', $userData['realname'], '', '', '员工账号修改:' . $userData['realname']);
  508. return resultArray(['data' => '修改成功!']);
  509. } else {
  510. return resultArray(['error' => '修改失败,请重试!']);
  511. }
  512. }
  513. /**
  514. * 登录记录
  515. */
  516. public function loginRecord()
  517. {
  518. if (!checkPerByAction('admin', 'loginRecord', 'index')) {
  519. header('Content-Type:application/json; charset=utf-8');
  520. exit(json_encode(['code' => 102, 'error' => '无权操作']));
  521. }
  522. $loginRecordModel = new LoginRecord();
  523. $where = [];
  524. getWhereUserByParam($where, 'create_user_id');
  525. getWhereTimeByParam($where, 'create_time');
  526. $limit = $this->param['limit'] ?: 15;
  527. $data = $loginRecordModel
  528. ->where($where)
  529. ->order(['create_time' => 'DESC'])
  530. ->paginate($limit)
  531. ->each(function ($val) {
  532. $val['username'] = $val->create_user_info['realname'];
  533. $val['type_name'] = $val->type_name;
  534. })
  535. ->toArray();
  536. return resultArray([
  537. 'data' => [
  538. 'list' => $data['data'],
  539. 'dataCount' => $data['total']
  540. ],
  541. ]);
  542. }
  543. /**
  544. * 员工导入模板下载
  545. * @param string $save_path 本地保存路径 用于错误数据导出,在 Admin\Model\Excel::batchImportData()调用
  546. * @return
  547. * @author Michael_xu
  548. */
  549. public function excelDownload($save_path = '')
  550. {
  551. $param = $this->param;
  552. $userInfo = $this->userInfo;
  553. $excelModel = new \app\admin\model\Excel();
  554. // 导出的字段列表
  555. $field_list = UserModel::$import_field_list;
  556. $excelModel->excelImportDownload($field_list, 'admin_user', $save_path);
  557. }
  558. /**
  559. * 员工导入
  560. */
  561. public function import()
  562. {
  563. // 仅允许超管,系统管理员,部门与员工管理员 导入
  564. if (false === UserModel::checkUserGroup([1, 2, 3])) {
  565. return resultArray(['error' => '没有该权限']);
  566. }
  567. $param = $this->param;
  568. $userInfo = $this->userInfo;
  569. $excelModel = new \app\admin\model\Excel();
  570. $param['types'] = 'admin_user';
  571. $file = request()->file('file');
  572. $res = $excelModel->batchImportData($file, $param, $this);
  573. $list = [];
  574. $list[] = $excelModel->getError();
  575. $item = $list[0];
  576. if (!$res) {
  577. return resultArray(['data' => $item]);
  578. }
  579. Cache::clear('user_info');
  580. return resultArray(['data' => $item]);
  581. }
  582. /**
  583. * 批量设置直属上级
  584. *
  585. * @author Ymob
  586. * @datetime 2019-10-28 13:37:57
  587. */
  588. public function setParent()
  589. {
  590. // 仅允许超管,系统管理员,部门与员工管理员 批量设置
  591. if (false === UserModel::checkUserGroup([1, 2, 3])) {
  592. return resultArray(['error' => '没有该权限']);
  593. }
  594. $parent_id = (int)$this->param['parent_id'];
  595. $parent_user = UserModel::find($parent_id);
  596. if (!$parent_user) {
  597. return resultArray(['error' => '请选择直属上级']);
  598. }
  599. $user_id_list = (array)$this->param['id_list'];
  600. if (empty($user_id_list)) {
  601. return resultArray(['error' => '请选择员工']);
  602. }
  603. if (in_array(1, $user_id_list)) {
  604. return resultArray(['error' => '超级管理员不能设置上级']);
  605. }
  606. if (in_array($parent_id, $user_id_list)) {
  607. return resultArray(['error' => '直属上级不能为员工自己']);
  608. }
  609. foreach ($user_id_list as $val) {
  610. if (in_array($parent_id, getSubUserId(true, 0, (int)$val))) {
  611. return resultArray(['error' => '直属上级不能是自己下属(包含下属的下属)']);
  612. }
  613. }
  614. $a = new UserModel;
  615. if ($a->where(['id' => ['IN', $user_id_list]])->update(['parent_id' => $parent_id])) {
  616. Cache::clear('user_info');
  617. return resultArray(['data' => '员工直属上级设置成功']);
  618. } else {
  619. return resultArray(['error' => '员工直属上级设置失败' . $a->getError()]);
  620. }
  621. }
  622. /**
  623. * 通讯录列表
  624. * @return mixed
  625. */
  626. public function queryList()
  627. {
  628. $param = $this->param;
  629. $userInfo = $this->userInfo;
  630. $param['user_id'] = $userInfo['id'];
  631. $userLogic = new UserLogic();
  632. $data = $userLogic->getDataList($param);
  633. return resultArray(['data' => $data]);
  634. }
  635. /**
  636. * 关注的通讯录列表
  637. * @return mixed
  638. */
  639. public function starList()
  640. {
  641. $param = $this->param;
  642. $userInfo = $this->userInfo;
  643. $param['user_id'] = $userInfo['id'];
  644. $userLogic = new UserLogic();
  645. $data = $userLogic->queryList($param);
  646. return resultArray(['data' => $data]);
  647. }
  648. /**
  649. * 设置关注
  650. *
  651. */
  652. public function userStar()
  653. {
  654. $userInfo = $this->userInfo;
  655. $userId = $userInfo['id'];
  656. $targetId = $this->param['target_id'];
  657. $type = $this->param['type'];
  658. if (empty($userId) || empty($targetId) || empty($type)) return resultArray(['error' => '缺少必要参数!']);
  659. if (!$this->setStar($type, $userId, $targetId)) {
  660. return resultArray(['error' => '设置关注失败!']);
  661. }
  662. return resultArray(['data' => '设置关注成功!']);
  663. }
  664. /**
  665. * 复制员工角色
  666. *
  667. * @return \think\response\Json
  668. */
  669. public function copyRole()
  670. {
  671. $param = $this->param;
  672. if (empty($param['user_id']) && empty($param['structure_id'])) return resultArray(['error' => '请选择员工或部门!']);
  673. if (empty($param['group_id'])) return resultArray(['error' => '请选择角色!']);
  674. $userModel = new User();
  675. if (!$userModel->copyRole($param)) return resultArray(['error' => '操作失败!']);
  676. return resultArray(['data' => '操作成功!']);
  677. }
  678. /**
  679. * 获取下属(全部层级)
  680. *
  681. */
  682. public function subordinate()
  683. {
  684. $userId = $this->userInfo['id'];
  685. # 获取下属的ID
  686. $subIds = getSubUserId(false, 0, $userId);
  687. $data = Db::name('admin_user')->field(['id', 'realname', 'thumb_img as img'])->whereIn('id', $subIds)->select();
  688. foreach ($data as $key => $value) {
  689. $data[$key]['img'] = !empty($data[$key]['img']) ? getFullPath($data[$key]['img']) : '';
  690. }
  691. return resultArray(['data' => $data]);
  692. }
  693. /**
  694. * 获取当前登录人信息
  695. *
  696. */
  697. public function queryLoginUser()
  698. {
  699. $resData = [];
  700. $wkcode = file_get_contents(CONF_PATH . 'license.dat');
  701. if ($wkcode) {
  702. $resCheckData = checkWkCode($wkcode);
  703. if ($resCheckData) {
  704. $resData = object_to_array(json_decode($resCheckData));
  705. }
  706. }
  707. return $resData;
  708. }
  709. /**
  710. * 批量重设部门
  711. *
  712. * @author alvin guogaobo
  713. * @version 1.0 版本号
  714. * @since 2021/4/15 0015 16:37
  715. */
  716. public function setUserDept()
  717. {
  718. //权限判断
  719. // 仅允许超管,系统管理员,部门与员工管理员 导入
  720. if (false === UserModel::checkUserGroup([1, 2, 3])) {
  721. return resultArray(['error' => '没有该权限']);
  722. }
  723. $userModel = model('User');
  724. $param = $this->param;
  725. if (!is_array($param['id'])) {
  726. $ids[] = $param['id'];
  727. } else {
  728. $ids = $param['id'];
  729. }
  730. $data = $userModel->setUserDept($ids, $param);
  731. if (!$data) {
  732. return resultArray(['error' => $userModel->getError()]);
  733. }
  734. # 添加记录
  735. $userInfo = $this->userInfo;
  736. foreach ($ids as $key => $val) {
  737. $dataInfo = db('admin_user')->where('id', $val)->find();
  738. SystemActionLog($userInfo['id'], 'admin_user', 'employee', $val, 'update', $dataInfo['realname'], '', '','重置了部门: ' . $dataInfo['realname']);
  739. }
  740. return resultArray(['data' => '操作成功']);
  741. }
  742. /**
  743. * 员工分类后面跟的数据
  744. * @author alvin guogaobo
  745. * @version 1.0 版本号
  746. * @since 2021/4/24 0024 14:42
  747. */
  748. public function countNumOfUser(){
  749. $userModel = model('User');
  750. $data=$userModel->countNumOfUser();
  751. return resultArray(['data' => $data['list']]);
  752. }
  753. }