<?php
namespace app\adminVue\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Cache;
use think\facade\Session;
use think\Request;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class User extends TokenCheck
{   
    // VUE3 Admin 登录
    public function login(Request $request){
        if($request->isPost()){
            $data = input('post.');
            $admin = Db::name('admin_user')->where('username',trim($data['username']))->find();
            if (!$admin) {
                http_response_code(440);
                exit(json_encode(array('code'=>1,'msg'=>'用户名错误或不存在')));
            }
            if(md5(trim($data['password']))!==$admin['password']){
                http_response_code(440);
                exit(json_encode(array('code' => 1, 'msg' => '密码错误')));
            }
            if ($admin['status'] == 0) {
                http_response_code(440);
                exit(json_encode(array('code' => 1, 'msg' => '对不起，您的账号还未通过审核，审核通过后会邮件通知您(如有填写正确的邮箱)!')));
            }
            if ($admin['status'] == 2) {
                http_response_code(440);
                exit(json_encode(array('code' => 1, 'msg' => '对不起，您的账号无法使用！')));
            }
            $ip = $_SERVER["REMOTE_ADDR"];
            $token = md5($admin['username'].time().$ip);
            Db::name('admin_user')->where('id',$admin['id'])->update(['last_ip'=>$ip,'token'=>$token]);
            Cache::delete('TokenInfo'.$admin['token']);
            $admin['token'] = $token;
            Cache::set('TokenInfo'.$token, $admin,86400);
            $data['token'] = $token;
            exit(json_encode(array('code'=>0,'data'=>$data,'msg'=>'登录成功')));
        }
    }
    //登录后获取个人信息
    public function getInfo(Request $request){
        if($request->isGet()){
            $headers = getallheaders();
            $token = $headers['Token'];
            $info = Cache::get('TokenInfo'.$token);
            $menuList = Db::name('admin_menus_vue')->where('status',1)->order('menu,order')->lists();
            foreach ($menuList as $k => $v) {
                $v['child'] = [];
                if($v['menu']==1){
                    $menus[$v['id']] = $v;
                }else if($v['menu']==2){
                    $menus1[$v['id']] = $v;
                    if($v['frontpath']==null){
                        $navKey[$v['id']] = $v['mid'];
                    }else{
                        $nav[$v['id']]['id'] = $v['mid'];
                        $nav[$v['id']]['path'] = $v['frontpath'];
                        $navId[$v['id']]['id'] = $v['id'];
                        $navId[$v['id']]['path'] = $v['frontpath'];
                    }
                }else{
                    array_push($menus1[$v['mid']]['child'],$v);
                }
            }
            foreach ($menuList as $k => $v) {
                if($v['menu']==3){
                    $nav[$v['id']]['id'] = $navKey[$v['mid']];
                    $nav[$v['id']]['path'] = $v['frontpath'];
                    $navId[$v['id']]['id'] = $v['id'];
                    $navId[$v['id']]['path'] = $v['frontpath'];
                }
            }
            foreach ($menus1 as $k => $v) {
                array_push($menus[$v['mid']]['child'],$v);
            }
            $roles = Db::name('admin_rights')->where('id',$info['rightid'])->value('vue_right');
            exit(json_encode(array('code'=>0,'data'=>$info,'menus'=>array_values($menus),'nav'=>array_values($nav),'navId'=>array_values($navId),'roles'=>$roles)));
        }
    }
    // VUE3 Admin 登出
    public function logout(Request $request){
        if($request->isPost()){
            $header = getallheaders();
            $info = Cache::get('TokenInfo'.$header['Token']);
            Db::name('admin_user')->where('id',$info['id'])->update(['token'=>null]);
            Cache::delete('TokenInfo'.$header['Token']);
            exit(json_encode(array('code'=>0,'msg'=>'登出成功')));
        }
    }
    //更新个人信息
    public function updateInfo(Request $request){
        if($request->isPost()){
            $data = input('post.');
            $info = Db::name('admin_user')->find($data['id']);
            if(md5(trim($data['oldpassword']))==$info['password']){
                $data['password'] = md5(trim($data['password']));
                $data = array_diff_key($data,['oldpassword'=>0,'repassword'=>0]);
                Db::name('admin_user')->save($data);
                exit(json_encode(array('code'=>0,'msg'=>'信息修改成功，请重新登录')));
            }else{
                http_response_code(440);
                exit(json_encode(array('code' => 1, 'msg' => '原密码错误')));
            }
        }
    }
    //获取角色列表
    public function getRuleList(Request $request){
        $data = Db::name('admin_rights')->order('title')->lists();
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    //获取菜单
    public function getMenusTree(Request $request){
        $data = Db::name('admin_rights')->lists();
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    //更新权限
    public function menusRolesUpdate(Request $request){
        Db::name('admin_rights')->save(input('post.'));
        exit(json_encode(array('code'=>0,'msg'=>'更新成功！')));
    }
    //更新收藏菜单
    public function myFavoriteUpdate(Request $request){
        $data = input('post.');
        $data['notice'] = 3;
        Db::name('admin_user')->save($data);
        $admin = Db::name('admin_user')->find($data['id']);
        Cache::set('TokenInfo'.$admin['token'], $admin);
        exit(json_encode(array('code'=>0,'msg'=>'更新收藏成功！')));
    }
    //我的收藏菜单
    public function getMyInfo(Request $request){
        $adminId = session('admin')['id']; 
        $list = Db::name('admin_user')->where('id',$adminId)->value('vue_collection');
        if($list){
            $ids = explode(",",$list);
            $data = Db::name('admin_menus_vue')->whereIn('id',$ids)->field('id,name,frontpath,icon')->lists();
        }else{
            $data = [];
        }
        $aids = Cache::get('teamAids');
        if(!$aids){
            $team_aids = Db::name('team_list')->where('status',1)->column('aid');
            $aids = array_unique($team_aids);
            Cache::set('teamAids', $aids,3600);
        }
        $task = [];
        exit(json_encode(array('code'=>0,'data'=>$data,'task'=>$task)));
    }
    //更新日志
    public function Uploadlog(){
        $data = input('post.');
        $data['owner'] = session('admin')['id'];
        $data['update'] = time();
        $log = Db::name('admin_base')->where(array('mid'=>3,'title'=>$data['sId']))->find();
        if(!$log){
            Db::name('admin_base')->insert(['mid'=>3,'title'=>$data['sId'],'content'=>strtotime('today')]);
        }
        Db::name('admin_update_log')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'更新成功！')));
    }
    //日志列表
    public function getLogs(){
        $data = Db::name('admin_base')->where('mid',3)->order('id desc')->limit(15)->field('id,content,title')->cates('title');
        foreach ($data as $k => $v) {
            $data[$k]['children'] = [];
            $data[$k]['content'] = date('Y-m-d',$v['content']);
        }
        $log = Db::name('admin_update_log')->whereIn('sId',array_keys($data))->lists();
        if($log){
            foreach ($log as $k => $v) {
                array_push($data[$v['sId']]['children'],$v);
            }
        }else{
            $log = [];
        }
        $data = array_values($data);
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    //留言保存
    public function msgSave(){
        $data = input('post.');
        $data['creat_date'] = time();
        Db::name('admin_message')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'发送成功！')));
    }
    //留言列表
    public function getIndexMessage(){
        $data = [];
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    //用户列表
    public function getUserList(){
        $item = input('get.');
		$obj = Db::name('admin_user');
        if(isset($item['kw'])&&$item['kw']!==''&&$item['kw']!==null){
			$obj = $obj->where('username|truename','like','%'.$item['kw'].'%');
		}
        if(isset($item['status'])&&$item['status']!==''&&$item['status']!==null){
			$obj = $obj->where('status',$item['status']);
		}
		if(isset($item['dpt'])&&$item['dpt']>0){
			$obj = $obj->where('dpt',$item['dpt']);
		}
        $data = $obj->order('id desc')->pages($item['limit']);
        $org_info = Db::name('admin_org')->cates('id');
		$user_info = Db::name('admin_user')->column('truename','id');
        foreach ($data['lists'] as $k => $v) {
            $data['lists'][$k]['dpt_name'] = $org_info[$v['dpt']]['title'];
			$data['lists'][$k]['job_name'] = $v['job']>0?$org_info[$v['job']]['title']:'';
			$data['lists'][$k]['leader_name'] = $v['leader']>0?$user_info[$v['leader']]:'';
			$data['lists'][$k]['reg_time'] = date('Y-m-d',$v['reg_time']);
        }
		exit($this->lay_table($data));
    }
    //用户状态变更
    public function aidStatusChange(){
        $data = input('post.');
        Db::name('admin_user')->where('id',$data['id'])->update(['status'=>$data['status']]);
        exit(json_encode(array('code'=>0,'msg'=>'状态已更新！')));
    }
    //BUG提报反馈
    public function bugFeedback(){
        $data = input('post.');
        $data['update'] = time();
        Db::name('admin_message')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'反馈完成！')));
    }
    public function adminUserUpload(){
        $data = input('post.');
        $sys = Db::name('admin_user')->cates('id');
        foreach ($data as $k => $v) {
            if(isset($sys[$v['id']])){
                Db::name('admin_user')->where('id',$v['id'])->update($v);
                unset($sys[$v['id']]);
            }else{
                Db::name('admin_user')->insert($v);
            }
        }
        foreach ($sys as $k => $v) {
            Db::name('admin_user')->where('id',$v['id'])->update(['status'=>2]);
        }
        exit(json_encode(array('code'=>0,'msg'=>'上传成功！')));
    }
}
