diff --git a/Application/Admin/Controller/AutoPackController.class.php b/Application/Admin/Controller/AutoPackController.class.php index 48f286288..e4a6b4bb1 100644 --- a/Application/Admin/Controller/AutoPackController.class.php +++ b/Application/Admin/Controller/AutoPackController.class.php @@ -297,17 +297,17 @@ class AutoPackController extends Think $map = []; $map['status'] = 1; $map['enable_status'] = ['in', '0,2']; - + $applys = M('apply', 'tab_')->field('id,game_id,game_name,promote_id,promote_account,sdk_version') ->where($map) ->order('bale_sort desc,id desc') ->limit(200) ->select(); - + if (count($applys) == 0) { Printer::export('无等待队列', true); } - + $applyIds = array_column($applys, 'id'); M('apply', 'tab_')->where(['id' => ['in', $applyIds]])->save(['enable_status' => 3]); @@ -353,7 +353,7 @@ class AutoPackController extends Think ->field('a.id,a.game_id,a.game_name,a.promote_account,a.pack_url,a.plist_url,a.promote_id,a.sdk_version,a.enable_status') ->join('tab_apply_launch as al on (al.apply_id=a.id) ') ->where($map) - ->limit(300) + ->limit(300) ->group('a.id') ->select(); foreach ($apply as $key => $value) { @@ -367,7 +367,7 @@ class AutoPackController extends Think $launchmodel -> where(['apply_id' => $value['id']]) -> setField('launch_packge', 0); continue; } - + if (!empty($gameSourceUrl) && is_file($gameSourceUrl)) { $launch = $launchmodel -> where(['apply_id' => $value['id'], 'launch_packge' => array('in', [0, 2, 3])]) -> select(); @@ -1054,6 +1054,4 @@ class AutoPackController extends Think return ''; } } - - } diff --git a/Application/Admin/Controller/ConsoleController.class.php b/Application/Admin/Controller/ConsoleController.class.php index 0e1010b0f..dcf6f6503 100644 --- a/Application/Admin/Controller/ConsoleController.class.php +++ b/Application/Admin/Controller/ConsoleController.class.php @@ -126,4 +126,53 @@ class ConsoleController extends Think { } } } + + public function deleteRepeatUserPlayInfo() + { + // $gameId = 157; + // $gameId = 155; + $gameId = 153; + $sql = 'select id from tab_user_play_info a left join ( + select role_id, server_id, game_id, count(1) from tab_user_play_info where server_id="' . $serverId . '" and game_id = ' . $gameId . ' GROUP BY role_id, server_id, game_id, server_name having count(1) > 1 + ) b on a.role_id=b.role_id where a.server_id=b.server_id and a.game_id=b.game_id and a.server_id="' . $serverId . '" and a.game_id = ' . $gameId . ' order by a.role_id, a.server_id, a.game_id'; + $model = new \Think\Model(); + + $servers = M('server', 'tab_')->field('server_id')->where(['game_id' => $gameId])->group('server_id')->select(); + foreach ($servers as $server) { + $serverId = $server['server_id']; + $sql = 'select a.id, a.role_id, a.server_id, a.game_id, a.role_level from tab_user_play_info a left join ( + select role_id, server_id, game_id, count(1) from tab_user_play_info where server_id="' . $serverId . '" and game_id = ' . $gameId . ' GROUP BY role_id, server_id, game_id, server_name having count(1) > 1 + ) b on a.role_id=b.role_id where a.server_id=b.server_id and a.game_id=b.game_id and a.server_id="' . $serverId . '" and a.game_id = ' . $gameId . ' order by a.role_id, a.server_id, a.game_id'; + // var_dump($sql); + + $result = $model->query($sql); + $uniqueRole = null; + $items = []; + foreach ($result as $item) { + $items[$item['role_id']][] = $item; + } + + $maxRoleIds = []; + $repeatIds = []; + foreach ($items as $roles) { + $maxRole = null; + foreach ($roles as $role) { + if ($maxRole == null) { + $maxRole = $role; + } elseif ($role['role_level'] > $maxRole['role_level']) { + $repeatIds[] = $maxRole['id']; + $maxRole = $role; + } else { + $repeatIds[] = $role['id']; + } + } + $maxRoleIds[] = $maxRole['id']; + } + if (count($repeatIds) > 0) { + M('user_play_info', 'tab_')->where(['id' => ['in', $repeatIds], 'game_id' => $gameId, 'server_id' => $serverId])->delete(); + echo M()->getLastSql(); + echo PHP_EOL; + } + } + } } diff --git a/Application/Admin/Controller/UserController.class.php b/Application/Admin/Controller/UserController.class.php index 14fac80d8..8c95a0240 100644 --- a/Application/Admin/Controller/UserController.class.php +++ b/Application/Admin/Controller/UserController.class.php @@ -8,6 +8,7 @@ // +---------------------------------------------------------------------- namespace Admin\Controller; + use User\Api\UserApi; use Com\Wechat; use Com\WechatAuth; @@ -16,32 +17,34 @@ use Com\WechatAuth; * 后台用户控制器 * @author 麦当苗儿 */ -class UserController extends AdminController { +class UserController extends AdminController +{ /** * 用户管理首页 * @author 麦当苗儿 */ - public function index(){ - $nickname = I('nickname'); - if(isset($_REQUEST['status'])){ - $map['status'] = $_REQUEST['status']; - } - if(is_numeric($nickname)){ - $map['uid|nickname']= array(intval($nickname),array('like','%'.$nickname.'%'),'_multi'=>true); - }else{ - $map['nickname'] = array('like', '%'.(string)$nickname.'%'); - } - - $list = $this->lists('Member', $map); + public function index() + { + $nickname = I('nickname'); + if (isset($_REQUEST['status'])) { + $map['status'] = $_REQUEST['status']; + } + if (is_numeric($nickname)) { + $map['uid|nickname'] = array(intval($nickname), array('like', '%' . $nickname . '%'), '_multi' => true); + } else { + $map['nickname'] = array('like', '%' . (string)$nickname . '%'); + } + + $list = $this->lists('Member', $map); int_to_string($list); $this->assign('_list', $list); $this->meta_title = '管理员列表'; - - $this->m_title = '管理员列表'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'User/index','status'=>1])->find()); - + + $this->m_title = '管理员列表'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/index', 'status' => 1])->find()); + $this->display(); } @@ -49,7 +52,8 @@ class UserController extends AdminController { * 修改昵称初始化 * @author huajie */ - public function updateNickname(){ + public function updateNickname() + { $nickname = M('Member')->getFieldByUid(UID, 'nickname'); $this->assign('nickname', $nickname); $this->meta_title = '修改昵称'; @@ -60,7 +64,8 @@ class UserController extends AdminController { * 修改昵称提交 * @author huajie */ - public function submitNickname(){ + public function submitNickname() + { //获取参数 $nickname = I('post.nickname'); $password = I('post.password'); @@ -68,25 +73,25 @@ class UserController extends AdminController { empty($password) && $this->error('请输入密码'); //密码验证 - $User = new UserApi(); - $uid = $User->login(UID, $password, 4); + $User = new UserApi(); + $uid = $User->login(UID, $password, 4); ($uid == -2) && $this->error('密码不正确'); - $Member = D('Member'); - $data = $Member->create(array('nickname'=>$nickname)); - if(!$data){ + $Member = D('Member'); + $data = $Member->create(array('nickname' => $nickname)); + if (!$data) { $this->error($Member->getError()); } - $res = $Member->where(array('uid'=>$uid))->save($data); + $res = $Member->where(array('uid' => $uid))->save($data); - if($res){ - $user = session('user_auth'); - $user['username'] = $data['nickname']; + if ($res) { + $user = session('user_auth'); + $user['username'] = $data['nickname']; session('user_auth', $user); session('user_auth_sign', data_auth_sign($user)); $this->success('修改昵称成功!'); - }else{ + } else { $this->error('修改昵称失败!'); } } @@ -95,7 +100,8 @@ class UserController extends AdminController { * 修改密码初始化 * @author huajie */ - public function updatePassword(){ + public function updatePassword() + { $this->meta_title = '修改密码'; $this->display('updatepassword'); } @@ -104,24 +110,25 @@ class UserController extends AdminController { * 修改密码提交 * @author huajie */ - public function submitPassword(){ + public function submitPassword() + { //获取参数 - $password = I('post.old'); + $password = I('post.old'); empty($password) && $this->error('请输入原密码'); $data['password'] = I('post.password'); empty($data['password']) && $this->error('请输入新密码'); $repassword = I('post.repassword'); empty($repassword) && $this->error('请输入确认密码'); - if($data['password'] !== $repassword){ + if ($data['password'] !== $repassword) { $this->error('您输入的新密码与确认密码不一致'); } - $Api = new UserApi(); - $res = $Api->updateInfo(UID, $password, $data); - if($res['status']){ + $Api = new UserApi(); + $res = $Api->updateInfo(UID, $password, $data); + if ($res['status']) { $this->success('修改密码成功!'); - }else{ + } else { $this->error($res['info']); } } @@ -130,13 +137,14 @@ class UserController extends AdminController { * 用户行为列表 * @author huajie */ - public function action(){ + public function action() + { //获取列表数据 - $Action = M('Action')->where(array('status'=>array('gt',-1))); - $list = $this->lists($Action); + $Action = M('Action')->where(array('status' => array('gt', -1))); + $list = $this->lists($Action); int_to_string($list); // 记录当前列表页的cookie - Cookie('__forward__',$_SERVER['REQUEST_URI']); + Cookie('__forward__', $_SERVER['REQUEST_URI']); $this->assign('_list', $list); $this->meta_title = '用户行为'; @@ -147,9 +155,10 @@ class UserController extends AdminController { * 新增行为 * @author huajie */ - public function addAction(){ + public function addAction() + { $this->meta_title = '新增行为'; - $this->assign('data',null); + $this->assign('data', null); $this->display('editaction'); } @@ -157,12 +166,13 @@ class UserController extends AdminController { * 编辑行为 * @author huajie */ - public function editAction(){ + public function editAction() + { $id = I('get.id'); empty($id) && $this->error('参数不能为空!'); $data = M('Action')->field(true)->find($id); - $this->assign('data',$data); + $this->assign('data', $data); $this->meta_title = '编辑行为'; $this->display('editaction'); } @@ -171,12 +181,13 @@ class UserController extends AdminController { * 更新行为 * @author huajie */ - public function saveAction(){ + public function saveAction() + { $res = D('Action')->update(); - if(!$res){ + if (!$res) { $this->error(D('Action')->getError()); - }else{ - $this->success($res['id']?'更新成功!':'新增成功!', Cookie('__forward__')); + } else { + $this->success($res['id'] ? '更新成功!' : '新增成功!', Cookie('__forward__')); } } @@ -184,23 +195,24 @@ class UserController extends AdminController { * 会员状态修改 * @author 朱亚杰 */ - public function changeUserStatus($method=null){ - $id = array_unique((array)I('id',0)); - if( in_array(C('USER_ADMINISTRATOR'), $id)){ + public function changeUserStatus($method = null) + { + $id = array_unique((array)I('id', 0)); + if (in_array(C('USER_ADMINISTRATOR'), $id)) { $this->error("不允许对超级管理员执行该操作!"); } - $id = is_array($id) ? implode(',',$id) : $id; - if ( empty($id) ) { + $id = is_array($id) ? implode(',', $id) : $id; + if (empty($id)) { $this->error('请选择要操作的数据!'); } - $map['uid'] = array('in',$id); - $map1['id'] = array('in',$id); - $status=I('method')=='forbidUser'?0:1; - $res= M('UcenterMember')->where($map1)->setField('status',$status); - $res1= M('Member')->where($map)->setField('status',$status); - if($res&&$res1){ + $map['uid'] = array('in', $id); + $map1['id'] = array('in', $id); + $status = I('method') == 'forbidUser' ? 0 : 1; + $res = M('UcenterMember')->where($map1)->setField('status', $status); + $res1 = M('Member')->where($map)->setField('status', $status); + if ($res && $res1) { $this->success('更新成功!'); - }else{ + } else { $this->error('更新失败!'); } @@ -211,43 +223,45 @@ class UserController extends AdminController { * 会员状态修改 * @author 朱亚杰 */ - public function changeStatus($method=null){ - $id = array_unique((array)I('id',0)); - if( in_array(C('USER_ADMINISTRATOR'), $id)){ + public function changeStatus($method = null) + { + $id = array_unique((array)I('id', 0)); + if (in_array(C('USER_ADMINISTRATOR'), $id)) { $this->error("不允许对超级管理员执行该操作!"); } - $id = is_array($id) ? implode(',',$id) : $id; - if ( empty($id) ) { + $id = is_array($id) ? implode(',', $id) : $id; + if (empty($id)) { $this->error('请选择要操作的数据!'); } - $map['uid'] = array('in',$id); - switch ( strtolower($method) ){ + $map['uid'] = array('in', $id); + switch (strtolower($method)) { case 'forbiduser': - \Think\Log::actionLog('User/changeStatus?method=forbidUser','user',1); - $this->forbid('Member', $map ); + \Think\Log::actionLog('User/changeStatus?method=forbidUser', 'user', 1); + $this->forbid('Member', $map); break; case 'resumeuser': - \Think\Log::actionLog('User/changeStatus?method=resumeuser','user',1); - $this->resume('Member', $map ); + \Think\Log::actionLog('User/changeStatus?method=resumeuser', 'user', 1); + $this->resume('Member', $map); break; case 'deleteuser': - \Think\Log::actionLog('User/changeStatus?method=deleteuser','user',1); - $this->delete('Member', $map ); + \Think\Log::actionLog('User/changeStatus?method=deleteuser', 'user', 1); + $this->delete('Member', $map); break; default: $this->error('参数非法'); } } - public function add($username = '', $password = '', $repassword = '', $email = '',$second_pwd=''){ + public function add($username = '', $password = '', $repassword = '', $email = '', $second_pwd = '') + { - if(IS_POST){ + if (IS_POST) { /*检测用户名是否为空*/ - if (empty($username)){ + if (empty($username)) { $this->error('管理员账号不能为空!'); } /* 检测密码 */ - if($password != $repassword){ + if ($password != $repassword) { $this->error('管理员密码和确认密码不一致!'); } $usernameUser = M('UcenterMember', 'sys_')->field('username')->where(['username' => $username])->find(); @@ -259,84 +273,87 @@ class UserController extends AdminController { $this->error('邮箱已存在!'); } /* 调用注册接口注册用户 */ - $User = new UserApi; - $uid = $User->register($username, $password, $email,$second_pwd); - if(0 < $uid){ //注册成功 + $User = new UserApi; + $uid = $User->register($username, $password, $email, $second_pwd); + if (0 < $uid) { //注册成功 $user = array('uid' => $uid, 'nickname' => $username, 'status' => 1); $data['uid'] = $uid; $data['group_id'] = I('auth'); M('auth_group_access')->data($data)->add(); - if(!M('Member')->add($user)){ + if (!M('Member')->add($user)) { $this->error('用户添加失败!'); } else { - \Think\Log::actionLog('User/add','Member',$uid); - $this->success('用户添加成功!',U('index')); + \Think\Log::actionLog('User/add', 'Member', $uid); + $this->success('用户添加成功!', U('index')); } } else { //注册失败,显示错误信息 $this->error($this->showRegError($uid)); } } else { - $list=D('AuthGroup')->where(array('status'=>1))->select(); - $this->assign('lists',$list); + $list = D('AuthGroup')->where(array('status' => 1))->select(); + $this->assign('lists', $list); $this->meta_title = '新增管理员'; - - - $this->m_title = '管理员列表'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'User/index','status'=>1])->find()); - - + + $this->m_title = '管理员列表'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/index', 'status' => 1])->find()); + + $this->display(); } } -/** - * 系统非常规MD5加密方法 - * @param string $str 要加密的字符串 - * @return string - */ -function think_ucenter_md5($str, $key = 'ThinkUCenter'){ - return '' === $str ? '' : md5(sha1($str) . $key); -} - public function edit($id){ + + /** + * 系统非常规MD5加密方法 + * @param string $str 要加密的字符串 + * @return string + */ + function think_ucenter_md5($str, $key = 'ThinkUCenter') + { + return '' === $str ? '' : md5(sha1($str) . $key); + } + + public function edit($id) + { // var_dump(session());exit; - if(IS_POST){ - if(isset($_POST['bind_wx'])){ - if($_POST['bind_wx']=='unbind_wx'){ - $info['admin_openid']=''; - }else{ - $info['admin_openid']=session('admin_openid'); - if($info['admin_openid']==''){ + if (IS_POST) { + if (isset($_POST['bind_wx'])) { + if ($_POST['bind_wx'] == 'unbind_wx') { + $info['admin_openid'] = ''; + } else { + $info['admin_openid'] = session('admin_openid'); + if ($info['admin_openid'] == '') { $this->error('请在30分钟内扫描并关注微信公众号!'); } } } - if($_POST['auth']==''&&$id!=1){ + if ($_POST['auth'] == '' && $id != 1) { $this->error('请选择用户权限!'); } - if($_POST['password']==''){ + if ($_POST['password'] == '') { //$this->error('请填写管理员密码!'); } - if(!empty($_POST['password']) && (strlen($_POST['password'])<6 || strlen($_POST['password']) > 30)){ + if (!empty($_POST['password']) && (strlen($_POST['password']) < 6 || strlen($_POST['password']) > 30)) { $this->error('管理员密码长度必须在6-30个字符之间!'); } - if($_POST['second_pwd']==''){ + if ($_POST['second_pwd'] == '') { //$this->error('请填写二级密码!'); } - if(!empty($_POST['second_pwd']) && (strlen($_POST['second_pwd'])<6 || strlen($_POST['second_pwd']) > 30)){ + if (!empty($_POST['second_pwd']) && (strlen($_POST['second_pwd']) < 6 || strlen($_POST['second_pwd']) > 30)) { $this->error('二级密码长度必须在6-30个字符之间!'); } - if($_POST['email']==''){ + if ($_POST['email'] == '') { $this->error('请填写邮箱!'); } - - $pattern = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i"; - - if(!preg_match( $pattern, $_POST['email'])) { - $this->error('邮箱格式不正确!'); - } - if(isset($_POST['mobile'])&&$_POST['mobile']!=''){ + + $pattern = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i"; + + if (!preg_match($pattern, $_POST['email'])) { + $this->error('邮箱格式不正确!'); + } + if (isset($_POST['mobile']) && $_POST['mobile'] != '') { $dx = A('Phone'); - $res = $dx->check_tel_code($_POST['mobile'],$_POST['code']); + $res = $dx->check_tel_code($_POST['mobile'], $_POST['code']); switch ($res) { case '-1': $this->error('短信验证码无效,请重新获取'); @@ -349,27 +366,27 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ break; } } - $Member=D('UcenterMember'); - $mem=D('Member'); - $au=D('AuthGroupAccess'); - $map['id']=$id; - $maps['uid']=$id; - $info['username']=$_POST['username']; - $in['nickname']=$_POST['username']; - $pwd=$this->think_ucenter_md5($_POST['password'],UC_AUTH_KEY); - $spwd=$this->think_ucenter_md5($_POST['second_pwd'],UC_AUTH_KEY); - $rpwd=$Member->where(array('id'=>$id))->find(); - $oldpwd=$rpwd['password']; - $oldspwd=$rpwd['second_pwd']; + $Member = D('UcenterMember'); + $mem = D('Member'); + $au = D('AuthGroupAccess'); + $map['id'] = $id; + $maps['uid'] = $id; + $info['username'] = $_POST['username']; + $in['nickname'] = $_POST['username']; + $pwd = $this->think_ucenter_md5($_POST['password'], UC_AUTH_KEY); + $spwd = $this->think_ucenter_md5($_POST['second_pwd'], UC_AUTH_KEY); + $rpwd = $Member->where(array('id' => $id))->find(); + $oldpwd = $rpwd['password']; + $oldspwd = $rpwd['second_pwd']; $User = new UserApi; - $info['password']= (empty($pwd) || $pwd==$oldpwd)?$oldpwd:$pwd; - $info['second_pwd']= (empty($spwd) || $spwd==$oldspwd)?$oldspwd:$spwd; - $info['email']=$_POST['email']; - $info['mobile']=isset($_POST['mobile'])?$_POST['mobile']:''; - $ss['group_id']=$_POST['auth']; - $ss['houtai']=$_POST['houtai']; - $smember=$Member->where($map)->save($info); - $meb=$mem->where($maps)->save($in); + $info['password'] = (empty($pwd) || $pwd == $oldpwd) ? $oldpwd : $pwd; + $info['second_pwd'] = (empty($spwd) || $spwd == $oldspwd) ? $oldspwd : $spwd; + $info['email'] = $_POST['email']; + $info['mobile'] = isset($_POST['mobile']) ? $_POST['mobile'] : ''; + $ss['group_id'] = $_POST['auth']; + $ss['houtai'] = $_POST['houtai']; + $smember = $Member->where($map)->save($info); + $meb = $mem->where($maps)->save($in); if ($au->where(array('uid' => $id))->find()) { if ($ss['group_id'] == '') { unset($ss['group_id']); @@ -379,178 +396,223 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ $ss['uid'] = $id; $ag = $au->add($ss); } - - if($smember !== false||$meb||$ag){ - M('user_pwd')->where($maps)->setField('password',think_encrypt($info['password'])); - $this->success('修改成功!',U('User/index')); - }else{ - $this->error('修改失败!',U('User/index')); + + if ($smember !== false || $meb || $ag) { + M('user_pwd')->where($maps)->setField('password', think_encrypt($info['password'])); + $this->success('修改成功!', U('User/index')); + } else { + $this->error('修改失败!', U('User/index')); } - }else{ - $map['id']=$_GET['id']; - $Member=D('UcenterMember')->where($map)->find(); - $au=D('AuthGroupAccess')->where(array('uid'=>$_GET['id']))->find(); - $this->assign("authid",$au["group_id"]); - $this->assign("houtai",$au["houtai"]); - $list=D('AuthGroup')->where(array('status'=>1))->select(); - $username=$_POST['username']; - $password=$_POST['password']; - $this->assign('lists',$list); - $this->assign('list',$Member); - $this->assign('sd',$group); - $this->meta_title = '编辑管理员'; - - $this->m_title = '管理员列表'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'User/index','status'=>1])->find()); - - + } else { + $map['id'] = $_GET['id']; + $Member = D('UcenterMember')->where($map)->find(); + $au = D('AuthGroupAccess')->where(array('uid' => $_GET['id']))->find(); + $this->assign("authid", $au["group_id"]); + $this->assign("houtai", $au["houtai"]); + $list = D('AuthGroup')->where(array('status' => 1))->select(); + $username = $_POST['username']; + $password = $_POST['password']; + $this->assign('lists', $list); + $this->assign('list', $Member); + $this->assign('sd', $group); + $this->meta_title = '编辑管理员'; + + $this->m_title = '管理员列表'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/index', 'status' => 1])->find()); + + $this->display(); } } - public function bdwx(){ - $map['id']=UID; - $Member=D('UcenterMember')->field('id,username,admin_openid,openid_sign')->where($map)->find(); - $this->assign('id',$map['id']); - $this->assign('list',$Member); + + public function bdwx() + { + $map['id'] = UID; + $Member = D('UcenterMember')->field('id,username,admin_openid,openid_sign')->where($map)->find(); + $this->assign('id', $map['id']); + $this->assign('list', $Member); $this->meta_title = '绑定微信'; $this->display(); } - public function updatelist($p=0){ + + public function updatelist($p = 0) + { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 - if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;} - if(isset($_REQUEST['op_account'])){ - if ($_REQUEST['op_account']=='全部') { + if (isset($_REQUEST['row'])) { + $row = $_REQUEST['row']; + } else { + $row = 10; + } + if (isset($_REQUEST['op_account'])) { + if ($_REQUEST['op_account'] == '全部') { unset($_REQUEST['op_account']); - }else{ - $map['op_account'] = trim($_REQUEST['op_account']); + } else { + $map['op_account'] = trim($_REQUEST['op_account']); unset($_REQUEST['op_account']); } } - if(isset($_REQUEST['game_name'])){ - $map['game_name'] = trim($_REQUEST['game_name']); + if (isset($_REQUEST['game_name'])) { + $map['game_name'] = trim($_REQUEST['game_name']); unset($_REQUEST['game_name']); } - if(isset($_REQUEST['account'])){ - $map['user_account'] = array('like','%'.trim($_REQUEST['account']).'%'); + if (isset($_REQUEST['account'])) { + $map['user_account'] = array('like', '%' . trim($_REQUEST['account']) . '%'); unset($_REQUEST['account']); } - if(isset($_REQUEST['huobi'])){ - $map['type'] = $_REQUEST['huobi']; + if (isset($_REQUEST['huobi'])) { + $map['type'] = $_REQUEST['huobi']; unset($_REQUEST['huobi']); } - if(isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])){ - $map['create_time'] = array('BETWEEN',array(strtotime($_REQUEST['timestart']),strtotime($_REQUEST['timeend'])+24*60*60-1)); - unset($_REQUEST['timestart']);unset($_REQUEST['timeend']); - }elseif(isset($_REQUEST['timestart'])){ - $map['create_time'] = ['GT',strtotime(I('timestart'))]; + if (isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])) { + $map['create_time'] = array('BETWEEN', array(strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1)); unset($_REQUEST['timestart']); - }elseif(isset($_REQUEST['timeend'])){ - $map['create_time'] = ['LT',strtotime(I('timeend'))+86399]; + unset($_REQUEST['timeend']); + } elseif (isset($_REQUEST['timestart'])) { + $map['create_time'] = ['GT', strtotime(I('timestart'))]; + unset($_REQUEST['timestart']); + } elseif (isset($_REQUEST['timeend'])) { + $map['create_time'] = ['LT', strtotime(I('timeend')) + 86399]; unset($_REQUEST['timeend']); } - $list=M('balance_edit','tab_') + $list = M('balance_edit', 'tab_') ->where($map) ->order('create_time desc') ->page($page, $row) ->select(); - $count = M('balance_edit','tab_')->where($map)->count(); + $count = M('balance_edit', 'tab_')->where($map)->count(); //分页 - $page = set_pagination($count,$row); - if($page) {$this->assign('_page', $page);} - - $this->assign('list',$list); + $page = set_pagination($count, $row); + if ($page) { + $this->assign('_page', $page); + } + + $this->assign('list', $list); $this->meta_title = '修改记录'; - - $this->m_title = '账户修改记录'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Member/login_record','status'=>1])->find()); - - + + $this->m_title = '账户修改记录'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Member/login_record', 'status' => 1])->find()); + + $this->display('updatelist'); } + /** * 获取用户注册错误信息 - * @param integer $code 错误编码 + * @param integer $code 错误编码 * @return string 错误信息 */ - private function showRegError($code = 0){ + private function showRegError($code = 0) + { switch ($code) { - case -1: $error = '管理员账号长度必须在16个字符以内!'; break; - case -2: $error = '管理员账号被禁止注册!'; break; - case -3: $error = '管理员账号被占用!'; break; - case -4: $error = '管理员密码长度必须在6-30个字符之间!'; break; - case -5: $error = '邮箱格式不正确!'; break; - case -6: $error = '邮箱长度必须在1-32个字符之间!'; break; - case -7: $error = '邮箱被禁止注册!'; break; - case -8: $error = '邮箱被占用!'; break; - case -9: $error = '手机格式不正确!'; break; - case -10: $error = '手机被禁止注册!'; break; - case -11: $error = '手机号被占用!'; break; - case -12: $error = '二级密码长度必须在6-30个字符之间!';break; - default: $error = '未知错误'; + case -1: + $error = '管理员账号长度必须在16个字符以内!'; + break; + case -2: + $error = '管理员账号被禁止注册!'; + break; + case -3: + $error = '管理员账号被占用!'; + break; + case -4: + $error = '管理员密码长度必须在6-30个字符之间!'; + break; + case -5: + $error = '邮箱格式不正确!'; + break; + case -6: + $error = '邮箱长度必须在1-32个字符之间!'; + break; + case -7: + $error = '邮箱被禁止注册!'; + break; + case -8: + $error = '邮箱被占用!'; + break; + case -9: + $error = '手机格式不正确!'; + break; + case -10: + $error = '手机被禁止注册!'; + break; + case -11: + $error = '手机号被占用!'; + break; + case -12: + $error = '二级密码长度必须在6-30个字符之间!'; + break; + default: + $error = '未知错误'; } return $error; } - public function get_openid(){ + + public function get_openid() + { $User = new UserApi; - if($_POST['id']>999){ - $this->ajaxReturn(array('status'=>0,'msg'=>'管理员id不能大于999')); + if ($_POST['id'] > 999) { + $this->ajaxReturn(array('status' => 0, 'msg' => '管理员id不能大于999')); } $data = $User->verifyPwd($_POST['id'], $_POST['pwd']); - if(!$data){ - $this->ajaxReturn(array('status'=>0,'msg'=>'密码错误,请重新选择')); + if (!$data) { + $this->ajaxReturn(array('status' => 0, 'msg' => '密码错误,请重新选择')); } - $appid = C('wechat.appid'); + $appid = C('wechat.appid'); $appsecret = C('wechat.appsecret'); - $result=auto_get_access_token(dirname(__FILE__).'/access_token_validity.txt'); - if($result['is_validity']){ - session('token',$result['access_token']); - $auth = new WechatAuth($appid, $appsecret,$result['access_token']); - }else{ - $auth = new WechatAuth($appid, $appsecret); + $result = auto_get_access_token(dirname(__FILE__) . '/access_token_validity.txt'); + if ($result['is_validity']) { + session('token', $result['access_token']); + $auth = new WechatAuth($appid, $appsecret, $result['access_token']); + } else { + $auth = new WechatAuth($appid, $appsecret); $token = $auth->getAccessToken(); - $token['expires_in_validity']=time()+$token['expires_in']; - wite_text(json_encode($token),dirname(__FILE__).'/access_token_validity.txt'); - session('token',$token['access_token']); + $token['expires_in_validity'] = time() + $token['expires_in']; + wite_text(json_encode($token), dirname(__FILE__) . '/access_token_validity.txt'); + session('token', $token['access_token']); } - $times=date('s',time()); + $times = date('s', time()); // $scene_id=strrev($_POST['id'].$times); - $scene_id=$_POST['id'].$times.$_POST['type']; - session('scene_id',$scene_id); - $ticket = $auth->qrcodeCreate($scene_id,600);//10分钟 - if($ticket==''){ - $return=array('status'=>0,'data'=>'获取ticket失败!'); + $scene_id = $_POST['id'] . $times . $_POST['type']; + session('scene_id', $scene_id); + $ticket = $auth->qrcodeCreate($scene_id, 600);//10分钟 + if ($ticket == '') { + $return = array('status' => 0, 'data' => '获取ticket失败!'); } $qrcode = $auth->showqrcode($ticket['ticket']); - $return=array('status'=>1,'data'=>$qrcode); + $return = array('status' => 1, 'data' => $qrcode); $this->ajaxReturn($return); } - function checkpwd(){ + + function checkpwd() + { $User = new UserApi; $data = $User->verifyPwd($_POST['id'], $_POST['pwd']); - $this->ajaxReturn(array('data'=>$data)); + $this->ajaxReturn(array('data' => $data)); } - function checkOpenidpic(){ + + function checkOpenidpic() + { sleep(2); - $data=M('ucenter_member')->where(array('id'=>$_REQUEST['id']))->find(); - if($data['openid_sign']==session('scene_id')){ - $this->ajaxReturn(array("status"=>1)); - }else{ - $this->ajaxReturn(array("status"=>0)); + $data = M('ucenter_member')->where(array('id' => $_REQUEST['id']))->find(); + if ($data['openid_sign'] == session('scene_id')) { + $this->ajaxReturn(array("status" => 1)); + } else { + $this->ajaxReturn(array("status" => 0)); } } - public function delete($id){ + public function delete($id) + { M()->startTrans(); $res1 = M('member')->delete($id); $res2 = M('ucenter_member')->delete($id); - $res3 = M('auth_group_access')->where(array('uid'=>$id))->delete(); - if($res1 && $res2 && $res3){ + $res3 = M('auth_group_access')->where(array('uid' => $id))->delete(); + if ($res1 && $res2 && $res3) { M()->commit(); $this->success('删除成功'); - }else{ + } else { M()->rollback(); - $this->error('删除失败'.M()->getError()); + $this->error('删除失败' . M()->getError()); } } @@ -558,7 +620,7 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ { $map = []; if (isset($_REQUEST['game_name'])) { - $map['game_name'] = ['like', trim($_REQUEST['game_name'])."%"]; + $map['game_name'] = ['like', trim($_REQUEST['game_name']) . "%"]; unset($_REQUEST['game_name']); } if (isset($_REQUEST['server_id'])) { @@ -578,19 +640,19 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ $promoter_ids = D("Promote")->where($queryStr)->field('id')->select(); $promoter_ids ? $map['promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))] : null; } - + } if (isset($_REQUEST['game_type'])) { $map['sdk_version'] = trim($_REQUEST['game_type']); unset($_REQUEST['game_type']); } - empty(I('user_account')) || $map['user_account'] = ['like',"%".I('user_account')."%"]; + empty(I('user_account')) || $map['user_account'] = ['like', "%" . I('user_account') . "%"]; $list = $this->lists(M('user_play_info', 'tab_'), $map, 'play_time desc'); $this->assign('list', $list); $this->meta_title = '角色数据'; - - $this->m_title = '角色查询'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'User/rolelist','status'=>1])->find()); + + $this->m_title = '角色查询'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/rolelist', 'status' => 1])->find()); $this->display(); @@ -600,47 +662,51 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ * 更新游戏角色数据 * @param $id */ - public function user_update($ids){ + public function user_update($ids) + { $res = D('User')->update_user_player($ids); $this->success("更新成功:{$res['suc']}个,失败:{$res['ero']}"); } + /** * 更新游戏角色数据 * @param $id */ - public function age(){ - if (IS_POST){ + public function age() + { + if (IS_POST) { $data = $_POST; $a = new ToolController(); $re = $a->save($data); - \Think\Log::actionLog('User/age','User',1); + \Think\Log::actionLog('User/age', 'User', 1); $this->success('保存成功'); - }else{ - $data = I('type',1) == 1? C('age'):C('age_prevent'); - $this->assign('data',$data); - $this->meta_title = I('type',1) == 1?"实名认证设置":'防沉迷设置'; - - $this->m_title = I('type',1)==1?'实名认证设置':'防沉迷设置'; - $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'User/age/type/'.I('type',1),'status'=>1])->find()); - + } else { + $data = I('type', 1) == 1 ? C('age') : C('age_prevent'); + $this->assign('data', $data); + $this->meta_title = I('type', 1) == 1 ? "实名认证设置" : '防沉迷设置'; + + $this->m_title = I('type', 1) == 1 ? '实名认证设置' : '防沉迷设置'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/age/type/' . I('type', 1), 'status' => 1])->find()); + $this->display(); } - + } - public function update_pwd(){ - if(IS_POST){ - if(strlen($_POST['new_pwd'])<6||strlen($_POST['new_pwd'])>30){ + public function update_pwd() + { + if (IS_POST) { + if (strlen($_POST['new_pwd']) < 6 || strlen($_POST['new_pwd']) > 30) { $this->error('密码格式不正确!'); } - $oldspwd=$this->think_ucenter_md5($_POST['password'],UC_AUTH_KEY); - $newpwd =$this->think_ucenter_md5($_POST['new_pwd'],UC_AUTH_KEY); - $Member=D('UcenterMember'); - $rpwd=$Member->where(array('id'=>session('user_auth.uid')))->find(); - if($oldspwd==$rpwd['password']){ - $Member->where(array('id'=>session('user_auth.uid')))->save(['password'=>$newpwd]); - $this->success('修改成功!',U('User/index')); - }else{ + $oldspwd = $this->think_ucenter_md5($_POST['password'], UC_AUTH_KEY); + $newpwd = $this->think_ucenter_md5($_POST['new_pwd'], UC_AUTH_KEY); + $Member = D('UcenterMember'); + $rpwd = $Member->where(array('id' => session('user_auth.uid')))->find(); + if ($oldspwd == $rpwd['password']) { + $Member->where(array('id' => session('user_auth.uid')))->save(['password' => $newpwd]); + $this->success('修改成功!', U('User/index')); + } else { $this->error('原密码错误!'); } @@ -648,14 +714,14 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ $this->display(); } - public function get_server_lists($game_id=0){ - $server = M("server","tab_"); + public function get_server_lists($game_id = 0) + { + $server = M("server", "tab_"); $map['game_id'] = $game_id; $lists = $server->field('id,server_name,game_name')->where($map)->select(); - if(empty($lists)){ - return $this->ajaxReturn(array('status'=>0,'data'=>'')); + if (empty($lists)) { + return $this->ajaxReturn(array('status' => 0, 'data' => '')); } - return $this->ajaxReturn(array('status'=>1,'data'=>$lists)); + return $this->ajaxReturn(array('status' => 1, 'data' => $lists)); } - } \ No newline at end of file diff --git a/Application/Admin/Controller/access_data_foldline.txt b/Application/Admin/Controller/access_data_foldline.txt index 49c9cc67d..bc484849f 100644 --- a/Application/Admin/Controller/access_data_foldline.txt +++ b/Application/Admin/Controller/access_data_foldline.txt @@ -1 +1 @@ -{"news":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":1},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":1},{"time":"10:00","count":0},{"time":"11:00","count":2},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":3},{"time":"15:00","count":1},{"time":"16:00","count":1},{"time":"17:00","count":1},{"time":"18:00","count":3},{"time":"19:00","count":0},{"time":"20:00","count":2},{"time":"21:00","count":0},{"time":"22:00","count":3},{"time":"23:00","count":2}],"sum":{"news":20,"active":43,"player":10,"money":50.059999999999995},"active":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":2},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":2},{"time":"10:00","count":3},{"time":"11:00","count":7},{"time":"12:00","count":1},{"time":"13:00","count":1},{"time":"14:00","count":4},{"time":"15:00","count":1},{"time":"16:00","count":1},{"time":"17:00","count":3},{"time":"18:00","count":5},{"time":"19:00","count":0},{"time":"20:00","count":2},{"time":"21:00","count":1},{"time":"22:00","count":8},{"time":"23:00","count":2}],"player":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":1},{"time":"11:00","count":1},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":1},{"time":"15:00","count":3},{"time":"16:00","count":2},{"time":"17:00","count":1},{"time":"18:00","count":0},{"time":"19:00","count":0},{"time":"20:00","count":0},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":1}],"money":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":"1.01"},{"time":"11:00","count":"9.00"},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":"0.01"},{"time":"15:00","count":"10.01"},{"time":"16:00","count":"11.02"},{"time":"17:00","count":"14.00"},{"time":"18:00","count":0},{"time":"19:00","count":0},{"time":"20:00","count":0},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":"5.01"}]} \ No newline at end of file +{"news":[{"time":"0:00","count":1},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":1},{"time":"11:00","count":1},{"time":"12:00","count":1},{"time":"13:00","count":1},{"time":"14:00","count":12},{"time":"15:00","count":1},{"time":"16:00","count":3},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":2},{"time":"20:00","count":6},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"sum":{"news":29,"active":49,"player":7,"money":13.17},"active":[{"time":"0:00","count":2},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":1},{"time":"9:00","count":4},{"time":"10:00","count":7},{"time":"11:00","count":1},{"time":"12:00","count":4},{"time":"13:00","count":2},{"time":"14:00","count":12},{"time":"15:00","count":3},{"time":"16:00","count":5},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":2},{"time":"20:00","count":6},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"player":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":1},{"time":"14:00","count":2},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":1},{"time":"20:00","count":2},{"time":"21:00","count":1},{"time":"22:00","count":0},{"time":"23:00","count":0}],"money":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":"6.01"},{"time":"14:00","count":"3.08"},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":"4.02"},{"time":"20:00","count":"0.05"},{"time":"21:00","count":"0.01"},{"time":"22:00","count":0},{"time":"23:00","count":0}]} \ No newline at end of file diff --git a/Application/Base/Repository/PromoteRepository.class.php b/Application/Base/Repository/PromoteRepository.class.php index 867984aa7..518d2cc5e 100644 --- a/Application/Base/Repository/PromoteRepository.class.php +++ b/Application/Base/Repository/PromoteRepository.class.php @@ -106,7 +106,6 @@ class PromoteRepository { $params['time_column'] = 'create_time'; $map = $this->getPublicAchievementMap($ids, $params); $items = M('user_play_info', 'tab_')->field(['count(distinct user_id) count', 'promote_id'])->where($map)->group('promote_id')->select(); - $records = []; foreach ($items as $item) { $promoteId = $item['promote_id']; @@ -119,7 +118,6 @@ class PromoteRepository { $records[$promoteId] = $item['count']; } } - $records = $this->assembleZero($ids, $records, 0); return $records; @@ -162,7 +160,7 @@ class PromoteRepository { } } - $records = $this->assembleZero($ids, [], 0); + $records = $this->assembleZero($ids, $records, 0); return $records; } @@ -188,7 +186,7 @@ class PromoteRepository { $inQuery = M('user_play_info', 'tab_')->field('create_ip')->group('create_ip')->where($map)->buildSql(); $resultMap = ['create_ip' => ['exp', ' in (' . $inQuery . ')']]; - $items = M('user_play_info', 'tab_')->field(['count(*) count', 'promote_id'])->where($resultMap)->group('promote_id')->select(); + $items = M('user_play_info', 'tab_')->field(['count(DISTINCT create_ip) count', 'promote_id'])->where($resultMap)->group('promote_id')->select(); $records = []; foreach ($items as $item) { @@ -203,7 +201,7 @@ class PromoteRepository { } } - $records = $this->assembleZero($ids, [], 0); + $records = $this->assembleZero($ids, $records, 0); return $records; } @@ -233,7 +231,8 @@ class PromoteRepository { $inQuery = M('user_play_info', 'tab_')->field('user_id')->group('user_id')->where($map)->buildSql(); $resultMap = ['_string' => 'user_id in (' . $inQuery . ')']; - $items = M('user_play_info', 'tab_')->field(['count(*) count', 'promote_id'])->where($resultMap)->group('promote_id')->select(); + $items = M('user_play_info', 'tab_')->field(['count(DISTINCT user_id) count', 'promote_id'])->where($resultMap)->group('promote_id')->select(); + // var_dump(M()->getLastSql()); $records = []; foreach ($items as $item) { $promoteId = $item['promote_id']; @@ -247,7 +246,7 @@ class PromoteRepository { } } - $records = $this->assembleZero($ids, [], 0); + $records = $this->assembleZero($ids, $records, 0); return $records; } @@ -370,6 +369,7 @@ class PromoteRepository { $params['time_column'] = 'pay_time'; $map = $this->getPublicAchievementMap($ids, $params); + $map['pay_status'] = 1; $items = M('spend', 'tab_')->field(['sum(pay_amount) amount', 'promote_id', 'pay_way'])->where($map)->group('promote_id, pay_way')->select(); // echo M()->getLastSql();die(); $records = []; diff --git a/Application/Callback/Controller/Notify3Controller.class.php b/Application/Callback/Controller/Notify3Controller.class.php index 6c3c0e9e6..33d7e65eb 100644 --- a/Application/Callback/Controller/Notify3Controller.class.php +++ b/Application/Callback/Controller/Notify3Controller.class.php @@ -194,6 +194,7 @@ class Notify3Controller extends BaseController $data['type'] = 1; $data['sub_type'] = 1; $data['target_id'] = $promote['id']; + $data['promote_id'] = $promote['id']; $data['target_level'] = $promote['level']; $data['target_type'] = 1; $data['ref_id'] = $order['id']; diff --git a/Application/Home/Controller/ArticleController.class.php b/Application/Home/Controller/ArticleController.class.php index 7c0e2af26..0ccce084d 100644 --- a/Application/Home/Controller/ArticleController.class.php +++ b/Application/Home/Controller/ArticleController.class.php @@ -82,6 +82,9 @@ class ArticleController extends HomeController { $field = 'id as document_id,category_id'; $decumentData = M('document')->field($field)->where("id={$id}")->find(); $promote_id = get_pid(); + if(empty($promote_id)) { + $promote_id = 0; + } foreach ($decumentData as $key => $value) { $decumentData['promote_id'] = $promote_id; $decumentData['create_time'] = time(); diff --git a/Application/Home/Controller/DownloadController.class.php b/Application/Home/Controller/DownloadController.class.php index 76c7d09c2..2b1fe7df7 100644 --- a/Application/Home/Controller/DownloadController.class.php +++ b/Application/Home/Controller/DownloadController.class.php @@ -1738,8 +1738,8 @@ class DownloadController extends BaseController { array('promote_account','推广账号'), array('register_time','注册时间'), array('register_ip','注册ip'), - array('login_time','登陆时间'), - array('login_ip','登陆ip') + array('login_time','登陆时间'), + array('login_ip','登陆ip') ); $model = M('user','tab_'); @@ -1747,6 +1747,8 @@ class DownloadController extends BaseController { //var_dump($data); $xlsData = []; foreach ($data as $key1 => $value1) { + $value1['register_time'] = date("Y-m-d H:i:s",$value1['register_time']); + $value1['login_time'] = date("Y-m-d H:i:s",$value1['login_time']); $value1['account'] = $this->encryption($value1['account']); $xlsData[] = $value1; } diff --git a/Application/Home/Controller/HomeController.class.php b/Application/Home/Controller/HomeController.class.php index 60df72882..99ec2b916 100644 --- a/Application/Home/Controller/HomeController.class.php +++ b/Application/Home/Controller/HomeController.class.php @@ -101,6 +101,7 @@ class HomeController extends Controller public function promitionofregestion() { + // 旧版兼容 A('Home')->landingPage(); die(); @@ -171,9 +172,12 @@ class HomeController extends Controller 'dow_status', 'features', 'flooring_page_imgs', + 'game_score', + 'recommend_level', + 'game_size', + 'introduction' ]; $map = ['id' => intval($gameId)]; - $game = M('game', 'tab_')->field($columns)->where($map)->find(); if ($game['sdk_version'] == 1 && $isIOS) { @@ -213,6 +217,7 @@ class HomeController extends Controller $this->assign('isAndroid', $isAndroid); $this->assign('apply', $apply); $this->assign('game', $game); + $this->assign('promoteId', $promoteId); $this->display('landingPage'); } diff --git a/Application/Home/Controller/PromoteController.class.php b/Application/Home/Controller/PromoteController.class.php index 1d0307c2a..ccfd6e84f 100644 --- a/Application/Home/Controller/PromoteController.class.php +++ b/Application/Home/Controller/PromoteController.class.php @@ -1132,15 +1132,15 @@ class PromoteController extends BaseController $this->error('您输入的手机号码格式不合法', U('Promote/edit_chlid', array('id' => $id, 'type' => I('type', 0)))); } - if (empty($_REQUEST['email'])) { - $this->error('电子邮箱不能为空', U('Promote/edit_chlid', array('id' => $id, 'type' => I('type', 0)))); - return false; - } - - $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; - if (!preg_match($pattern, $_REQUEST['email'])) { - $this->error('您输入的电子邮箱地址不合法', U('Promote/edit_chlid', array('id' => $id, 'type' => I('type', 0)))); - }; + // if (empty($_REQUEST['email'])) { + // $this->error('电子邮箱不能为空', U('Promote/edit_chlid', array('id' => $id, 'type' => I('type', 0)))); + // return false; + // } + + // $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; + // if (!preg_match($pattern, $_REQUEST['email'])) { + // $this->error('您输入的电子邮箱地址不合法', U('Promote/edit_chlid', array('id' => $id, 'type' => I('type', 0)))); + // }; $user = new PromoteApi(); $res = $user->edit($_POST); diff --git a/Application/Home/Controller/QueryController.class.php b/Application/Home/Controller/QueryController.class.php index 255b4d206..13c824f22 100644 --- a/Application/Home/Controller/QueryController.class.php +++ b/Application/Home/Controller/QueryController.class.php @@ -1530,7 +1530,7 @@ class QueryController extends BaseController $map['tab_user_play_info.promote_id'] = $promoteId; $data = M('user_play_info', 'tab_') - ->field('tab_user_play_info.user_account,tab_user_play_info.game_name,tab_user_play_info.sdk_version,tab_user_play_info.play_time,tab_user_play_info.server_name,tab_user_play_info.role_name') + ->field('tab_user_play_info.user_account,tab_user_play_info.game_name,tab_user_play_info.sdk_version,tab_user_play_info.create_time,tab_user_play_info.server_name,tab_user_play_info.role_name') ->join('tab_game on tab_user_play_info.game_id = tab_game.id') ->where($map) ->order('tab_user_play_info.id desc') @@ -1709,118 +1709,167 @@ class QueryController extends BaseController $isSelf = I('is_self', 0); $roleName = I('role_name', ''); $userAccount = I('user_account', ''); - $promoteId = I('promote_id', 0); $sdkVersion = I('sdk_version', 0); $costBegin = I('cost_begin', ''); $costEnd = I('cost_end', ''); + $lastSortName = trim(I('last_sort_name', '')); + $sortName = trim(I('sort_name', '')); + $sort = intval(I('sort', 1)); + $sortNameData = ['recharge_cost', 'recharge_count', 'recharge_cost_today', 'unlogin_day']; + $nowTime = date('Y-m-d'); + $initBegTime = date('Y-m-d', strtotime('-6 day', strtotime($nowTime))); + $initBegTime = empty(I('begtime')) ? $initBegTime : I('begtime'); + $initEndTime = $nowTime; + $initEndTime = empty(I('endtime')) ? $initEndTime : I('endtime'); + $begTime = strtotime($initBegTime); + $endTime = strtotime($initEndTime); + $endTime += 3600 * 24; $promote = $this->getLoginPromote(); $levelPromote = $this->getLevelPromote(); $queryPromote = $this->getQueryPromote($levelPromote); - $map[] = [ - '_logic' => 'or', - 'id' => $queryPromote['id'], - 'chain' => ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%'] - ]; - $ids = M('promote', 'tab_')->where($map)->getField('id', true); + $records = []; + $pagination = ''; + $count = 0; + if (intval($endTime - $begTime) / (24 * 3600) <= 31) { + $map[] = [ + '_logic' => 'or', + 'id' => $queryPromote['id'], + 'chain' => ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%'] + ]; + $ids = M('promote', 'tab_')->where($map)->getField('id', true); - $map = []; - if (count($ids) > 0) { - $map = ['promote_id' => ['in', $ids]]; - } else { - $map['_string'] = '1<>1'; - } + $map = []; + if (count($ids) > 0) { + $map = ['promote_id' => ['in', $ids]]; + } else { + $map['_string'] = '1<>1'; + } - $spendMap = $map; - if ($gameId != 0) { - $map['game_id'] = $gameId; - } - if ($serverId != 0) { - $map['server_id'] = $serverId; - } - if ($roleName != '') { - $map['role_name'] = ['like', '%' . $roleName . '%']; - } - if ($userAccount != '') { - $map['user_account'] = ['like', '%' . $userAccount . '%']; - } - if ($sdkVersion != 0) { - $map['sdk_version'] = $sdkVersion; - } - if ($isSelf) { - $map['promote_id'] = $queryPromote['id']; - $spendMap['promote_id'] = $queryPromote['id']; - } - if ($costBegin != '' || $costEnd != '') { - $having = ''; - if ($costBegin != '' && $costEnd != '') { - $having = 'sum(cost) between ' . $costBegin . ' and ' . $costEnd; - } elseif ($costBegin != '' && $costEnd == '') { - $having = 'sum(cost) >= ' . $costBegin; - } elseif ($costBegin == '' && $costEnd != '') { - $having = 'sum(cost) <= ' . $costEnd; + $subMap = []; + if ($gameId != 0) { + $map['game_id'] = $gameId; + $subMap['game_id'] = $gameId; + } + if ($serverId != 0) { + $map['server_id'] = $serverId; + $subMap['server_id'] = $serverId; + } + if ($roleName != '') { + $map['role_name'] = ['like', '%' . $roleName . '%']; + } + if ($userAccount != '') { + $map['user_account'] = ['like', '%' . $userAccount . '%']; + } + if ($sdkVersion != 0) { + $map['sdk_version'] = $sdkVersion; + } + if ($isSelf) { + $map['promote_id'] = $queryPromote['id']; } - $subMap = $map; - $subMap['pay_status'] = 1; - $subMap['pay_game_status'] = 1; - $subQuery = M('spend', 'tab_')->field('game_player_id')->where($subMap)->group('game_player_id')->having($having)->buildSql(); - $map['_string'] = 'role_id in (' . $subQuery . ')'; - } - $query = M('user_play_info', 'tab_')->where($map)->order('play_time desc'); - list($roles, $pagination, $count) = $this->paginate($query); - $roleIds = array_column($roles, 'role_id'); - $spendMap['pay_status'] = 1; - $spendMap['pay_game_status'] = 1; - if (count($roleIds) > 0) { - $spendMap['game_player_id'] = ['in', $roleIds]; - } else { - $spendMap['_string'] = '1<>1'; - } - $allRecharges = M('spend', 'tab_')->field('count(*) count, sum(cost) cost, game_player_id')->where($spendMap)->group('game_player_id')->select(); - $allRecords = []; - foreach ($allRecharges as $recharge) { - $allRecords[$recharge['game_player_id']] = $recharge; - } + $roleIds = M('user_play_data_count', 'tab_')->group('role_id')->getField('role_id', true); + $map['role_id'] = ['in', $roleIds]; + $subMap['create_time'] = ['between', [$begTime, $endTime - 1]]; + if ($costBegin != '' || $costEnd != '') { + $having = ''; + if ($costBegin != '' && $costEnd != '') { + $having = 'sum(recharge_cost) between ' . $costBegin . ' and ' . $costEnd; + } elseif ($costBegin != '' && $costEnd == '') { + $having = 'sum(recharge_cost) >= ' . $costBegin; + } elseif ($costBegin == '' && $costEnd != '') { + $having = 'sum(recharge_cost) <= ' . $costEnd; + } + $subQuery = M('user_play_data_count', 'tab_')->field('role_id') + ->where($subMap) + ->group('game_id,server_id,role_id') + ->having($having) + ->buildSql(); + $map['_string'] = 'role_id in(' . $subQuery . ')'; + } - $spendMap['pay_time'] = ['between', [strtotime(date('Y-m-d 00:00:00')), strtotime(date('Y-m-d 23:59:59'))]]; - $todayRecharges = M('spend', 'tab_')->field('sum(cost) cost, game_player_id')->where($spendMap)->group('game_player_id')->select(); - $todayRecords = []; - foreach ($todayRecharges as $recharge) { - $todayRecords[$recharge['game_player_id']] = $recharge; - } + $orderBy = 'play_time desc'; + if (!empty($sortName)) { + if (in_array($sortName, $sortNameData)) { + $desc = ' desc'; + $asc = ' asc'; + if ($sortName == 'unlogin_day') { + $sortName = 'play_time'; + $desc = ' asc'; + $asc = ' desc'; + } + if ($lastSortName == 'unlogin_day') { + $lastSortName = 'play_time'; + } + if ($lastSortName != $sortName) { + $sortString = $desc; + $sort = 1; + } else { + $sortString = ($sort == 1) ? $desc : $asc; + } + $orderBy = $sortName . $sortString; + } + } - $records = []; - foreach ($roles as $role) { - $records[] = [ - 'user_account' => encryption($role['user_account']), - 'game_name' => $role['game_name'], - 'role_name' => $role['role_name'], - 'role_id' => $role['role_id'], - 'role_level' => $role['role_level'], - 'server_id' => $role['server_id'], - 'server_name' => $role['server_name'], - 'recharge_cost' => isset($allRecords[$role['role_id']]) ? round(floatval($allRecords[$role['role_id']]['cost']), 2) : 0, - 'recharge_count' => isset($allRecords[$role['role_id']]) ? $allRecords[$role['role_id']]['count'] : 0, - 'recharge_cost_today' => isset($todayRecords[$role['role_id']]) ? round(floatval($todayRecords[$role['role_id']]['cost']), 2) : 0, - 'play_time' => $role['play_time'], - 'play_ip' => $role['play_ip'], - 'promote_id' => $role['promote_id'], - 'promote_account' => $role['promote_account'], - 'sdk_version' => $role['sdk_version'], - 'unlogin_day' => intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600)) - ]; + $spendMap['uc . create_time'] = ['between', [$begTime, $endTime - 1]]; + $spendMap['_string'] = 'uc . game_id = tab_user_play_info . game_id and uc . server_id = tab_user_play_info . server_id and uc . role_id = tab_user_play_info . role_id'; + $sqlCost = M('user_play_data_count', 'tab_')->alias('uc') + ->field('sum(uc . recharge_cost) cost') + ->where($spendMap) + ->buildSql(); + $sqlCount = M('user_play_data_count', 'tab_')->alias('uc') + ->field('sum(uc . recharge_count) count') + ->where($spendMap) + ->buildSql(); + $spendMap['uc . create_time'] = ['between', [strtotime(date('Y - m - d 00:00:00')), strtotime(date('Y - m - d 23:59:59'))]]; + $sqlTodayCost = M('user_play_data_count', 'tab_')->alias('uc') + ->field('sum(uc . recharge_count) count') + ->where($spendMap) + ->buildSql(); + $subQuery = M('user_play_info', 'tab_') + ->field("*,$sqlCost as recharge_cost,$sqlCount as recharge_count,$sqlTodayCost as recharge_cost_today") + ->where($map) + ->order('play_time desc') + ->buildSql(); + $query = M()->field(' * ') + ->table($subQuery) + ->alias('a') + ->order($orderBy); + + list($roles, $pagination, $count) = $this->paginate($query); + + foreach ($roles as $role) { + $records[] = [ + 'user_account' => encryption($role['user_account']), + 'game_name' => $role['game_name'], + 'role_name' => $role['role_name'], + 'role_id' => $role['role_id'], + 'role_level' => $role['role_level'], + 'server_id' => $role['server_id'], + 'server_name' => $role['server_name'], + 'recharge_cost' => empty($role['recharge_cost']) ? 0 : $role['recharge_cost'], + 'recharge_count' => empty($role['recharge_count']) ? 0 : $role['recharge_count'], + 'recharge_cost_today' => empty($role['recharge_cost_today']) ? 0 : $role['recharge_cost_today'], + 'play_time' => $role['play_time'], + 'play_ip' => $role['play_ip'], + 'promote_id' => $role['promote_id'], + 'promote_account' => $role['promote_account'], + 'sdk_version' => $role['sdk_version'], + 'unlogin_day' => intval((strtotime(date('Y - m - d 00:00:00')) - strtotime(date('Y - m - d 00:00:00', $role['play_time']))) / (24 * 3600)) + ]; + } } $games = $this->getGamesByPromote($promote); $this->assign('games', $games); - $this->assign('promotes', $promotes); - $this->assign('groupPromotes', $groupPromotes); $this->assign('records', $records); $this->assign('pagination', $pagination); $this->assign('count', $count); + $this->assign('initBegTime', $initBegTime); + $this->assign('initEndTime', $initEndTime); + $this->assign('sort', $sort); $this->display('userRecharges'); } @@ -1905,11 +1954,11 @@ class QueryController extends BaseController public function achievement() { - $time = I('time', date('Y-m-d')); - if(!empty($time)) { - $defaultTime = $time ; - }else { - $defaultTime = date('Y-m-d',time()); + $time = I('time', date('Y - m - d')); + if (!empty($time)) { + $defaultTime = $time; + } else { + $defaultTime = date('Y - m - d', time()); } $sdkVersion = I('sdk_version', 0); $gameId = I('game_id', 0); @@ -1954,14 +2003,14 @@ class QueryController extends BaseController if (count($ids) > 0) { $rows = M('promote', 'tab_') ->field(['id', 'chain']) - ->where(['chain' => ['like', [$parent['chain'] . $parent['id'] . '/%']], 'level' => ['gt', $parent['level'] + 1]]) + ->where(['chain' => ['like', [$parent['chain'] . $parent['id'] . ' /%']], 'level' => ['gt', $parent['level'] + 1]]) ->select(); } $basicPromotes = []; foreach ($ids as $id) { foreach ($rows as $row) { - $needChain = $parent['chain'] . $parent['id'] . '/' . $id . '/'; + $needChain = $parent['chain'] . $parent['id'] . ' / ' . $id . ' / '; if (strpos($row['chain'], $needChain) !== false) { $basicPromotes[$row['id']] = $id; } @@ -2000,7 +2049,7 @@ class QueryController extends BaseController $rechargeCountList = $promoteRepository->getRechargeCountByIds($ids, $params); $rechargeUserCountList = $promoteRepository->getRechargeUserCountByIds($ids, $params); $rechargeAmountList = $promoteRepository->getRechargeAmountByIds($ids, $params); - + if (I('p', 1) == 1) { $selfParams = $params; $selfParams['isContainSubs'] = false; @@ -2013,7 +2062,6 @@ class QueryController extends BaseController $selfRechargeCountList = $promoteRepository->getRechargeCountByIds([$parent['id']], $selfParams); $selfRechargeUserCountList = $promoteRepository->getRechargeUserCountByIds([$parent['id']], $selfParams); $selfRechargeAmountList = $promoteRepository->getRechargeAmountByIds([$parent['id']], $selfParams); - $records[] = [ 'id' => $parent['id'], 'account' => $parent['account'], @@ -2027,7 +2075,7 @@ class QueryController extends BaseController 'login_user_count' => $selfLoginUserCountList[$parent['id']], 'recharge_count' => $selfRechargeCountList[$parent['id']], 'recharge_user_count' => $selfRechargeUserCountList[$parent['id']], - 'recharge_amount' => $selfRechargeAmountList[$parent['id']]['ban_coin'] + $rechargeAmountList[$parent['id']]['coin'] + $rechargeAmountList[$parent['id']]['cash'], + 'recharge_amount' => $selfRechargeAmountList[$parent['id']]['ban_coin'] + $selfRechargeAmountList[$parent['id']]['coin'] + $selfRechargeAmountList[$parent['id']]['cash'], 'recharge_by_ban_coin' => $selfRechargeAmountList[$parent['id']]['ban_coin'], 'recharge_by_coin' => $selfRechargeAmountList[$parent['id']]['coin'], 'recharge_by_cash' => $selfRechargeAmountList[$parent['id']]['cash'], @@ -2070,13 +2118,13 @@ class QueryController extends BaseController $this->assign('parentid', $parentId); $this->assign('count', $count); $this->assign('timeout', $timeout); - $this->assign('time',$defaultTime); + $this->assign('time', $defaultTime); $this->display(); } public function getChildPromoteList() { - $promoteId = intval(I('post.promote_id', 0)); + $promoteId = intval(I('post . promote_id', 0)); $promoteId = empty($promoteId) ? PID : $promoteId; $promoteList = getAllPromoteListByType(3, false, $promoteId); $data['status'] = 1; @@ -2084,4 +2132,31 @@ class QueryController extends BaseController $this->ajaxReturn($data); } + + public function userPlayDataCount() + { + $time = strtotime(date('Y - m - d 00:00:00', time() - (3600 * 24))); + $spendMap['pay_status'] = 1; + $spendMap['pay_game_status'] = 1; + $spendMap['game_player_id'] = ['gt', 0]; + $spendMap['pay_time'] = ['between', [$time, strtotime(date('Y - m - d 23:59:59', $time))]]; + + $field = 'FROM_UNIXTIME(pay_time, "%Y-%m-%d") as day,game_id,server_id,game_player_id,sum(pay_amount) as recharge_cost,count(id) as recharge_count'; + $spendCostData = M('spend', 'tab_')->field($field) + ->where($spendMap) + ->group('day,game_player_id,server_id,game_id') + ->select(); + + $data = []; + foreach ($spendCostData as $list) { + $save['game_id'] = $list['game_id']; + $save['server_id'] = $list['server_id']; + $save['role_id'] = $list['game_player_id']; + $save['recharge_cost'] = $list['recharge_cost']; + $save['recharge_count'] = $list['recharge_count']; + $save['create_time'] = strtotime($list['day']); + $data[] = $save; + } + M('user_play_data_count', 'tab_')->addAll($data); + } } diff --git a/Application/Home/View/default/Home/landingPage.html b/Application/Home/View/default/Home/landingPage.html index e65a21fda..ee34e36d6 100644 --- a/Application/Home/View/default/Home/landingPage.html +++ b/Application/Home/View/default/Home/landingPage.html @@ -1,133 +1,294 @@ - - - - - - - - - - {$game['relation_game_name']} - - - - + + + + + + + + + + home - - - - - - - - - - - - - -
-
- - - - - - - + +
+
+
+ +
+
{$game['relation_game_name']}
+
{$game['features']}
+
+ +
免费安装
+ +
免费安装
+ + +
+
+
+
+
+
+ {$game['game_score']} +
+ + + + + +
+
+
14.48K个评分
+
+
+ #{$game['recommend_level']} +
网络游戏
+
+
+ 16+ +
年龄
+
+
+
+
    + +
  • + +
  • +
    +
+
+
+
简介
+
{$game['features']}
+
+
+
查看更多
+
+
+
+
评分及评论
+
+
+ {$game['game_score']} + 满分5分 +
+
+
+
+ + + + + +
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
14.48K个评分
+
+
+
+
+
新功能
+
更新说明:
+
1、优化用户体验
+
+
+
信息
+
+ 大小 +
{$game['game_size']}MB
+
+
+ 类别 +
游戏
+
+
+ 语言 +
英语,简体中文
+
+
+ 年龄分级 +
限16岁以上
+
+
+ 价格 +
免费
+
+
隐私政策
- - - - - \ No newline at end of file + }; + swiperGet(); + $(".download").click(function(){ + $(".window").show(); + document.body.style.overflow = 'hidden'; + }); + $(".window").click(function(){ + $(".window").hide(); + document.body.style.overflow = 'auto'; + }); + $(".gray-btn").click(function(){ + event.stopPropagation(); + $(".second").show(); + swiperGet(); + document.body.style.overflow = 'hidden'; + $(".window").hide(); + }) + $(".second").click(function(){ + $(".second").hide(); + document.body.style.overflow = 'auto'; + }) + $(".doubt").click(function(){ + $(".second").show(); + document.body.style.overflow = 'hidden'; + swiperGet(); + }) + }) + diff --git a/Application/Home/View/default/Home/promitionofregestion.html b/Application/Home/View/default/Home/promitionofregestion.html index 36e73bdfb..c851c55c6 100644 --- a/Application/Home/View/default/Home/promitionofregestion.html +++ b/Application/Home/View/default/Home/promitionofregestion.html @@ -75,7 +75,7 @@ background-color: #fff; border-radius: 10px; } - + @media screen and (min-width: 768px) { .register-box-max { width: 50%; diff --git a/Application/Home/View/default/Promote/edit_chlid.html b/Application/Home/View/default/Promote/edit_chlid.html index 2b078fa94..46df37f5f 100644 --- a/Application/Home/View/default/Promote/edit_chlid.html +++ b/Application/Home/View/default/Promote/edit_chlid.html @@ -97,7 +97,7 @@ - *电子邮箱 + 电子邮箱 diff --git a/Application/Home/View/default/Query/achievement.html b/Application/Home/View/default/Query/achievement.html index d37eaef80..68699376b 100644 --- a/Application/Home/View/default/Query/achievement.html +++ b/Application/Home/View/default/Query/achievement.html @@ -16,7 +16,7 @@
-
当前位置:数据中心>团队推广业绩
+
当前位置:数据管理>团队推广业绩
团队推广业绩 @@ -109,8 +109,8 @@ {$record.new_create_role_ip_count} {$record.login_user_count} - {$record.recharge_count} {$record.recharge_user_count} + {$record.recharge_count} {$record.recharge_amount} {$record.recharge_by_cash} {$record.recharge_by_coin} diff --git a/Application/Home/View/default/Query/register.html b/Application/Home/View/default/Query/register.html index 8943277f3..673eb850c 100644 --- a/Application/Home/View/default/Query/register.html +++ b/Application/Home/View/default/Query/register.html @@ -72,8 +72,7 @@
- +
diff --git a/Application/Home/View/default/Query/userRecharges.html b/Application/Home/View/default/Query/userRecharges.html index eeebfd28c..db7089733 100644 --- a/Application/Home/View/default/Query/userRecharges.html +++ b/Application/Home/View/default/Query/userRecharges.html @@ -1,6 +1,7 @@ + @@ -16,7 +27,7 @@
-
当前位置:数据中心>玩家充值
+
当前位置:数据管理>玩家充值
玩家充值 @@ -60,7 +71,20 @@
+
+ +
+ +
+ +
+ +
+
+ + +
@@ -77,10 +101,50 @@ 游戏区服 角色名 等级 - 充值总额 - 充值次数 - 今日充值 - 未登录天数 + 充值总额 + + + + + + + + + + + 充值次数 + + + + + + + + + + + 今日充值 + + + + + + + + + + + 未登录天数 + + + + + + + + + + 最后登录时间 推广员账号 @@ -124,11 +188,41 @@
+ + + + \ No newline at end of file diff --git a/Application/Home/View/default/Query/userRoles.html b/Application/Home/View/default/Query/userRoles.html index 832200554..293793d7e 100644 --- a/Application/Home/View/default/Query/userRoles.html +++ b/Application/Home/View/default/Query/userRoles.html @@ -16,7 +16,7 @@
-
当前位置:数据中心>角色查询
+
当前位置:数据管理>角色查询
角色查询 diff --git a/Application/Home/View/default/Query/view_role.html b/Application/Home/View/default/Query/view_role.html index 13a3e6391..22f381a01 100644 --- a/Application/Home/View/default/Query/view_role.html +++ b/Application/Home/View/default/Query/view_role.html @@ -98,7 +98,7 @@ {$vo.game_name} -- {:getSDKTypeName($vo['sdk_version'])} - {$vo.play_time|date='Y-m-d H:i:s',###} + {$vo.create_time|date='Y-m-d H:i:s',###} {$vo.server_name} {$vo.role_name} diff --git a/Application/Media/View/default/Recharge/pay.html b/Application/Media/View/default/Recharge/pay.html index 02a0ad923..fee3b09fd 100644 --- a/Application/Media/View/default/Recharge/pay.html +++ b/Application/Media/View/default/Recharge/pay.html @@ -12,6 +12,12 @@ + + + + + + -
-
-
-
选择充值方式
-
    - -
  • 支付宝
  • -
    - - -
  • 微信支付(余额)
  • -
    - - -
  • 竣付通
  • -
    - - -
  • 金猪支付
  • -
    - -
+
+ +
+
+
+
账户充值
-
- -
-
    - -
  • -

    您当前选择的是 支付宝 充值遇到问题?

    -
    -
      -
    • 充值到: - - - -
      平台币是{:C(APP_NAME)}手机游戏平台统一支付的虚拟货币。玩家可以使用平台币兑换{:C(APP_NAME)}手机游戏平台旗下绝大部分游戏的游戏币。
      -
    • -
    • 充值帐号: - -
    • -
    • 确认帐号: - -
    • -
    • 选择金额: -
      - - 10元 - - 30元 - - 50元 - - 100元 - - 300元 - - 500元 - - 1000元 - 其他 - - 元 - - -
      -
      -
    • -
    • -
    • -
    • -
      -

      *兑换比例1元=1平台币

      -

      本次充值获得平台币:100

      -
      -
    • -
    • 立即充值
    • -
    -
    -
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - +
    +
    +
    +
    充值账号:
    + +
    +
    +
    确认账号:
    + +
    +
    +
    选择金额:
    +
    +
    +
    10元
    +
    30元
    +
    50元
    +
    100元
    +
    300元
    +
    500元
    +
    1000元
    + + + + +
    其他 + + 元 +
    +
    +
    +
    *兑换比例1元=1平台币
    +
    本次充值获得平台币:10
    +
    +
    +
    +
    +
    +
    充值方式:
    +
    +
    + + +
    + + 支付宝 +
    +
    + + +
    + + 微信支付 +
    +
    + + +
    竣付通
    +
    + + +
    金猪支付
    +
    + + + +
    +
    +
    您当前选择的是:支付宝
    + +
    +
    账户充值
    +
    +
    +
    -
+
+ +
+
+
+ +
+ +
+ 备案号:琼ICP备19000556号-1 + 网络文化经营许可证编号:琼网文(2019)2354-200号 +
+
copyright2019
+
+
+
抵制不良网页游戏,拒绝盗版游戏。注意自我保护,谨防受骗上当。适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。适龄提示:适合12周岁以上使用。
+ +
+
\ No newline at end of file diff --git a/Application/Media/View/default/Service/detail.html b/Application/Media/View/default/Service/detail.html index dc66c8ed9..170e43ce9 100644 --- a/Application/Media/View/default/Service/detail.html +++ b/Application/Media/View/default/Service/detail.html @@ -1,9 +1,15 @@ + + + + + +
@@ -27,8 +30,7 @@
不同设备需要分别付费安装哦,请使用常用设备下载
- - +
@@ -52,7 +54,6 @@
-
diff --git a/Application/Mobile/View/Ssg/login.html b/Application/Mobile/View/Ssg/login.html index 251224289..39187752f 100644 --- a/Application/Mobile/View/Ssg/login.html +++ b/Application/Mobile/View/Ssg/login.html @@ -32,6 +32,7 @@
+
@@ -375,6 +376,7 @@ var PhoneObj = { var phonepassword = $('#phonepassword').val(); var phonecode = $('#phonecode').val(); var promoteId = $("#promote_id").val(); + var gameId = $("#game_id").val(); if(!PhoneObj.checkPhone(phone)){ return false; } @@ -393,7 +395,8 @@ var PhoneObj = { account:phone, password:phonepassword, code:phonecode, - promote_id:promoteId + promote_id:promoteId, + game_id:gameId, }, success: function (result) { console.log(result) @@ -443,7 +446,8 @@ var PhoneObj = { alert("账号必须是6-15位字母数字组合!"); return false; } - if(!PhoneObj.checkPassword(regpassword)){ + if(regpassword.length < 6 || regpassword.length > 12){ + alert('密码长度6-12个字符'); return false; } if(regpassword != regpassword2){ diff --git a/Data/update.sql b/Data/update.sql index 1ca013245..c989c2a8c 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -506,3 +506,25 @@ UPDATE `platform_new`.`tab_quick_menu` SET `url` = '/index.php?s=/Home/TestResou --提现订单 添加索引 ALTER TABLE `tab_withdraw` ADD INDEX `widthdraw_number`(`widthdraw_number`); + +--玩家角色数据统计表 +CREATE TABLE `tab_user_play_data_count` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `game_id` int(11) NOT NULL DEFAULT '0' COMMENT '游戏id', + `server_id` varchar(255) NOT NULL COMMENT '区服id', + `role_id` varchar(255) NOT NULL COMMENT '角色id', + `recharge_cost` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '充值总额', + `recharge_count` int(10) NOT NULL DEFAULT '0' COMMENT '充值次数', + `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `recharge_cost` (`recharge_cost`) USING BTREE, + KEY `recharge_count` (`recharge_count`) USING BTREE, + KEY `search` (`game_id`,`server_id`,`role_id`) USING BTREE, + KEY `create_time` (`create_time`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +ALTER TABLE `tab_user_play_data_count` +ADD INDEX `search`(`game_id`, `server_id`, `role_id`) USING BTREE, +ADD INDEX `create_time`(`create_time`) USING BTREE; +ADD INDEX `recharge_cost`(`recharge_cost`) USING BTREE, +ADD INDEX `recharge_count`(`recharge_count`) USING BTREE; \ No newline at end of file diff --git a/Public/Home/css/index2.css b/Public/Home/css/index2.css new file mode 100644 index 000000000..23c821134 --- /dev/null +++ b/Public/Home/css/index2.css @@ -0,0 +1,445 @@ +.home{ + width: 100%; + font-family:PingFang SC; +} +.home-box{ + padding: 0.5rem 0.37rem 0 0.31rem; +} +.heard{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; +} +.heard>img{ + width: 2.5rem; + height: 2.5rem; +} +.heard>.right{ + margin-left: 0.3rem; +} +.heard>.right>div:first-child{ + font-size:0.4rem; + font-weight:500; + color:rgba(41,41,41,1); +} +.heard>.right>div:nth-child(2){ + overflow: hidden; + text-overflow:ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 0.28rem; + color: #A9A9A9; + margin-top: 0.23rem; +} +.heard>.right>div:nth-child(3){ + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 0.32rem; +} +.heard>.right>div:nth-child(3) .download{ + width: 1.8rem; + height: 0.6rem; + background:rgba(34,129,245,1); + border-radius:0.3rem; + color:#fff ; + font-size: 0.28rem; + font-weight: 400; + text-align: center; + line-height: 0.6rem; +} +.heard>.right>div:nth-child(3) >img{ + width: 0.6rem; + height: 0.6rem; +} +.evaluate{ + font-size: 0.32rem; + color: #757575; + font-weight: bold; + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 0.33rem; +} +.evaluate .number{ + display: flex; + align-items: center; +} +.evaluate .start{ + display: flex; + align-items: center; + margin-left: 0.32rem; +} +.evaluate .start>img{ + width: 0.3rem; + height: 0.3rem; +} +.evaluate-box{ + display: flex; + flex-direction: column; +} +.evaluate-box:last-child,.evaluate-box:nth-child(2){ + align-items: center; + justify-content: center; +} +.evaluate-box .grade{ + margin-top: 0.19rem; + font-size: 0.24rem; + color: #D3D3D3; + font-weight: 400; +} +.slide_list{ + width: 100%; + margin-top:0.4rem; + padding-bottom: 0.39rem; + border-bottom: 1px solid #DEDEDE; +} +.slide-box{ + display: -webkit-box; + overflow-x: auto; + /*适应苹果*/ + -webkit-overflow-scrolling:touch; + font-size: 0.2rem; + font-size: 100%; + font-weight: normal; + margin: 0; + padding: 0; +} +.slide-item{ + width: 4.4rem; + /* height: 6.22rem; */ + margin-right: 30px; + list-style: none; +} +.slide-item >img{ + width: 100%; + height: 100%; +} +/*隐藏掉滚动条*/ +.slide-box::-webkit-scrollbar { + display: none; + } + .synopsis{ + margin-top: 0.41rem; + padding-bottom: 0.38rem; + border-bottom: 1px solid #DEDEDE; + } + .synopsis>div:first-child{ + font-size:0.4rem; + font-weight:700; + color:rgba(41,41,41,1); + margin-bottom: 0.41rem; + } + .synopsis>div:nth-child(2){ + font-weight:400; + color:rgba(41,41,41,1); + line-height:0.4rem; + font-size: 0.28rem; + overflow: hidden; + text-overflow:ellipsis; + display: -webkit-box; + -webkit-line-clamp: 5; + -webkit-box-orient: vertical; + padding-bottom: 20px; + } + .synopsis>div:last-child{ + position: relative; + margin-top: -0.4rem; + } + .synopsis>div:last-child .bg-blur{ + background-color: #fff; + -webkit-filter:blur(0.2rem); + filter:blur(0.2rem); + width: 100%; + height: 1rem; + + } + .more{ + position: absolute; + top: 0.6rem; + left: 50%; + margin-left: -0.7948rem; + font-size: 0.36rem; + color: #2281F5; + /* background-color: #fff; */ + } + .appraisal{ + margin-top: 0.38rem; + } + .appraisal .title{ + font-size:0.4rem; + font-weight:700; + color:rgba(41,41,41,1); + } + .appraisal-box{ + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-top: 0.4rem; + padding-bottom: 0.39rem; + border-bottom: 1px solid #DEDEDE; + } + .appraisal-box .left{ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .appraisal-box .left>span:first-child{ + font-size: 1.2rem; + font-weight: 800; + color: #4B4C50; + } + .appraisal-box .left>span:last-child{ + font-size: 0.28rem; + color: #4B4C50; + font-weight: 500; + } + .appraisal-box .right{ + display: flex; + align-items: flex-end; + flex-direction: column; + justify-content: flex-end; + } + .appraisal-box .right>.start-number{ + display: flex; + align-items:center; + justify-content: flex-end; + margin-bottom: 0.06rem; + } + .appraisal-box .right>.start-number .start{ + display: flex; + align-items: center; + } + .appraisal-box .right>.start-number .start>img{ + width: 0.16rem; + height: 0.16rem; + } + .appraisal-box .right>.start-number .strip{ + width: 3rem; + height: 0.04rem; + background-color: #E0E0E0; + position: relative; + margin-left: 0.33rem; + } + .appraisal-box .right>.start-number .strip>div{ + position: absolute; + top: 0; + left: 0; + height: 100%; + background-color: #4B4C50; + } + .appraisal-box .right>.mark{ + font-size:0.24rem; + font-weight:400; + color:rgba(75,76,80,1); + margin-top: 0.26rem; + } + .device{ + margin-top: 0.4rem; + padding-bottom: 0.4rem; + border-bottom: 1px solid #DEDEDE; + } + .device .title{ + font-size:0.4rem; + font-weight:500; + color:rgba(41,41,41,1); + } + .device .soon-title{ + margin-top: 0.4rem; + font-size: 0.28rem; + color: #292929; + } + .device .del{ + font-size: 0.28rem; + color: #292929; + } + .information{ + margin-top: 0.39rem; + } + .information .title{ + font-size:0.4rem; + font-weight:500; + color:rgba(41,41,41,1); + margin-bottom: 0.52rem; + } + .information .data-box{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: 0.3rem; + border-bottom: 1px solid #DEDEDE; + margin-bottom: 0.29rem; + } + .information .data-box>span{ + font-size: 0.24rem; + color: #A9A9A9; + font-weight: 400; + } + .information .data-box>div{ + font-size: 0.24rem; + color: #292929; + font-weight: 400; +} +.privacy{ + font-size: 0.24rem; + color: #292929; + font-weight: 400; +} +.foot{ + background-color: #101010; + width: 100%; + padding: 0.29rem 0 0.24rem 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 0.2rem; + color: #D3D3D3; + margin-top: 0.92rem; +} +.foot div:first-child{ + display: flex; + align-items: center; + color: #D3D3D3; + font-weight:400; + font-size: 0.24rem; +} +.foot div:first-child>div{ + font-size: 0.24rem; +} +.foot div:first-child>div:first-child{ + margin-right: 0.5rem; +} +.foot div:nth-child(2){ + margin-top: 0.18rem; + margin-bottom: 0.18rem; +} +.window{ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background:rgba(0,0,0,0.6); +} +.containner{ + width: 5.50rem; + height: 7.32rem; + background: url(../images/bg.png) no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: flex-end; +} +.containner-box{ + padding: 0 0.39rem 0.15rem 0.36rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; +} +.containner-box .text{ + font-size:0.24rem; + font-weight:400; + color:rgba(41,41,41,1); + line-height:0.36rem; +} +.blue-btn{ + width: 4.58rem; + height:0.98rem; + background: url(../images/btn-blue.png) no-repeat; + background-size: 100% 100%; + font-size:0.28rem; + font-weight:400; + color:rgba(255,255,255,1); + text-align: center; + line-height: 0.86rem; + margin: 0.15rem 0; +} +.gray-btn{ + width: 4.58rem; + height:0.98rem; + background: url(../images/btn-gray.png) no-repeat; + background-size: 100% 100%; + font-size:0.28rem; + font-weight:400; + color:rgba(255,255,255,1); + text-align: center; + line-height: 0.86rem; +} +.second{ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background:rgba(0,0,0,0.6); +} +.second-box{ + width: 5.50rem; + height: 7.4rem; + border-radius:0.3rem; + background-color: #fff; + display: flex; + flex-direction: column; + align-items: center; +} +.second-box .title{ + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; + height: 1rem; + width: 100%; + line-height: 1rem; + background-color: #489EF6; + font-size: 0.32rem; + font-weight: 500; + text-align: center; + color: #fff; +} +.carousel{ + width: 100%; + margin-top: 0.3rem; +} +.swiper-container{ + padding-bottom: 0.6rem; +} +.swiper-slide{ + width: 100%; +} +.swiper-slide-box{ + padding: 0 0.5rem; +} +.swiper-slide-box>div:first-child{ + margin-bottom: 0.3rem; + font-size:0.28rem; + font-weight:400; + color:rgba(41,41,41,1); + line-height:0.36rem; +} +.swiper-slide-box>.slide-img{ + width: 100%; + position: relative; + font-size: 0.2rem; +} +.swiper-slide-box>.slide-img .case{ + position: absolute; + right: 0; + top: -0.18rem; + width: 0.8rem; + height: 0.8rem; +} +.swiper-slide-box>.slide-img>img:first-child{ + width: 100%; +} +.swiper-container-horizontal>.swiper-pagination-bullets{ + bottom: -9px !important; +} \ No newline at end of file diff --git a/Public/Home/css/reset.css b/Public/Home/css/reset.css new file mode 100644 index 000000000..135df70a6 --- /dev/null +++ b/Public/Home/css/reset.css @@ -0,0 +1,28 @@ +html, +body { + width: 100%; + /* font-size: calc(266.67% + 57.3333 * (100vw - 320px) / 430); */ +} +/*清除一些默认样式*/ +html, +body { + margin: 0; + padding: 0; +} + +img{border:0;} +a{text-decoration:none; color:#000; outline:none;} +a:hover{text-decoration:none;} +em,strong,i{font-style:normal;} +h1,h2,h3,h4,h5,h6,span,strong,i{font-size:100%;font-weight:normal;margin: 0;padding: 0;} +.trans { + -webkit-transition: all 0.3s linear; + -moz-transition: all 0.3s linear; + -ms-transition: all 0.3s linear; + transition: all 0.3s linear; +} +.clearfix {*zoom:1;} +.clearfix:after {content:'\200B';clear:both;display:block;height:0px} + +/* html{-webkit-tap-highlight-color:transparent;} */ + diff --git a/Public/Home/css/swiper.min.css b/Public/Home/css/swiper.min.css new file mode 100644 index 000000000..6adcd7104 --- /dev/null +++ b/Public/Home/css/swiper.min.css @@ -0,0 +1,12 @@ +/** + * Swiper 4.4.6 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2018 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: December 19, 2018 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s opacity;-o-transition:.3s opacity;transition:.3s opacity;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:.2s top,.2s -webkit-transform;transition:.2s top,.2s -webkit-transform;-o-transition:.2s transform,.2s top;transition:.2s transform,.2s top;transition:.2s transform,.2s top,.2s -webkit-transform}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s left,.2s -webkit-transform;transition:.2s left,.2s -webkit-transform;-o-transition:.2s transform,.2s left;transition:.2s transform,.2s left;transition:.2s transform,.2s left,.2s -webkit-transform}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s right,.2s -webkit-transform;transition:.2s right,.2s -webkit-transform;-o-transition:.2s transform,.2s right;transition:.2s transform,.2s right;transition:.2s transform,.2s right,.2s -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:'';width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file diff --git a/Public/Home/images/1.png b/Public/Home/images/1.png new file mode 100644 index 000000000..888cc95fa Binary files /dev/null and b/Public/Home/images/1.png differ diff --git a/Public/Home/images/4.png b/Public/Home/images/4.png new file mode 100644 index 000000000..905e08fb1 Binary files /dev/null and b/Public/Home/images/4.png differ diff --git a/Public/Home/images/bg.png b/Public/Home/images/bg.png new file mode 100644 index 000000000..4dce4302a Binary files /dev/null and b/Public/Home/images/bg.png differ diff --git a/Public/Home/images/box-scroll.png b/Public/Home/images/box-scroll.png new file mode 100644 index 000000000..ae07499c9 Binary files /dev/null and b/Public/Home/images/box-scroll.png differ diff --git a/Public/Home/images/btn-blue.png b/Public/Home/images/btn-blue.png new file mode 100644 index 000000000..41e0a9f88 Binary files /dev/null and b/Public/Home/images/btn-blue.png differ diff --git a/Public/Home/images/btn-gray.png b/Public/Home/images/btn-gray.png new file mode 100644 index 000000000..6930e6828 Binary files /dev/null and b/Public/Home/images/btn-gray.png differ diff --git a/Public/Home/images/gengduo.png b/Public/Home/images/gengduo.png new file mode 100644 index 000000000..7dd079f3b Binary files /dev/null and b/Public/Home/images/gengduo.png differ diff --git a/Public/Home/images/lunbo.png b/Public/Home/images/lunbo.png new file mode 100644 index 000000000..8a378d206 Binary files /dev/null and b/Public/Home/images/lunbo.png differ diff --git a/Public/Home/images/start.png b/Public/Home/images/start.png new file mode 100644 index 000000000..7a5ae0de2 Binary files /dev/null and b/Public/Home/images/start.png differ diff --git a/Public/Home/images/start1.png b/Public/Home/images/start1.png new file mode 100644 index 000000000..7ccfc54d4 Binary files /dev/null and b/Public/Home/images/start1.png differ diff --git a/Public/Home/images/touxiang.png b/Public/Home/images/touxiang.png new file mode 100644 index 000000000..7a68ec715 Binary files /dev/null and b/Public/Home/images/touxiang.png differ diff --git a/Public/Home/images/wenhao.png b/Public/Home/images/wenhao.png new file mode 100644 index 000000000..ef28a5643 Binary files /dev/null and b/Public/Home/images/wenhao.png differ diff --git a/Public/Home/js/getRem.js b/Public/Home/js/getRem.js new file mode 100644 index 000000000..8c393d2b9 --- /dev/null +++ b/Public/Home/js/getRem.js @@ -0,0 +1,20 @@ +function getRem(pwidth,prem){ + var html = document.getElementsByTagName("html")[0]; + var oWidth = document.body.clientWidth || document.documentElement.clientWidth; + //var oHeight = document.body.clientHeight || document.documentElement.clientHeight; + // if (oWidth >= pwidth) { + // oWidth = pwidth; + // } + // if (oWidth > oHeight) { + // oWidth = oHeight + // } + var size=oWidth/pwidth*prem; + html.style.fontSize = size + "px"; +} +$(document).ready(function(){ + //画布、字体大小设定 + getRem(750,100); + $(window).resize(function() { + getRem(750,100); + }) +}); \ No newline at end of file diff --git a/Public/Home/js/jquery-1.11.3.min.js b/Public/Home/js/jquery-1.11.3.min.js new file mode 100644 index 000000000..0f60b7bd0 --- /dev/null +++ b/Public/Home/js/jquery-1.11.3.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("