344 lines
10 KiB
JavaScript
344 lines
10 KiB
JavaScript
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"] || undefined;
|
|
var currentuserName = sessionStorage["_currentuserName"] || undefined;
|
|
var parser = require("../platform/parser.js");
|
|
var data = require("../data.js");
|
|
var utility = require("../utility.js");
|
|
|
|
if (sessionStorage["_passenger"])
|
|
passengers = JSON.parse(sessionStorage["_passenger"]);
|
|
|
|
var SessionMgr = function () {
|
|
var that = this;
|
|
var _passengerInLoad = null;
|
|
|
|
ev.apply(this, arguments);
|
|
|
|
var loadPassengers = function (callback) {
|
|
if (!that.isLogined) {
|
|
if (callback)
|
|
callback([]);
|
|
|
|
var def = new $.Deferred();
|
|
def.reject("您尚未登录");
|
|
return def.promise();
|
|
}
|
|
|
|
if (_passengerInLoad) {
|
|
_passengerInLoad.done(callback);
|
|
return _passengerInLoad.promise();
|
|
}
|
|
_passengerInLoad = new $.Deferred();
|
|
_passengerInLoad.done(callback);
|
|
|
|
sessionStorage.removeItem("notValidPassengerFound");
|
|
ajax.sendPost("confirmPassenger/getPassengerDTOs", "leftTicket/init", null, "json", function () {
|
|
var result = this.model;
|
|
if (!result || !result.data || !result.data.normal_passengers) {
|
|
passengers = null;
|
|
that.fireEvent("passengerLoadFailed");
|
|
that.fireEvent("passengerLoaded", passengers);
|
|
_passengerInLoad.reject(result.data && result.data.exMsg);
|
|
|
|
if (result.data && result.data.exMsg && result.data.exMsg.indexOf("未登录") !== -1) {
|
|
document.dispatchEvent(new CustomEvent("loginInvalid"));
|
|
}
|
|
} else {
|
|
var p1 = result.data.normal_passengers;
|
|
passengers = _.filter(p1, parser.canPassageAddToOrder);
|
|
//对联系人数据进行预处理
|
|
parser.processPassenger(passengers);
|
|
if (p1.length !== passengers.length) {
|
|
that.fireEvent("notValidPassengerFound");
|
|
sessionStorage['hasUnverifiedPassenger'] = 1;
|
|
document.dispatchEvent(new Event("notValidPassengerFound"));
|
|
}
|
|
sessionStorage["_passenger"] = JSON.stringify(passengers);
|
|
that.fireEvent("passengerLoaded", passengers);
|
|
_passengerInLoad.resolve(passengers);
|
|
}
|
|
_passengerInLoad = null;
|
|
}, function () {
|
|
passengers = null;
|
|
_passengerInLoad.reject("网络错误");
|
|
_passengerInLoad = null;
|
|
sessionStorage.removeItem("_passenger");
|
|
that.fireEvent("passengerLoadFailed");
|
|
that.fireEvent("passengerLoaded", passengers);
|
|
});
|
|
|
|
return _passengerInLoad.promise();
|
|
};
|
|
that.savePassengers = function () {
|
|
if (!passengers)
|
|
return;
|
|
|
|
sessionStorage["_passenger"] = JSON.stringify(passengers);
|
|
};
|
|
that.reloadPassengers = function () {
|
|
sessionStorage.removeItem("_passenger");
|
|
passengers = null;
|
|
};
|
|
|
|
|
|
that.checkLoginState = function (callback) {
|
|
ajax.sendGet("modifyUser/initQueryUserInfo", "", null, "text", function () {
|
|
if (this.text.indexOf("登录名:") !== -1) {
|
|
sessionStorage.removeItem("_currentuser");
|
|
sessionStorage.removeItem("_currentuserName");
|
|
callback({ logined: false });
|
|
} else {
|
|
var m = /姓名:.*[\r\n]+<div[^>]+>([^<]+)<\/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;
|
|
var telStatus = /id="relation_way_view"[\w\W]*?手机号码:[\w\W]*?(\d{5,})[\w\W]*?([已未])通过核验/.exec(this.text) && RegExp.$2.trim() === "已";
|
|
|
|
sessionStorage["_currentuser"] = un;
|
|
sessionStorage["_currentuserName"] = m;
|
|
if (!m || !status)
|
|
callback({ logined: false });
|
|
else {
|
|
callback({ logined: true, realName: m, status: status, isChecked: status === '已通过', username: un, telChecked: telStatus });
|
|
}
|
|
|
|
}
|
|
}, function () {
|
|
callback({ logined: false });
|
|
});
|
|
};
|
|
that.loadProfile = function (dispname, checkData, username) {
|
|
//备份当前的查询,并取代为默认的查询
|
|
var cp = that.currentProfile;
|
|
if (cp) {
|
|
cp.passengers = null; //不保留乘客
|
|
}
|
|
|
|
var profile = $.extend({}, _.clone(that.defaultUser), storage.obj("12306_user_" + dispname) || { hasNotVerifyedPassenger: false, dispname: dispname, passengers: [], savedProfile: { list: [] }, currentProfile: {}, rawPassenger: [] });
|
|
profile.options = $.extend(_.clone(that.defaultUser.options), profile.options);
|
|
profile.currentProfile = $.extend({}, _.clone(that.defaultProfile), profile.currentProfile, cp);
|
|
if (!profile.currentProfile.autoRefreshDelay)
|
|
profile.currentProfile.autoRefreshDelay = 5;
|
|
if (username)
|
|
profile.username = username;
|
|
//有预置参数?加载
|
|
if (location.hash && location.hash.indexOf("#ALARM-") === 0) {
|
|
try {
|
|
var predata = JSON.parse(decodeURIComponent(location.hash.substr(7)));
|
|
profile.currentProfile = _.extend(profile.currentProfile, predata);
|
|
} catch (e) {
|
|
console.log("unable to restore parameter: " + e);
|
|
}
|
|
}
|
|
//fix passenger issue
|
|
profile.currentProfile.passengers = _.filter(profile.currentProfile.passengers || [], function (p) {
|
|
return p.passenger_name || false;
|
|
});
|
|
|
|
that.current = profile;
|
|
if (dispname) {
|
|
if (checkData) {
|
|
that.current.dispname = checkData.realName;
|
|
that.current.username = checkData.username;
|
|
that.fireEvent("userInfoUpdated");
|
|
|
|
if (!checkData.isChecked)
|
|
that.fireEvent("userNotChecked");
|
|
} else {
|
|
that.checkLoginState(function (data) {
|
|
if (!data.logined) {
|
|
//被强退了
|
|
that.loadProfile("");
|
|
that.fireEvent("loginInvalid");
|
|
} else {
|
|
that.current.dispname = data.realName;
|
|
that.current.username = data.username;
|
|
that.fireEvent("userInfoUpdated");
|
|
|
|
if (!data.isChecked)
|
|
that.fireEvent("userNotChecked");
|
|
if (!data.telChecked)
|
|
that.fireEvent("telNotChecked");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
that.save();
|
|
};
|
|
that.resetProfile = function () {
|
|
sessionStorage.removeItem("_currentuser");
|
|
sessionStorage.removeItem("_currentuserName");
|
|
that.loadProfile("");
|
|
};
|
|
that.save = function () {
|
|
if (!that.current)
|
|
return;
|
|
|
|
var key = "12306_user_" + that.current.dispname;
|
|
storage.put(key, that.current);
|
|
that.fireEvent("save");
|
|
};
|
|
that.getPassengers = function (callback) {
|
|
if (!that.isLogined) {
|
|
callback && callback([]);
|
|
|
|
var def = new $.Deferred();
|
|
def.reject("您尚未登录");
|
|
return def.promise();
|
|
}
|
|
|
|
var d1;
|
|
if (passengers) {
|
|
callback && callback(passengers);
|
|
|
|
d1 = new $.Deferred();
|
|
d1.resolve(passengers);
|
|
} else {
|
|
//that.once("passengerLoaded", function () {
|
|
// callback(passengers);
|
|
//});
|
|
d1 = loadPassengers(callback);
|
|
}
|
|
return d1;
|
|
};
|
|
this.ensureLogined = function (callback) {
|
|
if (!that.isLogined) {
|
|
that.fireEvent("requireLogin", callback);
|
|
} else {
|
|
callback(that.current);
|
|
}
|
|
};
|
|
this.defaultUser = { options: { soundPrompt: true, popupAt: true } };
|
|
this.defaultProfile = {
|
|
autoRefreshDelay: 5,
|
|
hideNotInListTrain: false,
|
|
hideNoTicket: false,
|
|
autoWaitToSell: false,
|
|
selectSeatFirst: true,
|
|
tryBottomSeat: true,
|
|
autoSubmitEnabled: true,
|
|
partialSubmitEnabled: false,
|
|
depDate: utility.formatDate(data.defaultDate),
|
|
submitStuAsCommon: false,
|
|
selectedSeatType: [],
|
|
selectedTrain: [],
|
|
dateloop: [],
|
|
passengers: [],
|
|
hideNoSeat: false,
|
|
ignoreIllegalData: false
|
|
};
|
|
this.forceProfile = {
|
|
autoSubmitEnabled: true,
|
|
autoWaitToSell: false
|
|
};
|
|
|
|
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["_currentuserName"] = v.dispname;
|
|
sessionStorage.removeItem("_passenger");
|
|
passengers = null;
|
|
}
|
|
if (!v.options)
|
|
v.options = {};
|
|
|
|
session = v;
|
|
}
|
|
else {
|
|
that.resetProfile();
|
|
}
|
|
that.fireEvent("sessionChanged");
|
|
that.fireEvent("currentProfileChanged");
|
|
|
|
if (that.isLogined) {
|
|
//获得用户json att
|
|
ajax.sendPost("login/checkUser", "login/init", null, "json", function () {
|
|
var m = this.model;
|
|
|
|
if (!m && !m.status && !m.data && m.data.flag) {
|
|
ajax.userAtts = m.data.attributes;
|
|
}
|
|
}, function () {
|
|
});
|
|
|
|
keepAlive.start();
|
|
} else {
|
|
keepAlive.stop();
|
|
}
|
|
}
|
|
});
|
|
Object.defineProperty(this, "isLogined", {
|
|
get: function () {
|
|
return session && session.username || false;
|
|
}
|
|
});
|
|
Object.defineProperty(this, "currentProfile", {
|
|
get: function () {
|
|
return session && session.currentProfile;
|
|
}, set: function (value) {
|
|
session.currentProfile = $.extend({}, JSON.parse(JSON.stringify(that.defaultProfile)), value, JSON.parse(JSON.stringify(that.forceProfile)));
|
|
that.fireEvent("currentProfileChanged");
|
|
that.save();
|
|
}
|
|
});
|
|
Object.defineProperty(this, "recentStations", {
|
|
get: function () {
|
|
return (that.current.recentStations || []).map(function (c) { return data.cities[c]; });
|
|
},
|
|
set: function (value) {
|
|
var clist = that.current.recentStations || [];
|
|
if (clist[0] && clist[0] == value)
|
|
return;
|
|
|
|
for (var i = 0; i < clist.length; i++) {
|
|
if (clist[i] == value) {
|
|
clist.splice(i, 1);
|
|
break;
|
|
}
|
|
clist.unshift(value);
|
|
that.current.recentStations = value;
|
|
that.fireEvent("recentCityChanged");
|
|
that.save();
|
|
}
|
|
}
|
|
});
|
|
document.addEventListener("loginInvalid", function () {
|
|
if (that.isLogined) {
|
|
document.dispatchEvent(new CustomEvent("userForcedOut"));
|
|
that.fireEvent("userForcedOut");
|
|
}
|
|
that.resetProfile();
|
|
});
|
|
//主动检测
|
|
if (typeof (currentuserName) === "undefined") {
|
|
that.checkLoginState(function (data) {
|
|
if (data.logined) {
|
|
that.loadProfile(data.realName, data);
|
|
} else {
|
|
that.loadProfile("");
|
|
}
|
|
});
|
|
} else
|
|
this.loadProfile(currentuserName || "");
|
|
|
|
return this;
|
|
};
|
|
SessionMgr.prototype = Object.create(ev);
|
|
SessionMgr.constructor = SessionMgr;
|
|
|
|
|
|
module.exports = new SessionMgr();
|
|
});
|