Connect.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <?php
  2. namespace app\acctconnect\controller;
  3. use app\admin\BaseController;
  4. use app\admin\model\Admin as AdminList;
  5. use app\acctconnect\validate\UserCheck;
  6. use think\exception\ValidateException;
  7. use think\facade\Db;
  8. use think\facade\View;
  9. use think\facade\Session;
  10. use think\App;
  11. use app\admin\controller\Role;
  12. class Connect extends BaseController{
  13. public function __construct(App $app)
  14. {
  15. parent::__construct($app);
  16. $this->Role = new Role($this->app);
  17. $this->url = 'https://www.yiguanfep.com/';
  18. }
  19. public function index(){
  20. if (request()->isAjax()) {
  21. $param = get_params();
  22. // $session_admin = get_config('app.session_admin');
  23. // $id = Session::get($session_admin)['id'];
  24. $id = get_login_admin('id');
  25. if($id == ''){
  26. return to_assign(1, '登录过期,请重新登录!');
  27. }
  28. $acct_connect = Db::name('Admin')->where('id', $id)->value('acct_connect');
  29. $where = array();
  30. $where[] = ['status', '>=', 0];
  31. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  32. $admin = AdminList::where($where)->with('Department')
  33. ->where('id', 'in', $acct_connect)
  34. ->order('create_time asc')
  35. ->paginate($rows, false, ['query' => $param])
  36. ->each(function ($item, $key) {
  37. $groupId = Db::name('AdminGroupAccess')->where(['uid' => $item->id])->column('group_id');
  38. $groupName = Db::name('AdminGroup')->where('id', 'in', $groupId)->column('title');
  39. $item->groupName = implode(',', $groupName);
  40. $item->last_login_time = empty($item->last_login_time) ? '-' : date('Y-m-d H:i', $item->last_login_time);
  41. })->toArray();
  42. // dump($admin);
  43. return table_assign(0, '', $admin);
  44. } else {
  45. // View::assign('admin', $admin);
  46. return view();
  47. }
  48. }
  49. //查看
  50. public function view()
  51. {
  52. $id = get_params('id');
  53. $rule = get_admin_rule();
  54. $user_groups = Db::name('AdminGroupAccess')
  55. ->alias('a')
  56. ->join("AdminGroup g", "a.group_id=g.id", 'LEFT')
  57. ->where("a.uid='{$id}' and g.status='1'")
  58. ->select()
  59. ->toArray();
  60. $groups = $user_groups ?: [];
  61. $rules = [];
  62. foreach ($groups as $g) {
  63. $rules = array_merge($rules, explode(',', trim($g['rules'], ',')));
  64. }
  65. $rules = array_unique($rules);
  66. $role_rule = create_tree_list(0, $rule, $rules);
  67. $role_rule = $this->Role->remove_checked_false($role_rule);
  68. $department = get_department();
  69. // dump($department);
  70. $position = Db::name('Position')->where('status', '>=', 0)->order('create_time asc')->select();
  71. View::assign('department', $department);
  72. View::assign('position', $position);
  73. View::assign('role_rule', $role_rule);
  74. View::assign('admin', get_admin($id));
  75. add_log('view', get_params('id'));
  76. return view('', ['admin' => get_admin(get_params('id'))]);
  77. }
  78. // 删除关联账号
  79. public function delete(){
  80. //被删除的关联账号id
  81. $delete_id = get_params("id");
  82. $login_admin_id = get_login_admin('id');
  83. $login_acct_connect = Db::name('Admin')->where('id', $login_admin_id)->value('acct_connect');
  84. $login_acct_connect = explode(',', $login_acct_connect);
  85. $delete_acct_connect = Db::name('Admin')->where('id', $delete_id)->value('acct_connect');
  86. $delete_acct_connect = explode(',', $delete_acct_connect);
  87. $i = 0;
  88. // 更新当前登录账号的关联账号
  89. while($i == 0){
  90. if(in_array($delete_id, $login_acct_connect)){
  91. $delete_id = explode(',', $delete_id);
  92. $login_acct_connect = array_diff($login_acct_connect, $delete_id);
  93. $delete_id = implode(',', $delete_id);
  94. $login_acct_connect = implode(',', $login_acct_connect);
  95. $res = Db::name('Admin')->where('id', $login_admin_id)->update(['acct_connect' => $login_acct_connect]);
  96. if($res){ //更新成功
  97. $i = 1;
  98. }
  99. }else{
  100. break;
  101. }
  102. }
  103. // 更新删除关联关联的关联账号表
  104. while($i == 1){
  105. if(in_array($login_admin_id, $delete_acct_connect)){
  106. $login_admin_id = explode(',', $login_admin_id);
  107. $delete_acct_connect = array_diff($delete_acct_connect, $login_admin_id);
  108. $login_admin_id = implode(',', $login_admin_id);
  109. $delete_acct_connect = implode(',', $delete_acct_connect);
  110. $res = Db::name('Admin')->where('id', $delete_id)->update(['acct_connect' => $delete_acct_connect]);
  111. if($res){ //更新成功
  112. $i = 0;
  113. }
  114. }else{
  115. break;
  116. }
  117. }
  118. return to_assign(0, "删除成功!");
  119. }
  120. // 添加关联账号
  121. public function add(){
  122. if (request()->isAjax()) {
  123. $param = get_params();
  124. try {
  125. validate(UserCheck::class)->check($param);
  126. } catch (ValidateException $e) {
  127. // 验证失败 输出错误信息
  128. return to_assign(1, $e->getError());
  129. }
  130. $admin = Db::name('Admin')->where(['username' => $param['username']])->find();
  131. if (empty($admin)) {
  132. return to_assign(1, '用户名或密码错误');
  133. }
  134. $param['pwd'] = set_password($param['pwd'], $admin['salt']);
  135. if ($admin['pwd'] !== $param['pwd']) {
  136. return to_assign(1, '用户名或密码错误');
  137. }
  138. if ($admin['status'] == 0) {
  139. return to_assign(1, '该用户禁止登录,请于系统所有者联系');
  140. }
  141. $connect_account = Db::name('Admin')->where('username', $param['username'])->field('id, acct_connect')->find();
  142. $connect_id = $connect_account['id'];
  143. $connect_acct_connect = $connect_account['acct_connect'];
  144. if($connect_acct_connect != NULL){
  145. $connect_acct_connect = explode(',', $connect_acct_connect);
  146. }else{
  147. $connect_acct_connect = array();
  148. }
  149. $login_admin_id = get_login_admin('id');
  150. $login_acct_connect = Db::name('Admin')->where('id', $login_admin_id)->value('acct_connect');
  151. if($login_acct_connect != NULL){
  152. $login_acct_connect = explode(',', $login_acct_connect);
  153. }else{
  154. $login_acct_connect = array();
  155. }
  156. $i = 0;
  157. // 更新当前登录账号的关联账号
  158. while($i == 0){
  159. if(!in_array($connect_id, $login_acct_connect)){
  160. array_push($login_acct_connect, $connect_id);
  161. $login_acct_connect = implode(',', $login_acct_connect);
  162. $res = Db::name('Admin')->where('id', $login_admin_id)->update(['acct_connect' => $login_acct_connect]);
  163. if($res){ //更新成功
  164. $i = 1;
  165. }
  166. }else{
  167. return to_assign(1, '已关联该账号!');
  168. }
  169. }
  170. // 更新关联账号的关联账号表
  171. while($i == 1){
  172. if(!in_array($login_admin_id, $connect_acct_connect)){
  173. array_push($connect_acct_connect, $login_admin_id);
  174. $connect_acct_connect = implode(',', $connect_acct_connect);
  175. $res = Db::name('Admin')->where('id', $connect_id)->update(['acct_connect' => $connect_acct_connect]);
  176. if($res){ //更新成功
  177. $i = 0;
  178. }
  179. }else{
  180. return to_assign(1, '已关联该账号!');
  181. }
  182. }
  183. return to_assign(0,"关联成功");
  184. }else{
  185. return view();
  186. }
  187. }
  188. // 切换账号
  189. public function switchLogin(){
  190. $id = get_params('id');
  191. $admin = Db::name('Admin')->where('id', $id)->find();
  192. $data = [
  193. 'last_login_time' => time(),
  194. 'last_login_ip' => request()->ip(),
  195. 'login_num' => $admin['login_num'] + 1,
  196. ];
  197. Db::name('admin')->where(['id' => $admin['id']])->update($data);
  198. $session_admin = get_config('app.session_admin');
  199. Session::set($session_admin, $admin); // null
  200. $token = make_token();
  201. set_cache($token, $admin, 7200);
  202. $admin['token'] = $token;
  203. return to_assign(0, '登录成功', ['uid' => $admin['id']]);
  204. }
  205. }