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, to, date, stu) { ui = ui === undefined ? true : ui; from = from || sessMgr.currentProfile.fromCode; to = to || sessMgr.currentProfile.toCode; date = date || sessMgr.currentProfile.depDate; stu = stu || sessMgr.currentProfile.studentTicket; 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, to, date, stu) .done(function () { if (tip) { tip.setState("ok", "完成..."); tip.close(); } queryResult = this; __.renderResultList(); __.fireEvent("onloadsuccess", extArg); }).fail(function () { tip.setState("error", "查票失败..."); tip.delayClose(); __.fireEvent("onloadfailed", extArg); }); }; 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 })); self.location.hash = '#suggestion'; }; var init = function () { tsquery.init(); datebar.init(); trainSuggest.TSS.on("trainSuggestion", function (e, d) { trainSuggest.isSuggestLoopDisabled = false; showSuggestion(d); //track port.track(param.trackTypes.QUERY_SUGGESTION); }); $("#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(); __.load(); }); //监听订票请求 $(document).on("click", "a.ticket-block", function () { var id = this.dataset.traincode; var seatcode = this.dataset.seatcode; var train; if (this.dataset.suggest) { train = trainSuggest.findTrain(this.dataset.sec); } else { train = _.findWhere(queryResult.original, { id: id }); } if (!train) return; __.dispatchEvent("requireSubmitOrder", { train: train, seat: seatcode }); }); }; init(); return this; }; TrainListObj.prototype = Object.create(EventObject); TrainListObj.constructor = TrainListObj; module.exports = new TrainListObj(); });