Namespace.register("U.MD.U.L"); //用户登录的命名空间 Namespace.register("U.MD.U.LO"); //用户登出的命名空间 //#region 登录 /* 问题: 1、验证码的接口问题 2、无窗体的接口 */ //#region 配置数据 U.MD.U.L.loginCallBack; //登录后的回调使用 U.MD.U.L.isLogining = false; //判断用户登录状态。cookie登录状态为cookie,账号登录为true,没有登录为false //#endregion /** * 弹出登录注册 * * @param {int} type==3:登录页面,type==1:注册页面,type==2:找回密码页面 * @param {function} cb为回调函数 * @returns {boolean} 是否登录 */ U.MD.U.L.login = U.MD.U.L.DLTC = function (fun) { var _iframe = $("#U_MD_HomeC_Pop iframe")[0]; if ($("#U_MD_HomeC_Pop")[0]) { U.UF.F.windowTopCenter($("#U_MD_HomeC_Pop")[0]); try { //登录有的其他回调,如,登陆后直接打开好友聊天等 if (U.UF.C.isFunction(fun)) { U.MD.U.L.loginCallBack = fun; //回调处理 } $("input", _iframe.contentWindow.document)[0].focus(); _iframe.contentWindow.U.MD.U.L.init(); } catch (e) { } } else { var _iframe = $$("iframe", { "style": { "border": "0", "float": "left" }, "id": "UI_Login", "name": "UI_Login", "frameborder": "no", "border": "0", "scrolling ": "no", "width": "360px", "height": "480px", "src": US.MAINDOMAIN + "/Login.htm" }); new U.UF.UI.form("", _iframe, { "id": "U_MD_HomeC_Pop", "style": { "width": "360px", "height": "510px" } }, { isdrag: false, isstretching: false, isenlarge: false, isnarrow: false }); //跨域回调设置 U.UF.DL.iframeLoad(_iframe, function () { //登录有的其他回调,如,登陆后直接打开好友聊天等 if (U.UF.C.isFunction(fun)) { U.MD.U.L.loginCallBack = fun; //回调处理 } _iframe.contentWindow.U.MD.U.L.loginCallBack = U.MD.U.L.defaultCallBack; //设置登录回调 }); } return _iframe; } /** * 打开注册窗体 */ U.MD.U.L.register = function (fun) { var _iframe = U.MD.U.L.login(); try { _iframe.contentWindow.U.MD.U.R.register(); } catch (e) { U.UF.DL.iframeLoad(_iframe, function () { //登录有的其他回调,如,登陆后直接打开好友聊天等 if (U.UF.C.isFunction(fun)) { U.MD.U.L.loginCallBack = fun; //回调处理 } _iframe.contentWindow.U.MD.U.L.loginCallBack = U.MD.U.L.defaultCallBack; //设置登录回调 _iframe.contentWindow.U.UF.N.addHash('register'); //添加hash的处理 }); } } /** * 打开找回密码窗体 */ U.MD.U.L.retrieve = function () { var _iframe = U.MD.U.L.login(); try { _iframe.contentWindow.U.MD.U.F.findPassword(); } catch (e) { U.UF.DL.iframeLoad(_iframe, function () { _iframe.contentWindow.U.UF.N.addHash('findPassword'); //添加hash的处理 }); } } /** * 登录异步 * * @param {object} 服务器返回的值 * @param {boolean} 是否是cookie登录 */ U.MD.U.L.defaultCallBack = function (r, iscookie) { var _userinfo, //用户个人信息 _backgroudimage, //背景图片 _str, //输出的提示 _context = r.context, //回调参数 _address = _context[1], //触发函数的地址 _username = _context[2], //用户名 _password = _context[3]; //密码 //登录后台返回的数据 r = r.value; //判断登录状态 switch (r) { case null: _str = "系统繁忙!请重试"; break; //系统繁忙 case 0: _str = "帐号不存在!"; break; case 1: _str = "密码错误!"; break; //帐号密码错误 case 2: _str = "该用户不允许被访问!请联系管理员"; break; //用户给禁用 default: if (r) { //登录有的其他回调,如,登陆后直接打开好友聊天等 U.MD.U.LO.emptyUserInfo(); //登陆的时候先清空用户信息,防止前面登陆用户的信息有冲突 //如果刚刚登陆的时候没有用户的地址,这里重新获取,然后向后台发送 if (!_address) { U.UF.CI.getUserLocation(U.MD.U.L.addUserAccess); //客户端信息加载,好像只加载了新浪ip地址? } _userinfo = U.MD.U.L.setUserInfo(r); //设置用户基本信息,包括用户信息,好友信息 U.MD.U.L.getLoginUserInfo(_username || US.userInfo.username); //去获取用户详细信息 if ($("#U_MD_D_BDI")[0] && $('#U_MD_D_BG')[0]) { //登录有用户的信息展示到页面中,包括背景图片、用户头像等 U.MD.U.L.printUserInfo(); //用户头部头像个人信息 _backgroudimage = U.MD.D.B.split(US.userInfo.UserBackGroundImage); //拆分用户的背景图片,里面包含了图片地址和展示的格式 U.MD.D.B.setBackgroundImage(_backgroudimage[0], _backgroudimage[1]); //设置用户背景图,以后需修改为设置用户桌面信息 } //Cookie登录,即使密码错误也不弹出错误信息。 if (_str && iscookie !== true) { U.alert(_str); //登录提示处理 } //如果弹出了登录框,那么给登录框进行处理 if ($("#U_MD_HomeC_Pop")[0]) { //登录框的样式还原 $("#U_MD_HomeC_Pop")[0].close(); //关闭登陆款 } U.MD.O && U.MD.O.P.connect(); } // _str = "登录成功"; } if (_str) { U.alert(_str); } } /** * 判断用户是否登录如果未登陆则弹出登陆框 * */ U.MD.U.L.isLogin = function (fun) { if (!US.userInfo.userid) { //判断用户id是否存在 U.MD.U.L.login(fun); //用户登录函数 return true; //用户未登录返回false } return false; //用户登录返回true } /** * 登录调用回调使用 * @param {function} 回调函数 * */ U.MD.U.L.setLoginCallBack = function (fun) { //未登录要求登录 if (U.MD.U.L.isLogin()) { U.MD.U.L.loginCallBack = fun; } //登录直接转发 else { fun(); return true; } } //#endregion //#region cookie登录 /* 功能:1473.cn域下各个应用的用户通过Cookie自动登录,Cookie登录入口。支持跨域 */ U.MD.U.L.cookieLogin = function () { var _cookie = U.MD.U.L.getCookieByUserId(), //获取用户的云端Cookie,选取最后一个账号进行登录。 _address = US.city.userAllLocation || ""; //找到自己登陆用户的地址 //如果获取到cookie的值,那么就进行cookie登陆 if (_cookie && _cookie.userid && _cookie.userid.length == 36) { U.MD.U.L.isLogining = "cookie"; //设置cookie登陆状态 U.A.Request(US.USER, ["LoginByCookie", _cookie.userid, _cookie.username], U.MD.U.L.defaultCallBack, ["", _address]); //调用cookie登陆处理 } } /* 功能:获取用户cookie,云端cookie关键字为usestudiosso,格式为 Loginid:登录id userstamp:账号13928417148的值为"1364812396"?奇怪? userid:云端用户id username:云端用户名 如果不传入参数,默认获取最后一个,否则获取传入userid的账号进行登录。 参数一:userid代表用户id。传入用户id,则判断cookie中是否有该账号,并使用该账号登录。 */ U.MD.U.L.getCookieByUserId = function (userid) { var i, _cookiearr = U.MD.U.L.cookieToArray("usestudiosso"); //获取保存的cookie值。 //如果传入参数userid并且cookie中有userid。则判断是否是自己的账号登录。 if (_cookiearr.userid) { //如果传了userid,那么就根据userid找 if (userid) { //数组里匹配 for (i = 0; i < _cookiearr.userid.length; i++) { if (_cookiearr.userid[i] == userid) { break; } } } //否则找到最后一个登陆用户的信息 else { //允许多用户登录,则用户id减少一? i = _cookiearr.userid.length - 1; } //循环所有Cookie。 for (var c in _cookiearr) { //对中文进行解密。_cookiearr[c]中可能有多个userid,只获取最后选中的第i个。返回的数据在这里做了处理。 _cookiearr[c] = decodeURIComponent(_cookiearr[c][i]); } } //返回的集合包括了Loginid:登录iduserstamp:账号13928417148的值为"1364812396"?奇怪?userid:云端用户idusername:云端用户名 return _cookiearr; } /** *1473cookie格式专用 * 把形如:"userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396"的cookie转换为json对象。函数名有问题。 得到的形式为:_UAE.Loginid可得到用户id。 * * @param {string} 获取cookie的key对应的值 如usestudio=aa=ff&ss=aa 的usestudio里的 aa=ff&ss=aa * @return {object} {key:[value1,value2]} */ U.MD.U.L.cookieToArray = function (key) { //获取cookie var i, //循环初始化 _cookieobj = {}, //初始化对象 作为返回值 _cookie = U.UF.Cookie.get("usestudiosso"); //获取用户指定的Cookie值 if (_cookie) { //是否存在 _cookie = _cookie.split("&"); for (i = 0; i < _cookie.length; i++) { //循环对应的值 _cookie[i] = _cookie[i].split("="); //切分key和value //如果定义了cookie值的接受数组,则不再重复定义。_cookie[i][0]相当于key,例如userid if (!_cookieobj[_cookie[i][0]]) { _cookieobj[_cookie[i][0]] = []; } _cookieobj[_cookie[i][0]].push(decodeURIComponent(_cookie[i][1])); //生成{key:[value1,value2]} } } return _cookieobj; } //#endregion //#region 登录数据使用 /** * 为了以后的扩展,给其他系统获取完整的用户信息,获取用户登录数据,后面还有一个登陆获取用户个人信息。好友信息,及消息通知,逻辑有问题。 * @param {string} 用户名 * */ U.MD.U.L.getLoginUserInfo = function (username) { U.A.Request(US.USER, ["GetUserLoginData", username], U.MD.U.L.asynGetLoginUserInfo); } /** * 异步获取数据 * @param {object} ajax返回的数据值 * */ U.MD.U.L.asynGetLoginUserInfo = function (r) { r = r.value; //得到登录用户的数据 US.friend = r; //返回的r里面是用户的好友信息 包括 {"className":好友分组信息,friends:好友信息,group:好友群,groupusers:群好友,recentcontacts:最近联系人,unreadfirendmessage:未读好友消息,unreadgroupmessage:未读群消息,commonfriend:推荐好友} U.MD.U.L.initUserLogin(US.userInfo); //登录初始化应用 if (U.MD.D && U.MD.D.IsUseStudio || $("#usestudio_server")[0]) { U.MD.F && U.MD.F.N.friendMessageHandle([r.unreadfirendmessage, r.unreadgroupmessage]); //用户消息区域 } } /** * 添加用户初始化资料信息 * @param {array} 登录用户的数据 * */ U.MD.U.L.setUserInfo = function (userinfo) { US.userInfo = userinfo[0]; //给用户信息全局变量赋值。 US.userInfo.LoginId = userinfo[2]; //用户前后台更新数据唯一识别id US.friend.onlinefirendinfo = userinfo[1]; //添加在线信息。 return US.userInfo; } //登录成功执行事件 U.MD.U.L.initUserLogin = function () { var _userinfo = US.userInfo; //初始化用户资料 U.MD.UI && U.MD.UI.flashEmptyUpload && U.MD.UI.flashEmptyUpload(); //清理上传文件 //登录有的其他回调,如,登陆后直接打开好友聊天等 if (U.UF.C.isFunction(U.MD.U.L.loginCallBack)) { U.MD.U.L.loginCallBack(_userinfo); //回调处理 } U.MD.F && U.MD.F.initFriend(); //初始化好友 //如果没有用url指引,同时又是1473的项目,那么弹出云盘,否则只是加载数据 if (U.MD.D && U.MD.D.IsUseStudio) { U.MD.D.I.openApplication("disk", { "userid": _userinfo.UserId, "directoryid": US.FTPFOLDERID }); //弹出云盘的数据。 } //外部加载1473框架的都会带有usestudio_server 这个元素,当用户没有填写邮箱信息的时候,同时是在1473主站点的,那么就弹出用户 if (!US.userInfo.UserEmail && !$("#usestudio_server")[0]) { U.MD.U.P.userDataSet(); //用户数据加载 } } /** * 添加用户登录信息 * */ U.MD.U.L.addUserAccess = function () { //如果用户的城市信息不存在,则添加用户用户城市信息,应该不只是单单判断地址,此处逻辑还需要整理! if (US.city.userAllLocation) { U.A.Request(US.USER, ["RecordUserClientInfo", US.userInfo.username, "", "", US.city.userAllLocation, ""], function () { }); //异步添加地址信息 } } /** * 打印用户的信息 * */ U.MD.U.L.printUserInfo = function () { var _childel, _userinfo = US.userInfo, //用户的信息 _userimage = U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead), //获取用户头像 _el = $("#U_MD_D_BDI"); //头像打印的区域 if (_el[0]) { //设置头部的样式变化 _el.addAttrArray({ "className": "U_MD_D_BDI" })[0]; //如果已经有头像了,那么直接修改头像 if (_el.find("img")[0]) { //设置头像处理 _el.find("img").addAttrArray({ "onerror": U.MD.C.imgError, "title": _userinfo.UserNickName, "onclick": function () { U.MD.D.I.openApplication("set"); }, "src": U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead) }); } //创建头像的处理 else { $$("img", { "onerror": U.MD.C.imgError, "onerror": U.MD.C.imgError, "title": _userinfo.UserNickName, "onclick": function () { U.MD.D.I.openApplication("set"); }, "src": U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead) }, _el[0]) } _childel = $("#U_MD_D_BDL").Child(); _childel[0].style.display = _childel[1].style.display = "none"; _childel[2].style.display = "block"; } } //#endregion //#region 退出 /** * 退出登录提示 * * @param callback {function} 登出回调函数 */ U.MD.U.LO.logoutSystem = function (callback) { //如果用户登录的情况 if (US.userInfo.userid) { //弹出退出登录的提示 U.UF.UI.confirm("是否退出" + US.userInfo.username + "账号", function () { U.MD.U.LO.logout(callback); }); } } //确定注销 //b为是否清除cookie的参数。如果传递false,则清除cookie。 /** * 退出登录的处理 * */ U.MD.U.LO.logout = function (callback) { // if (U.MD.O) { // //获取office内容 // // U.A.Request(US.SCOKET, ['logout', US.userInfo.userid, US.pageId], function () { }); // } U.MD.U.LO.clearCookie(function () { U.MD.U.LO.emptyUserInfo(); //清楚用户的前端的数据 if ($('#UI_Login')[0]) { $('#UI_Login')[0].contentWindow.U.MD.U.OT.logout(); //如果是第三方平台登录的,在第三方平台进行下线 } //清理图形界面的处理 if ($("#U_MD_D_BDI")[0]) { //清空所有的应用 U.MD.U.LO.logoutStyle(); //清除注册样式 U.MD.D.T.taskbar.clear(); //任务栏清除 U.UF.UI.form.closeWindows(); //关闭所有的窗体 } U.UF.C.isFunction(callback) && callback(); }); //退出账号的cookie } /** * 用户退出指定帐号 清理cookie * */ U.MD.U.LO.clearCookie = function (callback) { //判断用户是否登录 if (US.userInfo.userid) { var _iscookie = U.UF.Cookie.get("usestudiosso", "userid").indexOf(US.userInfo.userid) > -1; //判断cookie是否还存在用户的id //如果存在cookie的出力 if (_iscookie) { //调用后台,让用户注销 U.A.Request(US.USER, ["UserOffline", US.userInfo.userid], function () { U.UF.C.isFunction(callback) && callback(); }); } else { U.UF.C.isFunction(callback) && callback(); } } } /** * 清空用户前端的信息 * */ U.MD.U.LO.emptyUserInfo = function () { US.userInfo = {}; //用户数据清空 US.friend = {}; //用户好友信息清空 if ($("#U_MD_D_BG")[0]) { U.MD.D.B.setBackgroundImage(U.MD.D.B.url); //设置默认背景 } } /** * 注销样式 * */ U.MD.U.LO.logoutStyle = function () { //清楚登录用户的样式 $("#U_MD_D_BDI").addAttrArray({ "innerHTML": "", "className": "U_MD_D_BDI U_Img" }); //获取子元素 var _childel = $("#U_MD_D_BDL").childs(); _childel[0].style.display = _childel[1].style.display = "block"; //显示登录注册 _childel[2].style.display = "none"; //隐藏提出按钮 //右边好友框隐藏 $("#U_MD_F_H_R").css("display", "none"); //隐藏消息提醒 $("#U_MD_D_MG_OA").Parent(2).style.display = "none"; //隐藏所有的窗体 // $("#U_MD_Home").childs().css("display", "none"); } //#endregion //#region 外链登录 Namespace.register("U.MD.U.OT"); //用户登录的命名空间 /** * 填写登录信息 * * @param {array} 登录值参数 * @param {array} 回调函数 */ U.MD.U.OT.perfectUserInfo = function (userinfo, username) { if ($("#U_MD_U_OT_B_Pop")[0]) { U.UF.F.windowTopCenter($("#U_MD_U_OT_B_Pop")[0]); } else { var _iframe = $$("iframe", { "style": { "border": "0", "float": "left" }, "id": "U_MD_U_OT_B_Iframe", "name": "UI_Login", "frameborder": "0", "width": "400px", "height": "290px", "src": US.MAINDOMAIN + "/CompleteInformation.htm" }); new U.UF.UI.form("", _iframe, { "id": "U_MD_U_OT_B_Pop", "style": { "width": "400px", "height": "340px" } }, { isdrag: false, isstretching: false, isenlarge: false, isnarrow: false }); //跨域回调设置 U.UF.DL.iframeLoad(_iframe, function () { if ($("#U_MD_HomeC_Pop")[0]) { $("#U_MD_HomeC_Pop")[0].close(); } _iframe.contentWindow.U.MD.U.OT.perfectUserInfoInit(userinfo, username); //设置登录回调 }); } } //#endregion