define(function (require, exports, module) { var session = null; var ev = require("../platform/EventObject.js"); var ajax = require("../platform/webRequest.js"); var storage = require("../platform/storage.js"); var keepAlive = require("../account/keepalive.js"); var passengers = null; var currentuser = sessionStorage["_currentuser"]; var parser = require("../platform/parser.js"); if (sessionStorage["_passenger"]) passengers = JSON.parse(sessionStorage["_passenger"]); //var LoginUser = require("./LoginUser.js"); var SessionMgr = function () { var that = this; var _passengerInLoad = false; ev.apply(this, arguments); var loadPassengers = function () { if (!that.isLogined) return; if (_passengerInLoad) return; _passengerInLoad = true; ajax.sendPost("confirmPassenger/getPassengerDTOs", "leftTicket/init", null, "json", function () { _passengerInLoad = false; var data = this.model; if (!data || !data.data || !data.data.normal_passengers) { passengers = null; that.fireEvent("passengerLoadFailed"); that.fireEvent("passengerLoaded", passengers); } else { var p1 = data.data.normal_passengers; passengers = _.filter(p1, parser.canPassageAddToOrder); //对联系人数据进行预处理 parser.processPassenger(passengers); if (p1.length !== passengers.length) { that.fireEvent("notValidPassengerFound"); document.dispatchEvent(new Event("notValidPassengerFound")); } sessionStorage["_passenger"] = JSON.stringify(passengers); that.fireEvent("passengerLoaded", passengers); } }, function () { _passengerInLoad = false; passengers = null; sessionStorage.removeItem("_passenger"); that.fireEvent("passengerLoadFailed"); that.fireEvent("passengerLoaded", passengers); }); }; that.checkLoginState = function (callback) { ajax.sendGet("modifyUser/initQueryUserInfo", "", null, "text", function () { if (this.text.indexOf("登录名:") !== -1) { sessionStorage["_currentuser"] = ""; callback({ logined: false }); } else { var m = /姓名:.*[\r\n]+]+>([^<]+)<\/div>/i.exec(this.text) && RegExp.$1; var status = /核验状态:[\w\W]+?>([^<>]+?)<\/div>/.exec(this.text) && RegExp.$1; var un = /userDTO\.loginUserDTO\.user_name.*?value=['"]([^'"]+)['"]/.exec(this.text) && RegExp.$1; sessionStorage["_currentuser"] = un; if (!m || !status) callback({ logined: false }); else { callback({ logined: true, realName: m, status: status, isChecked: status === '已通过', username: un }); } } }, function () { callback({ logined: false }); }); }; that.loadProfile = function (username, checkData) { var profile = storage.obj("12306_user_" + username) || { username: username, passengers: [], savedProfile: {}, currentProfile: {}, rawPassenger: [], options: {} }; that.current = profile; if (username) { if (checkData) { that.current.dispname = checkData.realName; that.fireEvent("userInfoUpdated"); if (!checkData.isChecked) that.fireEvent("userNotChecked"); } else { that.checkLoginState(function (data) { that.current.dispname = data.realName; that.fireEvent("userInfoUpdated"); if (!data.isChecked) that.fireEvent("userNotChecked"); }); } } }; that.resetProfile = function () { sessionStorage["_currentuser"] = ""; that.loadProfile(""); }; that.save = function () { if (!that.current) return; var key = "12306_user_" + that.current.username; storage.put(key, that.current); }; that.getPassengers = function (callback) { if (!callback) return; if (!that.isLogined) callback([]); if (passengers) callback(passengers); else { that.once("passengerLoaded", function () { callback(passengers); }); loadPassengers(); } }; Object.defineProperty(this, "current", { get: function () { return session; }, set: function (v) { if (session === v) return; if (v) { if (v.username !== currentuser) { sessionStorage["_currentuser"] = v.username; sessionStorage.removeItem("_passenger"); passengers = null; } session = v; } else { that.resetProfile(); } console.log("sessionChanged fired.") that.fireEvent("sessionChanged"); (that.isLogined && keepAlive.start()) || keepAlive.stop(); } }); Object.defineProperty(this, "isLogined", { get: function () { return session && session.username || false; } }); Object.defineProperty(this, "currentProfile", { get: function () { return session.currentProfile; } }); document.addEventListener("loginInvalid", function () { if (that.isLogined) { document.dispatchEvent(new CustomEvent("userForcedOut")); that.fireEvent("userForcedOut"); } that.resetProfile(); }); //主动检测 if (typeof (currentuser) === "undefined") { that.checkLoginState(function (data) { if (data.logined) { that.loadProfile(data.username, data); } else { that.loadProfile(""); } }); } else this.loadProfile(currentuser || ""); return this; }; SessionMgr.prototype = Object.create(ev); SessionMgr.constructor = SessionMgr; module.exports = new SessionMgr(); });