Light12306/Web12306/js/ui/index.js

383 lines
11 KiB
JavaScript
Raw Normal View History

2014-06-20 20:55:14 +08:00
define(function (require) {
2014-05-05 19:34:47 +08:00
var param = require("../data.js");
var widget = require("./widget.js");
2014-05-29 19:41:38 +08:00
var sessMgr = require("../account/sessionMgr.js");
2014-07-04 20:57:57 +08:00
var datebar = require("./widget_datebar.js");
var parser = require("../platform/parser.js");
var media = require("../platform/media.js");
2014-07-31 21:30:48 +08:00
var mp = require("./widget_message_popup.js");
2014-08-05 20:54:33 +08:00
var stationData = require("../station/station_data.js");
2014-08-06 20:56:47 +08:00
var utility = require("../utility.js");
2014-08-08 20:46:37 +08:00
var port = require("../platform/extensionPort.js");
2014-05-05 19:34:47 +08:00
2014-08-26 21:29:58 +08:00
require("./widget_modalDialog.js");
2014-06-26 22:24:54 +08:00
//会话管理器事件
sessMgr.on("notValidPassengerFound", function () {
2014-08-30 01:32:27 +08:00
mp.showMessagePopup("warn", "您的账户中有未通过12306实名认证的联系人将不可为他们订票。");
$(".passenger-notverified").show();
2014-06-26 22:24:54 +08:00
});
2014-05-05 19:34:47 +08:00
//初始化日期
2014-08-19 23:29:14 +08:00
require("./widget_datedropdown.js");
2014-08-06 20:56:47 +08:00
//预售期提示
2014-08-13 00:14:00 +08:00
require("./widget_sell_notification.js");
2014-06-26 22:24:54 +08:00
//地区选择
2014-07-08 20:11:31 +08:00
var citySelector = require("./widget_cityselector.js");
citySelector.init("input.ui-cityselector");
2014-06-26 22:24:54 +08:00
//验证码
2014-06-12 21:36:05 +08:00
require("./widget_verifycode.js").init();
2014-05-05 19:34:47 +08:00
2014-06-26 22:24:54 +08:00
//登录
2014-05-16 20:10:45 +08:00
var ui_login = require("./ui-login.js");
2014-06-26 22:24:54 +08:00
//结果列表
var ui_result = require("./ui-trainlist.js");
2014-07-11 18:34:59 +08:00
//自动刷新呢
var autorefresh = require("./ui-autorefresh.js");
autorefresh.on("requestQueryTicket", function () {
2014-09-03 23:20:12 +08:00
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);
2014-07-11 18:34:59 +08:00
});
2014-06-26 22:24:54 +08:00
//提交订单
var uiOrderProcess = require("./ui-order-submit-process.js");
2014-07-08 20:11:31 +08:00
//查询参数
2014-08-13 00:14:00 +08:00
require("./ui-autosubmitform.js");
2014-07-08 20:11:31 +08:00
2014-07-04 20:57:57 +08:00
//模式管理
2014-08-13 00:14:00 +08:00
require("./ui-theme-manager.js");
2014-07-04 20:57:57 +08:00
2014-08-19 21:33:26 +08:00
//系统公告
require("./ui-sysnotice.js");
2014-07-11 18:34:59 +08:00
//用户配置和选项的加载以及保存
require("../platform/profileBinder.js");
require("../platform/optionBinder.js");
2014-06-26 22:24:54 +08:00
//订票列表交互
2014-07-29 21:19:06 +08:00
ui_result.on("requireSubmitOrder", function (e, d) {
autorefresh.stop();
2014-09-01 20:24:57 +08:00
uiOrderProcess.start(d.train, d.seat, sessMgr.currentProfile, d.passengers);
2014-07-29 21:19:06 +08:00
});
autorefresh.on("requireSubmitOrder", function (e, d) {
uiOrderProcess.start(d.data, d.seat, sessMgr.currentProfile, d.passengers);
});
2014-06-26 22:24:54 +08:00
2014-05-16 20:10:45 +08:00
2014-06-12 21:36:05 +08:00
//界面交互初始化
2014-06-20 20:55:14 +08:00
(function () {
2014-08-18 23:12:35 +08:00
$(".order-tips").html("今日可订票:" + utility.formatDate(param.minDate, "MM月dd日") + "" + utility.formatDate(param.maxDate, "MM月dd日") + "车票");
//自动加速关闭
$(".net-tips, .reset-btn").hide();
2014-06-20 20:55:14 +08:00
var resetInterfaceByProfile = function () {
var user = sessMgr.current;
2014-06-26 22:24:54 +08:00
if (!user) {
2014-06-20 20:55:14 +08:00
return;
2014-06-26 22:24:54 +08:00
}
2014-09-01 20:24:57 +08:00
var showMoreOpt = user.options.showMoreOpt !== undefined ? user.options.showMoreOpt : (user.options.showMoreOpt = param.moreOptDefault);
var div = $("div.options-param");
2014-07-25 22:28:51 +08:00
!showMoreOpt ? (div.hide(), $(".search-more-option").html("显示更多选项")) : (div.show(), $(".search-more-option").html("隐藏更多选项"));
2014-06-20 20:55:14 +08:00
var p = user.currentProfile;
$("#from_city").val(p.fromText).attr("data-code", p.fromCode);
2014-08-05 20:54:33 +08:00
showSellTime.call(document.getElementById("from_city"));
2014-06-20 20:55:14 +08:00
$("#to_city").val(p.toText).attr("data-code", p.toCode);
document.querySelector("input[name='ticket_type'][value='" + (p.studentTicket ? "1" : "0") + "']").checked = true;
2014-06-20 20:55:14 +08:00
2014-07-29 21:19:06 +08:00
//车次类型
var ptt = p.trainTypes || [];
2014-08-19 23:29:14 +08:00
$("ul.search-traintypes :checkbox:gt(0)").each(function () {
2014-07-29 21:19:06 +08:00
this.checked = !ptt.length || _.indexOf(ptt, this.value) != -1;
});
2014-08-19 23:29:14 +08:00
$("ul.search-traintypes :checkbox:eq(0)").prop("checked", $("ul.search-traintypes :checkbox:gt(0):not(:checked)").length == 0);
2014-07-29 21:19:06 +08:00
2014-07-04 20:57:57 +08:00
//当前日期
if (p.depDate) {
2014-08-06 20:56:47 +08:00
var d = utility.addDays(utility.toDate(p.depDate), 0);
var today = utility.addDays(new Date(), 0);
2014-07-04 20:57:57 +08:00
d = d < today ? today : d;
2014-08-06 20:56:47 +08:00
var datestr = utility.formatDate(d, "yyyy-MM-dd");
2014-07-04 20:57:57 +08:00
datebar.go(d, d);
$("#dep_date").val(datestr);
}
2014-06-20 20:55:14 +08:00
};
2014-08-19 23:29:14 +08:00
$("ul.search-traintypes :checkbox:gt(0)").change(function () {
sessMgr.currentProfile.trainTypes = $.makeArray($("ul.search-traintypes :checkbox:gt(0):checked").map(function () {
2014-07-29 21:19:06 +08:00
return this.value;
}));
2014-08-19 23:29:14 +08:00
$("ul.search-traintypes :checkbox:eq(0)").prop("checked", $("ul.search-traintypes :checkbox:gt(0):not(:checked)").length == 0);
2014-07-29 21:19:06 +08:00
sessMgr.save();
});
2014-08-19 23:29:14 +08:00
$("ul.search-traintypes :checkbox:eq(0)").change(function () {
var checkbox = $("ul.search-traintypes :checkbox:gt(0)");
2014-07-31 21:30:48 +08:00
if (checkbox.filter(":not(:checked)").length) {
checkbox.prop("checked", true);
} else {
checkbox.prop("checked", false);
}
checkbox.eq(0).change();
});
2014-06-12 21:36:05 +08:00
//登录失效
2014-06-20 20:55:14 +08:00
sessMgr.on("userForcedOut", function () {
mp.showMessagePopup("error", "12306取消了您的登录请重新登录");
2014-12-15 22:10:15 +08:00
ui_login.showLoginDialog();
2014-06-12 21:36:05 +08:00
});
2014-06-20 20:55:14 +08:00
$(".search-more-option").click(function () {
2014-06-13 19:52:22 +08:00
var div = $("div.options-param");
div.is(":visible") ? (div.hide(), $(this).html("显示更多选项")) : (div.show(), $(this).html("隐藏更多选项"));
2014-06-20 20:55:14 +08:00
sessMgr.current.options.showMoreOpt = div.is(":visible");
sessMgr.save();
2014-09-02 23:15:40 +08:00
//report
port.track(param.trackTypes.PROFILE_AUTO_MOREOPT, [sessMgr.current.options.showMoreOpt ? 1 : 0]);
2014-06-20 20:55:14 +08:00
});
$("#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();
2014-06-13 19:52:22 +08:00
});
2014-09-10 21:49:46 +08:00
var selltipTpl = $("#selltime_tip_tpl").doT();
2014-08-05 20:54:33 +08:00
var showSellTime = function () {
var v = this.dataset.code;
2014-09-10 21:49:46 +08:00
var vn = this.value;
2014-08-30 01:32:27 +08:00
var cnt = $("#selltime_tip");
2014-08-05 20:54:33 +08:00
if (!v) {
2014-08-30 01:32:27 +08:00
cnt.hide();
2014-08-05 20:54:33 +08:00
return;
}
2014-09-10 21:49:46 +08:00
//查找其它近似站
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);
2015-11-20 14:53:52 +08:00
return time ? {name: s.name, time: time.join("<br />")} : null;
2014-09-10 21:49:46 +08:00
});
if (!times || !times.length) {
cnt.hide();
return;
}
2015-03-13 19:25:08 +08:00
//去哪儿特价机票
var url = 'http://flight.qunar.com/site/lplist.htm?dcity=' + encodeURIComponent(this.value.replace(/[东南西北]+$/i, "")) + '&acity=&ddate=' + $("#dep_date").val() + '&from=tejia_fi&drange=15&ex_track=auto_54881424';
2015-11-20 14:53:52 +08:00
cnt.find("ul").html(selltipTpl({times: times, url: url}));
2014-08-30 01:32:27 +08:00
cnt.show();
2014-08-05 20:54:33 +08:00
};
$("#from_city").change(showSellTime);
showSellTime.apply(document.getElementById("from_city"));
2014-07-04 20:57:57 +08:00
$("input[name='ticket_type']").click(function () {
sessMgr.currentProfile.studentTicket = this.value === "1";
sessMgr.save();
});
$("div.transfer-city-btn").click(function () {
2014-07-11 18:34:59 +08:00
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();
2014-06-20 20:55:14 +08:00
});
$("#btnQuery").click(function () {
2014-07-11 18:34:59 +08:00
autorefresh.stop();
media.stop();
2014-09-02 21:41:17 +08:00
var cp = sessMgr.currentProfile;
if (!cp.fromCode || !cp.toCode || !cp.depDate) {
2014-07-11 18:34:59 +08:00
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;
}
2014-09-02 21:41:17 +08:00
citySelector.cityui.addCityToRecent(cp.fromCode);
citySelector.cityui.addCityToRecent(cp.toCode);
2014-07-31 21:30:48 +08:00
2014-08-30 01:32:27 +08:00
ui_result.resetStatus();
2014-07-31 21:30:48 +08:00
//检查学生票是否对应
2014-09-02 21:41:17 +08:00
if (cp.studentTicket && cp.passengers && cp.passengers.length) {
2015-11-20 14:53:52 +08:00
if (_.some(cp.passengers, function (p) {
return p.passenger_type !== '3';
})) {
2014-07-31 21:30:48 +08:00
mp.confirm("确认", "您选择的是学生票,但是添加的联系人并不全是学生,将无法提交订单,确定继续查票吗?", ui_result.load);
} else {
2014-12-04 23:31:06 +08:00
//ui_result.load();
2014-12-12 23:28:35 +08:00
autorefresh.start(true);
2014-07-31 21:30:48 +08:00
}
} else {
2014-12-04 23:31:06 +08:00
//ui_result.load();
2014-12-12 23:28:35 +08:00
autorefresh.start(true);
2014-07-31 21:30:48 +08:00
}
2014-08-08 20:46:37 +08:00
//track
2014-09-03 23:20:12 +08:00
port.track(param.trackTypes.QUERY_TICKET, [
cp.fromCode,
cp.fromText,
cp.toCode,
cp.toText,
cp.depDate,
cp.studentTicket + '',
(cp.selectedSeatType && cp.selectedSeatType.length) || 0,
2015-02-08 23:31:05 +08:00
(cp.selectedTrain && cp.selectedTrain.length) || 0,
2014-09-03 23:20:12 +08:00
(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
]);
2014-06-20 20:55:14 +08:00
});
sessMgr.on("sessionChanged", resetInterfaceByProfile);
2014-07-04 20:57:57 +08:00
sessMgr.on("currentProfileChanged", resetInterfaceByProfile);
2014-06-20 20:55:14 +08:00
//初始化状态
resetInterfaceByProfile();
2014-06-12 21:36:05 +08:00
})();
2014-07-01 20:07:44 +08:00
//系统级别错误捕捉
(function () {
2014-07-01 20:07:44 +08:00
document.addEventListener("networkOrCertificationError", function () {
//TODO UI
2014-09-01 20:24:57 +08:00
$.showModalDialog("无法访问12306可能是网络错误或证书错误请直接访问12306试试如果正常的话请回来刷新本页", {
image: "/images/cat.png",
buttons: [
2015-11-20 14:53:52 +08:00
{
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;
}
2014-09-01 20:24:57 +08:00
}
],
closeOnAction: false
});
2014-07-01 20:07:44 +08:00
});
2015-11-20 14:53:52 +08:00
document.addEventListener("ipBlockError", function () {
2015-07-01 16:18:25 +08:00
media.notify("IP被封警告", "检测到12306已封锁您的IP。如果频繁出现此问题请使用代理服务器或重启路由器 :-(");
});
2014-07-01 20:07:44 +08:00
})();
2014-08-08 20:46:37 +08:00
//聊天系统
2015-07-08 17:24:45 +08:00
require("./chat/chatframe.js");
2014-08-06 20:56:47 +08:00
2014-08-08 20:46:37 +08:00
//统计报告
port.track(param.trackTypes.OPEN_PAGE_INDEX);
2014-08-26 21:29:58 +08:00
2014-09-01 20:24:57 +08:00
//后台触发更新
2015-11-20 14:53:52 +08:00
port.sendMessage({action: "triggerUpdate"});
2014-09-01 20:24:57 +08:00
//服务器加速
require("./ui-dnsspeeding.js");
2015-11-20 14:53:52 +08:00
//速度表
require("./widget-queryspeedmeter.js");
2015-12-18 12:27:37 +08:00
//帮助信息
$(document).on("click", "#showHelp", function(){
widget.showFloatDialog($("#query-tip"));
});
2015-03-16 02:53:18 +08:00
//暂时屏蔽
2015-03-16 19:13:36 +08:00
//$.showModalDialog("由于12306的验证码调整请暂时使用官网购票。助手会回来的感谢您的关注。这是12306的进步请为12306点赞 :-)", {
// image: "/images/cat.png",
// buttons: [
// {
// text: "访问12306官网",
// type: "primary",
// callback: function () {
// window.open("https://kyfw.12306.cn/otn/leftTicket/init");
// return false;
// }
// }
// ],
// closeOnAction: false
//});
//新版验证
require("../vc/touchvc1.js");
2015-03-16 02:53:18 +08:00
2014-09-01 20:24:57 +08:00
2014-12-04 23:31:06 +08:00
//自动查询
var lastAutoQueryKey;
var autoQuery = function () {
var cp = sessMgr.currentProfile;
if (!cp)
return;
if (cp.fromCode && cp.toCode && cp.depDate) {
2014-12-12 23:28:35 +08:00
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());
2014-12-04 23:31:06 +08:00
if (key !== lastAutoQueryKey) {
lastAutoQueryKey = key;
ui_result.load();
}
}
};
sessMgr.on("save", function () {
autoQuery();
});
autoQuery();
2014-12-10 21:01:34 +08:00
//易到用车
2015-03-13 19:25:08 +08:00
//require("../bd/ydcoupon.js");
//require("../bd/orderfailbd.js");
2014-12-10 21:01:34 +08:00
2014-08-26 21:29:58 +08:00
//$("#passenger_editor").showModalDialog({
// title: "新增联系人",
// buttons: [
// {
// type: "primary",
// text: "确定",
// callback: function(e) {
// alert("ok!");
// e.hide();
// }
// }
// ]
//});
2015-07-03 21:04:37 +08:00
window.code = require("../platform/messageCoder.js");
2014-05-05 19:34:47 +08:00
});