Light12306/Web12306/js/ui/ui-trainlist.js

251 lines
7.5 KiB
JavaScript
Raw Normal View History

2014-06-26 22:24:54 +08:00
define(function (require, exports, module) {
var queryResult = null;
var param = require("../data.js");
var tpl = $("#train_table").doT();
var sessMgr = require("../account/sessionMgr.js");
var ticketQuery = require("./../otn/queryticket.js");
var EventObject = require("../platform/EventObject.js");
2014-07-01 20:07:44 +08:00
var mp = require("./widget_message_popup.js");
var tsquery = require("./ui-train-stop.js");
var datebar = require("./widget_datebar.js");
2014-07-04 20:57:57 +08:00
var parser = require("../platform/parser.js");
var autorefresh = require("./ui-autorefresh.js");
2014-07-31 21:30:48 +08:00
var trainSuggest = require("../otn/trainstationsuggest.js");
2014-08-30 01:32:27 +08:00
var suggestionTemplate = $("#train_suggestion").doT();
2014-08-06 20:56:47 +08:00
var utility = require("../utility.js");
2014-08-14 21:33:47 +08:00
var port = require("../platform/extensionPort.js");
var media = require("../platform/media.js");
2014-12-04 23:31:06 +08:00
var transmit = require("./ui-oncetrainsitquery.js");
2014-06-26 22:24:54 +08:00
2014-07-29 21:19:06 +08:00
//引入过滤
require("../otn/trainfilter.js").init();
2015-11-18 19:48:23 +08:00
//引入困难度计算
require("../platform/DifficultyCalculator.js");
2014-07-29 21:19:06 +08:00
2014-06-26 22:24:54 +08:00
var TrainListObj = function () {
var __ = this;
EventObject.apply(this);
2014-08-30 01:32:27 +08:00
var isSuggestTipped = false;
2014-06-26 22:24:54 +08:00
this.renderResultList = function (data) {
data = data || queryResult;
2014-08-30 01:32:27 +08:00
//选择的席别
data.selectedSeats = {};
if (sessMgr.currentProfile && sessMgr.currentProfile.selectedSeatType) {
_.each(sessMgr.currentProfile.selectedSeatType, function (c) {
data.selectedSeats[c] = 1;
});
}
2014-06-26 22:24:54 +08:00
$("#result").html(tpl(data, {
2014-07-04 20:57:57 +08:00
param: param,
2014-08-06 20:56:47 +08:00
parser: parser,
2014-12-04 23:31:06 +08:00
utility: utility,
cp: sessMgr.currentProfile
2014-06-26 22:24:54 +08:00
}));
};
2014-09-01 20:24:57 +08:00
this.resetStatus = function () {
2014-08-30 01:32:27 +08:00
isSuggestTipped = false;
trainSuggest.isSuggestLoopDisabled = false;
$("#suggestion").hide();
};
2014-09-01 20:24:57 +08:00
this.clear = function () {
2014-08-30 01:32:27 +08:00
$("#result").empty();
};
this.load = function (ui, from, fromText, to, toText, date, stu, resign, auto) {
ui = ui === false ? false : true;
2014-07-11 18:34:59 +08:00
from = from || sessMgr.currentProfile.fromCode;
2014-09-13 15:58:20 +08:00
fromText = fromText || sessMgr.currentProfile.fromText;
2014-07-11 18:34:59 +08:00
to = to || sessMgr.currentProfile.toCode;
2014-09-13 15:58:20 +08:00
toText = toText || sessMgr.currentProfile.toText;
2014-07-11 18:34:59 +08:00
date = date || sessMgr.currentProfile.depDate;
stu = stu || sessMgr.currentProfile.studentTicket;
2014-09-13 15:58:20 +08:00
resign = resign || sessMgr.currentProfile.resign || false;
auto = auto || false;
2014-09-03 23:20:12 +08:00
if (!from || !to || !date) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;
}
2014-12-18 23:03:04 +08:00
//自动查询不显示UI
if (auto)
ui = false;
2014-09-03 23:20:12 +08:00
var extArg = Array.prototype.slice.call(arguments);
__.fireEvent("onload", extArg);
datebar.go(date, date);
2014-07-01 20:07:44 +08:00
var tip = null;
if (ui) {
tip = new mp.MessagePopup("loading", "正在查询中...");
tip.show();
}
2014-06-26 22:24:54 +08:00
ticketQuery
.queryTicket(from, fromText, to, toText, date, stu, resign, false, false, auto)
2014-06-26 22:24:54 +08:00
.done(function () {
2014-07-01 20:07:44 +08:00
if (tip) {
tip.setState("ok", "完成...");
tip.close();
}
2014-06-26 22:24:54 +08:00
queryResult = this;
__.renderResultList();
__.fireEvent("onloadsuccess", extArg);
2014-09-10 21:49:46 +08:00
}).fail(function (msg) {
tip.setState("error", msg || "查票失败...");
2014-07-01 20:07:44 +08:00
tip.delayClose();
__.fireEvent("onloadfailed", extArg);
2014-09-11 22:19:33 +08:00
}).progress(function (msg) {
2015-03-13 19:25:08 +08:00
if (typeof (msg) === "string") {
if (tip)
tip.setState("loading", msg);
}else if (msg.action) {
if (msg.action === "requery") {
autorefresh.increaseQueryCount(1);
}
}
2014-06-26 22:24:54 +08:00
});
};
2014-08-30 01:32:27 +08:00
var getOriginalDepInfo = function (code) {
if (!queryResult)
return "";
var t = _.findWhere(queryResult.original, { code: code });
if (!t)
return "";
return "<span>" + t.from.name + "</span>站" + "<span>" + t.from.time + "</span>发车";
};
var showSuggestion = function (data) {
var sd = {
2015-11-24 19:44:22 +08:00
available: _.filter(data, function (t) { return t.train && t.train.length; })
2014-08-30 01:32:27 +08:00
};
sd.suggest = _.difference(data, sd.available);
if (!isSuggestTipped && sd.available.length) {
isSuggestTipped = true;
media.notify("查询到跨站票了", "订票助手已经为您刷到了可以预定的跨站票,推荐您关注!");
}
//选择的席别
sd.selectedSeats = {};
if (sessMgr.currentProfile && sessMgr.currentProfile.selectedSeatType) {
_.each(sessMgr.currentProfile.selectedSeatType, function (c) {
sd.selectedSeats[c] = 1;
});
}
$("#suggestion").show().find("div").html(suggestionTemplate(sd, {
param: param,
parser: parser,
utility: utility,
getOriginalDepInfo: getOriginalDepInfo
}));
2014-09-05 18:34:16 +08:00
var infoSpan = $("#suggestion > footer> span");
infoSpan.eq(0).html(sessMgr.currentProfile.fromText);
infoSpan.eq(1).html(sessMgr.currentProfile.toText);
infoSpan.eq(2).html(sessMgr.currentProfile.fromText);
2014-08-30 01:32:27 +08:00
self.location.hash = '#suggestion';
2014-09-02 21:41:17 +08:00
//track
port.track(param.trackTypes.QUERY_SUGGESTION, [sd.available.length, sd.suggest.length]);
2014-08-30 01:32:27 +08:00
};
2014-06-26 22:24:54 +08:00
2014-08-13 00:14:00 +08:00
var init = function () {
2014-07-01 20:07:44 +08:00
tsquery.init();
datebar.init();
2014-07-31 21:30:48 +08:00
trainSuggest.TSS.on("trainSuggestion", function (e, d) {
2014-08-30 01:32:27 +08:00
trainSuggest.isSuggestLoopDisabled = false;
showSuggestion(d);
2014-07-31 21:30:48 +08:00
});
2014-08-01 21:54:26 +08:00
$("#suggestion > header> a").click(function () {
2014-08-30 01:32:27 +08:00
trainSuggest.isSuggestLoopDisabled = true;
2014-07-31 21:30:48 +08:00
$("#suggestion").hide();
});
2014-07-04 20:57:57 +08:00
datebar.on("requireChangeDate", function (e, d) {
autorefresh.stop();
//请求切换时间
2014-07-04 20:57:57 +08:00
$("#dep_date").val(d).change();
sessMgr.save();
2014-09-02 21:41:17 +08:00
if (!sessMgr.currentProfile.fromCode || !sessMgr.currentProfile.toCode || !sessMgr.currentProfile.depDate) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;
}
2015-03-13 19:25:08 +08:00
//__.load();
});
2014-08-13 00:14:00 +08:00
//监听订票请求
2014-12-11 22:15:32 +08:00
$(document).on("click", ".ticket-block, .btn-ticket-block", function () {
2015-12-03 19:35:30 +08:00
if(this.getAttribute("disabled"))
return;
2014-08-13 00:14:00 +08:00
var id = this.dataset.traincode;
var seatcode = this.dataset.seatcode;
2014-08-30 01:32:27 +08:00
var train;
2014-09-01 22:09:51 +08:00
var cp = sessMgr.currentProfile;
2014-08-30 01:32:27 +08:00
if (this.dataset.suggest) {
train = trainSuggest.findTrain(this.dataset.sec);
2014-12-04 23:31:06 +08:00
train.suggest = 1;
} else if (this.dataset.transmit) {
train = transmit.findTrain(this.dataset.sec);
if (!train)
return;
train.suggest = 2;
2014-08-30 01:32:27 +08:00
} else {
train = _.findWhere(queryResult.original, { id: id });
}
2014-08-13 00:14:00 +08:00
if (!train)
return;
2014-12-05 23:32:41 +08:00
var ticketCount = _.clone(_.findWhere(train.tickets, { code: seatcode })).count;
2014-09-01 22:09:51 +08:00
var pcount = Math.min(ticketCount, cp.passengers ? cp.passengers.length : 0);
var pas = _.first(cp.passengers || [], pcount);
2015-03-13 19:25:08 +08:00
seatcode = seatcode === "0" ? param.getEmptySeatCode(train.tickets) : seatcode;
2014-09-01 20:24:57 +08:00
2014-12-11 22:15:32 +08:00
pas.forEach(function (p) { p.seat = seatcode; });
2014-09-01 22:09:51 +08:00
if (cp.submitStuAsCommon && !cp.studentTicket) {
2014-12-11 22:15:32 +08:00
pas.forEach(function (p) { if (p.passenger_type == "3") p.passenger_type = "1"; });
2014-09-01 22:09:51 +08:00
}
2014-09-03 23:20:12 +08:00
train.byAuto = true;
2014-08-13 00:14:00 +08:00
__.dispatchEvent("requireSubmitOrder", {
train: train,
2014-09-01 20:24:57 +08:00
seat: seatcode,
passengers: pas
2014-08-13 00:14:00 +08:00
});
2014-09-02 23:15:40 +08:00
2014-09-03 23:20:12 +08:00
//if (bySuggest) {
// port.track(param.trackTypes.SUBMIT_ORDER_BY_SUGGESTIONI, [
// train.code,
// train.from.name,
// train.to.name,
// train.date,
// seatcode
// ]);
2014-09-02 23:15:40 +08:00
2014-09-03 23:20:12 +08:00
//}
2014-12-04 23:31:06 +08:00
}).on("click", "#btn_start_transit", function () {
transmit.clearQueryResultCache();
transmit.forceTransit = true;
transmit.setQueryResult(queryResult);
2014-12-11 22:15:32 +08:00
//上报
var cp = sessMgr.currentProfile || {};
port.track(param.trackTypes.TRANSIT_MANUALLYREQUIRE, [cp.fromCode || "", cp.toCode || "", cp.depDate || ""]);
2014-08-13 00:14:00 +08:00
});
2014-06-26 22:24:54 +08:00
};
2014-08-13 00:14:00 +08:00
init();
2014-06-26 22:24:54 +08:00
return this;
};
TrainListObj.prototype = Object.create(EventObject);
TrainListObj.constructor = TrainListObj;
module.exports = new TrainListObj();
});