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"); var mp = require("./widget_message_popup.js"); var tsquery = require("./ui-train-stop.js"); var datebar = require("./widget_datebar.js"); var parser = require("../platform/parser.js"); var autorefresh = require("./ui-autorefresh.js"); var trainSuggest = require("../otn/trainstationsuggest.js"); var suggestionTemplate = $("#train_suggestion").doT(); var utility = require("../utility.js"); var port = require("../platform/extensionPort.js"); var media = require("../platform/media.js"); //引入过滤 require("../otn/trainfilter.js").init(); var TrainListObj = function () { var __ = this; EventObject.apply(this); var isSuggestTipped = false; this.renderResultList = function (data) { data = data || queryResult; //选择的席别 data.selectedSeats = {}; if (sessMgr.currentProfile && sessMgr.currentProfile.selectedSeatType) { _.each(sessMgr.currentProfile.selectedSeatType, function (c) { data.selectedSeats[c] = 1; }); } $("#result").html(tpl(data, { param: param, parser: parser, utility: utility })); }; this.resetStatus = function () { isSuggestTipped = false; trainSuggest.isSuggestLoopDisabled = false; $("#suggestion").hide(); }; this.clear = function () { $("#result").empty(); }; this.load = function (ui, from, fromText, to, toText, date, stu, resign, auto) { ui = ui === false ? false : true; from = from || sessMgr.currentProfile.fromCode; fromText = fromText || sessMgr.currentProfile.fromText; to = to || sessMgr.currentProfile.toCode; toText = toText || sessMgr.currentProfile.toText; date = date || sessMgr.currentProfile.depDate; stu = stu || sessMgr.currentProfile.studentTicket; resign = resign || sessMgr.currentProfile.resign || false; auto = auto || false; if (!from || !to || !date) { mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。"); return; } var extArg = Array.prototype.slice.call(arguments); __.fireEvent("onload", extArg); datebar.go(date, date); var tip = null; if (ui) { tip = new mp.MessagePopup("loading", "正在查询中..."); tip.show(); } ticketQuery .queryTicket(from, fromText, to, toText, date, stu, resign, false, false, auto) .done(function () { if (tip) { tip.setState("ok", "完成..."); tip.close(); } queryResult = this; __.renderResultList(); __.fireEvent("onloadsuccess", extArg); }).fail(function (msg) { tip.setState("error", msg || "查票失败..."); tip.delayClose(); __.fireEvent("onloadfailed", extArg); }).progress(function (msg) { if (tip) tip.setState("loading", msg); }); }; var getOriginalDepInfo = function (code) { if (!queryResult) return ""; var t = _.findWhere(queryResult.original, { code: code }); if (!t) return ""; return "" + t.from.name + "站" + "" + t.from.time + "发车"; }; var showSuggestion = function (data) { var sd = { available: _.filter(data, function (t) { return t.train && t.train.length; }), }; 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 })); 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); self.location.hash = '#suggestion'; //track port.track(param.trackTypes.QUERY_SUGGESTION, [sd.available.length, sd.suggest.length]); }; var init = function () { tsquery.init(); datebar.init(); trainSuggest.TSS.on("trainSuggestion", function (e, d) { trainSuggest.isSuggestLoopDisabled = false; showSuggestion(d); }); $("#suggestion > header> a").click(function () { trainSuggest.isSuggestLoopDisabled = true; $("#suggestion").hide(); }); datebar.on("requireChangeDate", function (e, d) { autorefresh.stop(); //请求切换时间 $("#dep_date").val(d).change(); sessMgr.save(); if (!sessMgr.currentProfile.fromCode || !sessMgr.currentProfile.toCode || !sessMgr.currentProfile.depDate) { mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。"); return; } __.load(); }); //监听订票请求 $(document).on("click", "a.ticket-block", function () { var id = this.dataset.traincode; var seatcode = this.dataset.seatcode; var train; var cp = sessMgr.currentProfile; var bySuggest = false; if (this.dataset.suggest) { train = trainSuggest.findTrain(this.dataset.sec); train.suggest = true; bySuggest = true; } else { train = _.findWhere(queryResult.original, { id: id }); } if (!train) return; var ticketCount = _.findWhere(train.tickets, { code: seatcode }).count; var pcount = Math.min(ticketCount, cp.passengers ? cp.passengers.length : 0); var pas = _.first(cp.passengers || [], pcount); seatcode = seatcode === "0" ? (train.ticketMap['1'] ? "1" : "O") : seatcode; pas.forEach(function (p) { p.seat = seatcode; }); if (cp.submitStuAsCommon && !cp.studentTicket) { pas.forEach(function (p) { if (p.passenger_type == "3") p.passenger_type = "1"; }); } train.byAuto = true; __.dispatchEvent("requireSubmitOrder", { train: train, seat: seatcode, passengers: pas }); //if (bySuggest) { // port.track(param.trackTypes.SUBMIT_ORDER_BY_SUGGESTIONI, [ // train.code, // train.from.name, // train.to.name, // train.date, // seatcode // ]); //} }); }; init(); return this; }; TrainListObj.prototype = Object.create(EventObject); TrainListObj.constructor = TrainListObj; module.exports = new TrainListObj(); });