Light12306/Web12306/js/ui/widget_sell_notification.js
2014-09-02 23:15:40 +08:00

230 lines
6.9 KiB
JavaScript

define(function (require, exports, module) {
var sessMgr = require("../account/sessionMgr.js");
var data = require("../data.js");
var cp = sessMgr.currentProfile;
var container = $("#book_sell_tip");
var utility = require("../utility.js");
var stationData = require("../station/station_data.js");
var lastCheckKey = null;
var mp = require("./widget_message_popup.js");
var query = require("../otn/queryticket.js");
var port = require("../platform/extensionPort.js");
require("./widget_modalDialog.js");
var checkTime = function () {
cp = sessMgr.currentProfile;
if (!cp) {
container.hide();
return;
}
var time = cp.depDate;
var code = cp.fromCode;
if (!time || !code) {
container.hide();
return;
}
if (lastCheckKey === time + code)
return;
container.hide();
lastCheckKey = time + code;
var days = utility.getDaysDifference(new Date(), time);
if (days <= data.maxSellDays)
return; //预售期内
if (cp.studentTicket && data.isStudentTicketEnabled(time))
return; //学生票
//起售期
var bs = utility.addDays(time, -data.maxSellDays);
var sellTimes = stationData.sellTime[code] || "----";
var times = container.find("time");
times.filter(":eq(0)").html(utility.formatDate(time, "MM月dd日"));
times.filter(":eq(1)").html(utility.formatDate(bs, "MM月dd日"));
times.filter(":eq(2)").html(utility.format24hTo12h(sellTimes));
container.find("span:eq(0)").html(cp.fromText + "站");
container[0].dataset.sellday = bs.getTime();
container[0].dataset.timeset = sellTimes;
container.show();
$("#result").empty();
};
var initShowAlarmUi = function () {
if (!sessMgr.currentProfile.fromCode || !sessMgr.currentProfile.toCode || !sessMgr.currentProfile.depDate) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;
}
var tip = new mp.MessagePopup("loading", "正在查询中,请稍等...");
tip.show();
query.queryTicket(sessMgr.currentProfile.fromCode, sessMgr.currentProfile.toCode, utility.formatDate(data.maxDate, 'yyyy-MM-dd'), sessMgr.currentProfile.studentTicket, true)
.done(function () {
tip.setState("ok", "查询成功!");
tip.close();
showAlarmSetUi(this);
}).fail(function () {
tip.setState("error", "查询失败,请重试");
});
};
var parseSellTime = function (point) {
point = point.split('|')[0];
var args = /0?(\d+):0?(\d+)/.exec(point);
return parseInt(args[2]) * 60 * 1000 + parseInt(args[1]) * 3600 * 1000;
};
var confirmAlarm = function () {
var baseTime = new Date(parseInt(container[0].dataset.sellday));
var sellTime = parseSellTime(container[0].dataset.timeset);
baseTime = utility.addDays(utility.trimToDay(new Date()), 1);
var tasks = [];
var p = sessMgr.currentProfile;
var taskGroup = utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "起售提醒";
var taskdata = _.pick(p, "fromText", "fromCode", "toCode", "toText", "depDate");
//当天
tasks.push(
{
time: baseTime.getTime(),
text: "今天起售" + utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "车票 ,请留意哦!",
group: taskGroup,
data: taskdata
}
);
var assignTimeGroup = function (timepoint, grouptype) {
//提前三十分钟提示一次
tasks.push(
{
time: timepoint - 30 * 60 * 1000,
text: "三十分钟后起售" + utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "的" + grouptype + "车票 ,请留意哦!",
group: taskGroup,
data: taskdata
}
);
//提示十五分钟提示一次
tasks.push(
{
time: timepoint - 15 * 60 * 1000,
text: "十五分钟后起售" + utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "的" + grouptype + "车票 ,请留意哦!",
group: taskGroup,
data: taskdata
}
);
//提示五分钟提示一次
tasks.push(
{
time: timepoint - 5 * 60 * 1000,
text: "五分钟后起售" + utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "的" + grouptype + "车票 ,请留意哦!",
group: taskGroup,
data: taskdata
}
);
}
var args = [0, 0, 0];
if ($("#selltip_selection :checkbox:eq(2)").is(":checked:visible")) {
args[0] = 1;
//动车
assignTimeGroup(baseTime.getTime() + 11 * 60 * 60 * 1000, "动车/城铁");
}
if ($("#selltip_selection :checkbox:eq(1)").is(":checked:visible")) {
args[1] = 1;
//高铁
assignTimeGroup(baseTime.getTime() + 14 * 60 * 60 * 1000, "高铁");
}
if ($("#selltip_selection :checkbox:eq(3)").is(":checked:visible")) {
args[2] = 1;
//普通车次
assignTimeGroup(baseTime.getTime() + sellTime, "普通车次");
}
port.sendMessage({ action: "setAlarmTask", detail: tasks });
port.track(data.trackTypes.OPEN_SELL_NOTIFICATION, args);
return true;
};
var showAlarmSetUi = function (result) {
var hasDc = 0, hasG = 0, hasC = 0, total = 0;
if (!result.original.length) {
//没有车次
mp.alert("没有查到车次喔!");
return;
}
_.each(result.original, function (t) {
if (t.code[0] === 'D' || t.code[0] === 'C')
hasDc++;
else if (t.code[0] === 'G')
hasG++;
else hasC++;
total++;
});
var p = sessMgr.currentProfile;
var date = new Date(parseInt(container[0].dataset.sellday));
var dlg = $("#selltip_selection");
dlg.find("span:eq(0)").html(total);
dlg.find("span:eq(1)").html(hasG);
dlg.find("span:eq(2)").html(hasDc);
dlg.find("span:eq(3)").html(hasC);
dlg.find("time").html(utility.format24hTo12h(container[0].dataset.timeset));
dlg.find("li").show();
if (!hasG)
dlg.find("li:eq(1)").hide();
if (!hasDc)
dlg.find("li:eq(2)").hide();
if (!hasC)
dlg.find("li:eq(3)").hide();
dlg.find(":checkbox").prop("checked", true);
dlg.showModalDialog({
title: utility.formatDate(p.depDate, 'MM月dd日') + p.fromText + "到" + p.toText + "车票 " + utility.formatDate(date, 'MM月dd日') + "起售",
buttons: [
{
text: "订阅提醒",
callback: function (e) {
if (confirmAlarm()) {
mp.showMessagePopup("ok", "提醒设置成功!");
e.hide();
}
},
type: "primary"
}
]
});
port.track(data.trackTypes.SHOW_NOTIFICATION_SELECT);
};
var init = function () {
sessMgr.on("save", function () {
checkTime();
});
if (cp)
checkTime();
container.find(">header>a").click(function () {
container.hide();
});
container.find(".act-openalarm").click(function () {
initShowAlarmUi();
});
$("#selltip_selection :checkbox:eq(0)").change(function () {
$("#selltip_selection :checkbox:gt(0)").prop("checked", this.checked);
});
$("#selltip_selection :checkbox:gt(0)").change(function () {
$("#selltip_selection :checkbox:eq(0)").prop("checked", !$("#selltip_selection li:visible :checkbox:gt(0):not(:checked)").length);
});
};
init();
return {
check: checkTime
};
});