Login.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. Namespace.register("U.MD.U.L"); //用户登录的命名空间
  2. Namespace.register("U.MD.U.LO"); //用户登出的命名空间
  3. //#region 登录
  4. /*
  5. 问题:
  6. 1、验证码的接口问题
  7. 2、无窗体的接口
  8. */
  9. //#region 配置数据
  10. U.MD.U.L.loginCallBack; //登录后的回调使用
  11. U.MD.U.L.isLogining = false; //判断用户登录状态。cookie登录状态为cookie,账号登录为true,没有登录为false
  12. //#endregion
  13. /**
  14. * 弹出登录注册
  15. *
  16. * @param {int} type==3:登录页面,type==1:注册页面,type==2:找回密码页面
  17. * @param {function} cb为回调函数
  18. * @returns {boolean} 是否登录
  19. */
  20. U.MD.U.L.login = U.MD.U.L.DLTC = function (fun) {
  21. var _iframe = $("#U_MD_HomeC_Pop iframe")[0];
  22. if ($("#U_MD_HomeC_Pop")[0]) {
  23. U.UF.F.windowTopCenter($("#U_MD_HomeC_Pop")[0]);
  24. try {
  25. //登录有的其他回调,如,登陆后直接打开好友聊天等
  26. if (U.UF.C.isFunction(fun)) {
  27. U.MD.U.L.loginCallBack = fun; //回调处理
  28. }
  29. $("input", _iframe.contentWindow.document)[0].focus();
  30. _iframe.contentWindow.U.MD.U.L.init();
  31. }
  32. catch (e) { }
  33. }
  34. else {
  35. 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" });
  36. new U.UF.UI.form("", _iframe,
  37. {
  38. "id": "U_MD_HomeC_Pop",
  39. "style": {
  40. "width": "360px",
  41. "height": "510px"
  42. }
  43. },
  44. {
  45. isdrag: false,
  46. isstretching: false,
  47. isenlarge: false,
  48. isnarrow: false
  49. });
  50. //跨域回调设置
  51. U.UF.DL.iframeLoad(_iframe, function () {
  52. //登录有的其他回调,如,登陆后直接打开好友聊天等
  53. if (U.UF.C.isFunction(fun)) {
  54. U.MD.U.L.loginCallBack = fun; //回调处理
  55. }
  56. _iframe.contentWindow.U.MD.U.L.loginCallBack = U.MD.U.L.defaultCallBack; //设置登录回调
  57. });
  58. }
  59. return _iframe;
  60. }
  61. /**
  62. * 打开注册窗体
  63. */
  64. U.MD.U.L.register = function (fun) {
  65. var _iframe = U.MD.U.L.login();
  66. try {
  67. _iframe.contentWindow.U.MD.U.R.register();
  68. }
  69. catch (e) {
  70. U.UF.DL.iframeLoad(_iframe, function () {
  71. //登录有的其他回调,如,登陆后直接打开好友聊天等
  72. if (U.UF.C.isFunction(fun)) {
  73. U.MD.U.L.loginCallBack = fun; //回调处理
  74. }
  75. _iframe.contentWindow.U.MD.U.L.loginCallBack = U.MD.U.L.defaultCallBack; //设置登录回调
  76. _iframe.contentWindow.U.UF.N.addHash('register'); //添加hash的处理
  77. });
  78. }
  79. }
  80. /**
  81. * 打开找回密码窗体
  82. */
  83. U.MD.U.L.retrieve = function () {
  84. var _iframe = U.MD.U.L.login();
  85. try {
  86. _iframe.contentWindow.U.MD.U.F.findPassword();
  87. }
  88. catch (e) {
  89. U.UF.DL.iframeLoad(_iframe, function () {
  90. _iframe.contentWindow.U.UF.N.addHash('findPassword'); //添加hash的处理
  91. });
  92. }
  93. }
  94. /**
  95. * 登录异步
  96. *
  97. * @param {object} 服务器返回的值
  98. * @param {boolean} 是否是cookie登录
  99. */
  100. U.MD.U.L.defaultCallBack = function (r, iscookie) {
  101. var _userinfo, //用户个人信息
  102. _backgroudimage, //背景图片
  103. _str, //输出的提示
  104. _context = r.context, //回调参数
  105. _address = _context[1], //触发函数的地址
  106. _username = _context[2], //用户名
  107. _password = _context[3]; //密码
  108. //登录后台返回的数据
  109. r = r.value;
  110. //判断登录状态
  111. switch (r) {
  112. case null:
  113. _str = "系统繁忙!请重试";
  114. break; //系统繁忙
  115. case 0:
  116. _str = "帐号不存在!";
  117. break;
  118. case 1:
  119. _str = "密码错误!";
  120. break; //帐号密码错误
  121. case 2:
  122. _str = "该用户不允许被访问!请联系管理员";
  123. break; //用户给禁用
  124. default:
  125. if (r) {
  126. //登录有的其他回调,如,登陆后直接打开好友聊天等
  127. U.MD.U.LO.emptyUserInfo(); //登陆的时候先清空用户信息,防止前面登陆用户的信息有冲突
  128. //如果刚刚登陆的时候没有用户的地址,这里重新获取,然后向后台发送
  129. if (!_address) {
  130. U.UF.CI.getUserLocation(U.MD.U.L.addUserAccess); //客户端信息加载,好像只加载了新浪ip地址?
  131. }
  132. _userinfo = U.MD.U.L.setUserInfo(r); //设置用户基本信息,包括用户信息,好友信息
  133. U.MD.U.L.getLoginUserInfo(_username || US.userInfo.username); //去获取用户详细信息
  134. if ($("#U_MD_D_BDI")[0] && $('#U_MD_D_BG')[0]) {
  135. //登录有用户的信息展示到页面中,包括背景图片、用户头像等
  136. U.MD.U.L.printUserInfo(); //用户头部头像个人信息
  137. _backgroudimage = U.MD.D.B.split(US.userInfo.UserBackGroundImage); //拆分用户的背景图片,里面包含了图片地址和展示的格式
  138. U.MD.D.B.setBackgroundImage(_backgroudimage[0], _backgroudimage[1]); //设置用户背景图,以后需修改为设置用户桌面信息
  139. }
  140. //Cookie登录,即使密码错误也不弹出错误信息。
  141. if (_str && iscookie !== true) {
  142. U.alert(_str); //登录提示处理
  143. }
  144. //如果弹出了登录框,那么给登录框进行处理
  145. if ($("#U_MD_HomeC_Pop")[0]) {
  146. //登录框的样式还原
  147. $("#U_MD_HomeC_Pop")[0].close(); //关闭登陆款
  148. }
  149. U.MD.O && U.MD.O.P.connect();
  150. }
  151. // _str = "登录成功";
  152. }
  153. if (_str) {
  154. U.alert(_str);
  155. }
  156. }
  157. /**
  158. * 判断用户是否登录如果未登陆则弹出登陆框
  159. *
  160. */
  161. U.MD.U.L.isLogin = function (fun) {
  162. if (!US.userInfo.userid) { //判断用户id是否存在
  163. U.MD.U.L.login(fun); //用户登录函数
  164. return true; //用户未登录返回false
  165. }
  166. return false; //用户登录返回true
  167. }
  168. /**
  169. * 登录调用回调使用
  170. * @param {function} 回调函数
  171. *
  172. */
  173. U.MD.U.L.setLoginCallBack = function (fun) {
  174. //未登录要求登录
  175. if (U.MD.U.L.isLogin()) {
  176. U.MD.U.L.loginCallBack = fun;
  177. }
  178. //登录直接转发
  179. else {
  180. fun();
  181. return true;
  182. }
  183. }
  184. //#endregion
  185. //#region cookie登录
  186. /*
  187. 功能:1473.cn域下各个应用的用户通过Cookie自动登录,Cookie登录入口。支持跨域
  188. */
  189. U.MD.U.L.cookieLogin = function () {
  190. var _cookie = U.MD.U.L.getCookieByUserId(), //获取用户的云端Cookie,选取最后一个账号进行登录。
  191. _address = US.city.userAllLocation || ""; //找到自己登陆用户的地址
  192. //如果获取到cookie的值,那么就进行cookie登陆
  193. if (_cookie && _cookie.userid && _cookie.userid.length == 36) {
  194. U.MD.U.L.isLogining = "cookie"; //设置cookie登陆状态
  195. U.A.Request(US.USER, ["LoginByCookie", _cookie.userid, _cookie.username], U.MD.U.L.defaultCallBack, ["", _address]); //调用cookie登陆处理
  196. }
  197. }
  198. /*
  199. 功能:获取用户cookie,云端cookie关键字为usestudiosso,格式为
  200. Loginid:登录id
  201. userstamp:账号13928417148的值为"1364812396"?奇怪?
  202. userid:云端用户id
  203. username:云端用户名
  204. 如果不传入参数,默认获取最后一个,否则获取传入userid的账号进行登录。
  205. 参数一:userid代表用户id。传入用户id,则判断cookie中是否有该账号,并使用该账号登录。
  206. */
  207. U.MD.U.L.getCookieByUserId = function (userid) {
  208. var i, _cookiearr = U.MD.U.L.cookieToArray("usestudiosso"); //获取保存的cookie值。
  209. //如果传入参数userid并且cookie中有userid。则判断是否是自己的账号登录。
  210. if (_cookiearr.userid) {
  211. //如果传了userid,那么就根据userid找
  212. if (userid) {
  213. //数组里匹配
  214. for (i = 0; i < _cookiearr.userid.length; i++) {
  215. if (_cookiearr.userid[i] == userid) {
  216. break;
  217. }
  218. }
  219. }
  220. //否则找到最后一个登陆用户的信息
  221. else {
  222. //允许多用户登录,则用户id减少一?
  223. i = _cookiearr.userid.length - 1;
  224. }
  225. //循环所有Cookie。
  226. for (var c in _cookiearr) {
  227. //对中文进行解密。_cookiearr[c]中可能有多个userid,只获取最后选中的第i个。返回的数据在这里做了处理。
  228. _cookiearr[c] = decodeURIComponent(_cookiearr[c][i]);
  229. }
  230. }
  231. //返回的集合包括了Loginid:登录iduserstamp:账号13928417148的值为"1364812396"?奇怪?userid:云端用户idusername:云端用户名
  232. return _cookiearr;
  233. }
  234. /**
  235. *1473cookie格式专用
  236. * 把形如:"userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396"的cookie转换为json对象。函数名有问题。
  237. 得到的形式为:_UAE.Loginid可得到用户id。
  238. *
  239. * @param {string} 获取cookie的key对应的值 如usestudio=aa=ff&ss=aa 的usestudio里的 aa=ff&ss=aa
  240. * @return {object} {key:[value1,value2]}
  241. */
  242. U.MD.U.L.cookieToArray = function (key) { //获取cookie
  243. var i, //循环初始化
  244. _cookieobj = {}, //初始化对象 作为返回值
  245. _cookie = U.UF.Cookie.get("usestudiosso"); //获取用户指定的Cookie值
  246. if (_cookie) { //是否存在
  247. _cookie = _cookie.split("&");
  248. for (i = 0; i < _cookie.length; i++) { //循环对应的值
  249. _cookie[i] = _cookie[i].split("="); //切分key和value
  250. //如果定义了cookie值的接受数组,则不再重复定义。_cookie[i][0]相当于key,例如userid
  251. if (!_cookieobj[_cookie[i][0]]) {
  252. _cookieobj[_cookie[i][0]] = [];
  253. }
  254. _cookieobj[_cookie[i][0]].push(decodeURIComponent(_cookie[i][1])); //生成{key:[value1,value2]}
  255. }
  256. }
  257. return _cookieobj;
  258. }
  259. //#endregion
  260. //#region 登录数据使用
  261. /**
  262. * 为了以后的扩展,给其他系统获取完整的用户信息,获取用户登录数据,后面还有一个登陆获取用户个人信息。好友信息,及消息通知,逻辑有问题。
  263. * @param {string} 用户名
  264. *
  265. */
  266. U.MD.U.L.getLoginUserInfo = function (username) {
  267. U.A.Request(US.USER, ["GetUserLoginData", username], U.MD.U.L.asynGetLoginUserInfo);
  268. }
  269. /**
  270. * 异步获取数据
  271. * @param {object} ajax返回的数据值
  272. *
  273. */
  274. U.MD.U.L.asynGetLoginUserInfo = function (r) {
  275. r = r.value; //得到登录用户的数据
  276. US.friend = r; //返回的r里面是用户的好友信息 包括 {"className":好友分组信息,friends:好友信息,group:好友群,groupusers:群好友,recentcontacts:最近联系人,unreadfirendmessage:未读好友消息,unreadgroupmessage:未读群消息,commonfriend:推荐好友}
  277. U.MD.U.L.initUserLogin(US.userInfo); //登录初始化应用
  278. if (U.MD.D && U.MD.D.IsUseStudio || $("#usestudio_server")[0]) {
  279. U.MD.F && U.MD.F.N.friendMessageHandle([r.unreadfirendmessage, r.unreadgroupmessage]); //用户消息区域
  280. }
  281. }
  282. /**
  283. * 添加用户初始化资料信息
  284. * @param {array} 登录用户的数据
  285. *
  286. */
  287. U.MD.U.L.setUserInfo = function (userinfo) {
  288. US.userInfo = userinfo[0]; //给用户信息全局变量赋值。
  289. US.userInfo.LoginId = userinfo[2]; //用户前后台更新数据唯一识别id
  290. US.friend.onlinefirendinfo = userinfo[1]; //添加在线信息。
  291. return US.userInfo;
  292. }
  293. //登录成功执行事件
  294. U.MD.U.L.initUserLogin = function () {
  295. var _userinfo = US.userInfo; //初始化用户资料
  296. U.MD.UI && U.MD.UI.flashEmptyUpload && U.MD.UI.flashEmptyUpload(); //清理上传文件
  297. //登录有的其他回调,如,登陆后直接打开好友聊天等
  298. if (U.UF.C.isFunction(U.MD.U.L.loginCallBack)) {
  299. U.MD.U.L.loginCallBack(_userinfo); //回调处理
  300. }
  301. U.MD.F && U.MD.F.initFriend(); //初始化好友
  302. //如果没有用url指引,同时又是1473的项目,那么弹出云盘,否则只是加载数据
  303. if (U.MD.D && U.MD.D.IsUseStudio) {
  304. U.MD.D.I.openApplication("disk", { "userid": _userinfo.UserId, "directoryid": US.FTPFOLDERID }); //弹出云盘的数据。
  305. }
  306. //外部加载1473框架的都会带有usestudio_server 这个元素,当用户没有填写邮箱信息的时候,同时是在1473主站点的,那么就弹出用户
  307. if (!US.userInfo.UserEmail && !$("#usestudio_server")[0]) {
  308. U.MD.U.P.userDataSet(); //用户数据加载
  309. }
  310. }
  311. /**
  312. * 添加用户登录信息
  313. *
  314. */
  315. U.MD.U.L.addUserAccess = function () {
  316. //如果用户的城市信息不存在,则添加用户用户城市信息,应该不只是单单判断地址,此处逻辑还需要整理!
  317. if (US.city.userAllLocation) {
  318. U.A.Request(US.USER, ["RecordUserClientInfo", US.userInfo.username, "", "", US.city.userAllLocation, ""],
  319. function () { }); //异步添加地址信息
  320. }
  321. }
  322. /**
  323. * 打印用户的信息
  324. *
  325. */
  326. U.MD.U.L.printUserInfo = function () {
  327. var _childel,
  328. _userinfo = US.userInfo, //用户的信息
  329. _userimage = U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead), //获取用户头像
  330. _el = $("#U_MD_D_BDI"); //头像打印的区域
  331. if (_el[0]) {
  332. //设置头部的样式变化
  333. _el.addAttrArray({
  334. "className": "U_MD_D_BDI"
  335. })[0];
  336. //如果已经有头像了,那么直接修改头像
  337. if (_el.find("img")[0]) {
  338. //设置头像处理
  339. _el.find("img").addAttrArray({
  340. "onerror": U.MD.C.imgError,
  341. "title": _userinfo.UserNickName,
  342. "onclick": function () {
  343. U.MD.D.I.openApplication("set");
  344. },
  345. "src": U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead)
  346. });
  347. }
  348. //创建头像的处理
  349. else {
  350. $$("img", {
  351. "onerror": U.MD.C.imgError,
  352. "onerror": U.MD.C.imgError,
  353. "title": _userinfo.UserNickName,
  354. "onclick": function () {
  355. U.MD.D.I.openApplication("set");
  356. },
  357. "src": U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead)
  358. }, _el[0])
  359. }
  360. _childel = $("#U_MD_D_BDL").Child();
  361. _childel[0].style.display = _childel[1].style.display = "none";
  362. _childel[2].style.display = "block";
  363. }
  364. }
  365. //#endregion
  366. //#region 退出
  367. /**
  368. * 退出登录提示
  369. *
  370. * @param callback {function} 登出回调函数
  371. */
  372. U.MD.U.LO.logoutSystem = function (callback) {
  373. //如果用户登录的情况
  374. if (US.userInfo.userid) {
  375. //弹出退出登录的提示
  376. U.UF.UI.confirm("是否退出" + US.userInfo.username + "账号", function () {
  377. U.MD.U.LO.logout(callback);
  378. });
  379. }
  380. }
  381. //确定注销
  382. //b为是否清除cookie的参数。如果传递false,则清除cookie。
  383. /**
  384. * 退出登录的处理
  385. *
  386. */
  387. U.MD.U.LO.logout = function (callback) {
  388. // if (U.MD.O) {
  389. // //获取office内容
  390. // // U.A.Request(US.SCOKET, ['logout', US.userInfo.userid, US.pageId], function () { });
  391. // }
  392. U.MD.U.LO.clearCookie(function () {
  393. U.MD.U.LO.emptyUserInfo(); //清楚用户的前端的数据
  394. if ($('#UI_Login')[0]) {
  395. $('#UI_Login')[0].contentWindow.U.MD.U.OT.logout(); //如果是第三方平台登录的,在第三方平台进行下线
  396. }
  397. //清理图形界面的处理
  398. if ($("#U_MD_D_BDI")[0]) {
  399. //清空所有的应用
  400. U.MD.U.LO.logoutStyle(); //清除注册样式
  401. U.MD.D.T.taskbar.clear(); //任务栏清除
  402. U.UF.UI.form.closeWindows(); //关闭所有的窗体
  403. }
  404. U.UF.C.isFunction(callback) && callback();
  405. }); //退出账号的cookie
  406. }
  407. /**
  408. * 用户退出指定帐号 清理cookie
  409. *
  410. */
  411. U.MD.U.LO.clearCookie = function (callback) {
  412. //判断用户是否登录
  413. if (US.userInfo.userid) {
  414. var _iscookie = U.UF.Cookie.get("usestudiosso", "userid").indexOf(US.userInfo.userid) > -1; //判断cookie是否还存在用户的id
  415. //如果存在cookie的出力
  416. if (_iscookie) {
  417. //调用后台,让用户注销
  418. U.A.Request(US.USER, ["UserOffline", US.userInfo.userid], function () { U.UF.C.isFunction(callback) && callback(); });
  419. } else {
  420. U.UF.C.isFunction(callback) && callback();
  421. }
  422. }
  423. }
  424. /**
  425. * 清空用户前端的信息
  426. *
  427. */
  428. U.MD.U.LO.emptyUserInfo = function () {
  429. US.userInfo = {}; //用户数据清空
  430. US.friend = {}; //用户好友信息清空
  431. if ($("#U_MD_D_BG")[0]) {
  432. U.MD.D.B.setBackgroundImage(U.MD.D.B.url); //设置默认背景
  433. }
  434. }
  435. /**
  436. * 注销样式
  437. *
  438. */
  439. U.MD.U.LO.logoutStyle = function () {
  440. //清楚登录用户的样式
  441. $("#U_MD_D_BDI").addAttrArray({
  442. "innerHTML": "",
  443. "className": "U_MD_D_BDI U_Img"
  444. });
  445. //获取子元素
  446. var _childel = $("#U_MD_D_BDL").childs();
  447. _childel[0].style.display = _childel[1].style.display = "block"; //显示登录注册
  448. _childel[2].style.display = "none"; //隐藏提出按钮
  449. //右边好友框隐藏
  450. $("#U_MD_F_H_R").css("display", "none");
  451. //隐藏消息提醒
  452. $("#U_MD_D_MG_OA").Parent(2).style.display = "none";
  453. //隐藏所有的窗体
  454. // $("#U_MD_Home").childs().css("display", "none");
  455. }
  456. //#endregion
  457. //#region 外链登录
  458. Namespace.register("U.MD.U.OT"); //用户登录的命名空间
  459. /**
  460. * 填写登录信息
  461. *
  462. * @param {array} 登录值参数
  463. * @param {array} 回调函数
  464. */
  465. U.MD.U.OT.perfectUserInfo = function (userinfo, username) {
  466. if ($("#U_MD_U_OT_B_Pop")[0]) {
  467. U.UF.F.windowTopCenter($("#U_MD_U_OT_B_Pop")[0]);
  468. }
  469. else {
  470. 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" });
  471. new U.UF.UI.form("", _iframe,
  472. {
  473. "id": "U_MD_U_OT_B_Pop",
  474. "style": {
  475. "width": "400px",
  476. "height": "340px"
  477. }
  478. },
  479. {
  480. isdrag: false,
  481. isstretching: false,
  482. isenlarge: false,
  483. isnarrow: false
  484. });
  485. //跨域回调设置
  486. U.UF.DL.iframeLoad(_iframe, function () {
  487. if ($("#U_MD_HomeC_Pop")[0]) {
  488. $("#U_MD_HomeC_Pop")[0].close();
  489. }
  490. _iframe.contentWindow.U.MD.U.OT.perfectUserInfoInit(userinfo, username); //设置登录回调
  491. });
  492. }
  493. }
  494. //#endregion