345 lines
10 KiB
JavaScript
345 lines
10 KiB
JavaScript
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取消了您的登录,请重新登录");
|
||
|
||
ui_login.showLoginDialog();
|
||
});
|
||
$(".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(true);
|
||
}
|
||
} else {
|
||
//ui_result.load();
|
||
autorefresh.start(true);
|
||
}
|
||
|
||
//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()) + (cp.selectedSeatType && cp.selectedSeatType.join()) + (cp.selectedTrain && cp.selectedTrain.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();
|
||
// }
|
||
// }
|
||
// ]
|
||
//});
|
||
});
|