Light12306/Web12306/js/ui/index.js
2014-12-11 22:15:32 +08:00

343 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

define(function (require) {
var param = require("../data.js");
var widget = require("./widget.js");
var sessMgr = require("../account/sessionMgr.js");
var datebar = require("./widget_datebar.js");
var parser = require("../platform/parser.js");
var media = require("../platform/media.js");
var mp = require("./widget_message_popup.js");
var stationData = require("../station/station_data.js");
var utility = require("../utility.js");
var port = require("../platform/extensionPort.js");
require("./widget_modalDialog.js");
//会话管理器事件
sessMgr.on("notValidPassengerFound", function () {
mp.showMessagePopup("warn", "您的账户中有未通过12306实名认证的联系人将不可为他们订票。");
$(".passenger-notverified").show();
});
//初始化日期
require("./widget_datedropdown.js");
//预售期提示
require("./widget_sell_notification.js");
//地区选择
var citySelector = require("./widget_cityselector.js");
citySelector.init("input.ui-cityselector");
//验证码
require("./widget_verifycode.js").init();
//登录
var ui_login = require("./ui-login.js");
//结果列表
var ui_result = require("./ui-trainlist.js");
//自动刷新呢
var autorefresh = require("./ui-autorefresh.js");
autorefresh.on("requestQueryTicket", function () {
var cp = sessMgr.currentProfile;
if (!cp.fromCode || !cp.toCode || !cp.depDate) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
autorefresh.stop();
return;
}
ui_result.load(null, null, null, null, null, null, null, null, true);
});
//提交订单
var uiOrderProcess = require("./ui-order-submit-process.js");
//查询参数
require("./ui-autosubmitform.js");
//模式管理
require("./ui-theme-manager.js");
//系统公告
require("./ui-sysnotice.js");
//用户配置和选项的加载以及保存
require("../platform/profileBinder.js");
require("../platform/optionBinder.js");
//订票列表交互
ui_result.on("requireSubmitOrder", function (e, d) {
autorefresh.stop();
uiOrderProcess.start(d.train, d.seat, sessMgr.currentProfile, d.passengers);
});
autorefresh.on("requireSubmitOrder", function (e, d) {
uiOrderProcess.start(d.data, d.seat, sessMgr.currentProfile, d.passengers);
});
//界面交互初始化
(function () {
$(".order-tips").html("今日可订票:" + utility.formatDate(param.minDate, "MM月dd日") + "" + utility.formatDate(param.maxDate, "MM月dd日") + "车票");
//自动加速关闭
$(".net-tips, .reset-btn").hide();
var resetInterfaceByProfile = function () {
var user = sessMgr.current;
if (!user) {
return;
}
var showMoreOpt = user.options.showMoreOpt !== undefined ? user.options.showMoreOpt : (user.options.showMoreOpt = param.moreOptDefault);
var div = $("div.options-param");
!showMoreOpt ? (div.hide(), $(".search-more-option").html("显示更多选项")) : (div.show(), $(".search-more-option").html("隐藏更多选项"));
var p = user.currentProfile;
$("#from_city").val(p.fromText).attr("data-code", p.fromCode);
showSellTime.call(document.getElementById("from_city"));
$("#to_city").val(p.toText).attr("data-code", p.toCode);
document.querySelector("input[name='ticket_type'][value='" + (p.studentTicket ? "1" : "0") + "']").checked = true;
//车次类型
var ptt = p.trainTypes || [];
$("ul.search-traintypes :checkbox:gt(0)").each(function () {
this.checked = !ptt.length || _.indexOf(ptt, this.value) != -1;
});
$("ul.search-traintypes :checkbox:eq(0)").prop("checked", $("ul.search-traintypes :checkbox:gt(0):not(:checked)").length == 0);
//当前日期
if (p.depDate) {
var d = utility.addDays(utility.toDate(p.depDate), 0);
var today = utility.addDays(new Date(), 0);
d = d < today ? today : d;
var datestr = utility.formatDate(d, "yyyy-MM-dd");
datebar.go(d, d);
$("#dep_date").val(datestr);
}
};
$("ul.search-traintypes :checkbox:gt(0)").change(function () {
sessMgr.currentProfile.trainTypes = $.makeArray($("ul.search-traintypes :checkbox:gt(0):checked").map(function () {
return this.value;
}));
$("ul.search-traintypes :checkbox:eq(0)").prop("checked", $("ul.search-traintypes :checkbox:gt(0):not(:checked)").length == 0);
sessMgr.save();
});
$("ul.search-traintypes :checkbox:eq(0)").change(function () {
var checkbox = $("ul.search-traintypes :checkbox:gt(0)");
if (checkbox.filter(":not(:checked)").length) {
checkbox.prop("checked", true);
} else {
checkbox.prop("checked", false);
}
checkbox.eq(0).change();
});
//登录失效
sessMgr.on("userForcedOut", function () {
mp.showMessagePopup("error", "12306取消了您的登录请重新登录");
});
$(".search-more-option").click(function () {
var div = $("div.options-param");
div.is(":visible") ? (div.hide(), $(this).html("显示更多选项")) : (div.show(), $(this).html("隐藏更多选项"));
sessMgr.current.options.showMoreOpt = div.is(":visible");
sessMgr.save();
//report
port.track(param.trackTypes.PROFILE_AUTO_MOREOPT, [sessMgr.current.options.showMoreOpt ? 1 : 0]);
});
$("#from_city").change(function () {
var u = sessMgr.current;
var p = u.currentProfile;
p.fromText = this.value;
p.fromCode = this.dataset.code;
sessMgr.save();
});
$("#to_city").change(function () {
var u = sessMgr.current;
var p = u.currentProfile;
p.toText = this.value;
p.toCode = this.dataset.code;
sessMgr.save();
});
var selltipTpl = $("#selltime_tip_tpl").doT();
var showSellTime = function () {
var v = this.dataset.code;
var vn = this.value;
var cnt = $("#selltime_tip");
if (!v) {
cnt.hide();
return;
}
//查找其它近似站
var stations = param.findSimilarStationInfos(vn);
if (!stations || !stations.length) {
cnt.hide();
return;
}
var times = _.map(stations, function (s) {
var time = stationData.sellTime[s.code];
if (!time)
return null;
time = utility.format24hTo12h(time);
return time ? { name: s.name, time: time.join("<br />") } : null;
});
if (!times || !times.length) {
cnt.hide();
return;
}
cnt.find("ul").html(selltipTpl(times));
cnt.show();
};
$("#from_city").change(showSellTime);
showSellTime.apply(document.getElementById("from_city"));
$("input[name='ticket_type']").click(function () {
sessMgr.currentProfile.studentTicket = this.value === "1";
sessMgr.save();
});
$("div.transfer-city-btn").click(function () {
var f = document.getElementById("from_city");
var t = document.getElementById("to_city");
var txt = f.value;
var code = f.dataset.code;
f.value = t.value;
f.dataset.code = t.dataset.code;
t.value = txt;
t.dataset.code = code;
$("#from_city, #to_city").change();
});
$("#btnQuery").click(function () {
autorefresh.stop();
media.stop();
var cp = sessMgr.currentProfile;
if (!cp.fromCode || !cp.toCode || !cp.depDate) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;
}
citySelector.cityui.addCityToRecent(cp.fromCode);
citySelector.cityui.addCityToRecent(cp.toCode);
ui_result.resetStatus();
//检查学生票是否对应
if (cp.studentTicket && cp.passengers && cp.passengers.length) {
if (_.some(cp.passengers, function (p) { return p.passenger_type !== '3'; })) {
mp.confirm("确认", "您选择的是学生票,但是添加的联系人并不全是学生,将无法提交订单,确定继续查票吗?", ui_result.load);
} else {
//ui_result.load();
autorefresh.start();
}
} else {
//ui_result.load();
autorefresh.start();
}
//track
port.track(param.trackTypes.QUERY_TICKET, [
cp.fromCode,
cp.fromText,
cp.toCode,
cp.toText,
cp.depDate,
cp.studentTicket + '',
(cp.selectedSeatType && cp.selectedSeatType.length) || 0,
(cp.selectedTrain && cp.selectedTrain.length) || 0,
(cp.passengers && cp.passengers.length) || 0,
(cp.dateloop && cp.dateloop.length) || 0,
cp.hideNoTicket ? 1 : 0,
cp.hideNotInListTrain ? 1 : 0,
cp.autoWaitToSell ? 1 : 0,
cp.tryBottomSeat ? 1 : 0,
cp.selectSeatFirst ? 1 : 0,
cp.autoSubmitEnabled ? 1 : 0
]);
});
sessMgr.on("sessionChanged", resetInterfaceByProfile);
sessMgr.on("currentProfileChanged", resetInterfaceByProfile);
//初始化状态
resetInterfaceByProfile();
})();
//系统级别错误捕捉
(function () {
document.addEventListener("networkOrCertificationError", function () {
//TODO UI
$.showModalDialog("无法访问12306可能是网络错误或证书错误请直接访问12306试试如果正常的话请回来刷新本页", {
image: "/images/cat.png",
buttons: [
{
text: "打开12306官网",
type: "primary",
callback: function () {
window.open("https://kyfw.12306.cn/otn/leftTicket/init");
return false;
}
}, {
text: "刷新重试",
callback: function () {
self.location.reload();
return false;
}
}
],
closeOnAction: false
});
});
})();
//聊天系统
//require("./chat/chatframe.js");
//统计报告
port.track(param.trackTypes.OPEN_PAGE_INDEX);
//后台触发更新
port.sendMessage({ action: "triggerUpdate" });
//服务器加速
require("./ui-dnsspeeding.js");
//自动查询
var lastAutoQueryKey;
var autoQuery = function () {
var cp = sessMgr.currentProfile;
if (!cp)
return;
if (cp.fromCode && cp.toCode && cp.depDate) {
var key = cp.fromCode + cp.toCode + cp.depDate + cp.studentTicket + (cp.trainTypes && cp.trainTypes.join());
if (key !== lastAutoQueryKey) {
lastAutoQueryKey = key;
ui_result.load();
}
}
};
sessMgr.on("save", function () {
autoQuery();
});
autoQuery();
//易到用车
require("../bd/ydcoupon.js");
require("../bd/orderfailbd.js");
//$("#passenger_editor").showModalDialog({
// title: "新增联系人",
// buttons: [
// {
// type: "primary",
// text: "确定",
// callback: function(e) {
// alert("ok!");
// e.hide();
// }
// }
// ]
//});
});