define(function (require, exports, module) { var EO = require("../platform/EventObject.js"); var widget = require("./widget.js"); var sessMgr = require("../account/sessionMgr.js"); var param = require("../data.js"); var parser = require("../platform/parser.js"); var mp = require("./widget_message_popup.js"); //变量 var listTpl = $("section.float-passenger-selector-list script").doT(); var rowTpl = $("section.float-passenger-selector-selected script").doT(); var extTplData = { p: param }; var PassengerSelectionUI = function () { var that = this; var selectedPassenger = []; var allPassengers = []; var preloadPasList = null, curTrain = null, isStu = false, curSeat; EO.apply(this); this.show = function (passengers, train, seat, stu) { preloadPasList = passengers; curTrain = train; isStu = stu; curSeat = seat; widget.showFloatDialog($("#float-passenger-selector")); //加载联系人? var list = $("section.float-passenger-selector-list ul"); list.empty().addClass("loading"); $("#float-passenger-selector .float-passenger-selector-selected ul").empty(); selectedPassenger = []; sessMgr.getPassengers(function (paslist) { allPassengers = paslist; list.removeClass("loading"); list.html(listTpl(_.filter(paslist, function (p) { return !stu || p.passenger_type === '3'; }), extTplData)); }).fail(function (msg) { mp.showMessagePopup("error", "无法加载联系人:" + msg); list.removeClass("loading"); list.html("
  • 无法加载联系人:" + msg + "
  • "); }); }; this.hide = function () { }; this.filterPassenger = function () { var key = this.value; var list = $("#float-passenger-selector .float-passenger-selector-list li"); if (!key) { list.show(); } else { list.hide(); key = key.toLowerCase(); list.each(function () { var ds = this.dataset; if (ds.py.toLowerCase().indexOf(key) !== -1 || ds.name.toLowerCase().indexOf(key) !== -1 || ds.id.toLowerCase().indexOf(key) !== -1) $(this).show(); }); } }; Object.defineProperty(this, "selectedPassenger", { get: function () { return selectedPassenger; } }); //绑定事件-搜索 $("#float-passenger-selector .toolbar input:text").searchDelay().on("search", this.filterPassenger); //绑定事件-添加 $(document).on("change", "#float-passenger-selector .float-passenger-selector-list input:checkbox", function () { var isAdd = this.checked; var id = this.id; if (isAdd) { if (selectedPassenger.length >= 5) { mp.showMessagePopup("error", "联系人最多只能选择五个哦"); this.checked = false; return; } var p = _.findWhere(allPassengers, { key: id }); if (!p) return; var x = _.clone(p); selectedPassenger.push(x); //初始化席别和票种 x.ticketTypes = parser.getAvailableTicketType(x, isStu); x.seats = parser.getSeats(curTrain.tickets);; x.canAddChildren = x.passenger_type === "1"; $("#float-passenger-selector .float-passenger-selector-selected ul").append(rowTpl(x, extTplData)); } else { selectedPassenger = _.reject(selectedPassenger, function (e) { return e.key === id; }); $("#float-passenger-selector .float-passenger-selector-selected li[data-id='" + id + "']").remove(); } }); $(document).on("click", "#float-passenger-selector .float-passenger-selector-selected i.fa-times-circle", function () { //删除 var li = $(this).closest("li"); var id = li.attr("data-id"); li.remove(); //index var idx = li.parent().children().index(li[0]); selectedPassenger.splice(idx, 1); var chk = document.getElementById(id); chk && (chk.checked = false); }); $(document).on("click", "#float-passenger-selector .float-passenger-selector-selected a.add-child-ticket", function () { if (selectedPassenger.length >= 5) { mp.showMessagePopup("error", "联系人最多只能选择五个哦"); return; } var li = $(this).closest("li"); var id = li.attr("data-id"); var p = _.clone(_.findWhere(allPassengers, { key: id })); p.passenger_type = "2"; parser.processPassenger([p]); //index var idx = li.parent().children().index(li[0]); selectedPassenger.splice(idx, 0, p); p.ticketTypes = [{ id: 2, name: "儿童票" }]; p.seats = parser.getSeats(curTrain.tickets); p.canAddChildren = false; li.after(rowTpl(p, extTplData)); }); //确定按钮 $("#float-passenger-selector footer button.button-primary").click(function () { if (selectedPassenger.length === 0) { mp.showMessagePopup("error", "还没有选择乘客的说 :-("); return; } //绑定 var pas = $("section.float-passenger-selector-selected li"); selectedPassenger.forEach(function (e, i) { var li = pas.eq(i); e.seat = li.find("select:eq(0)").val(); e.passenger_type = li.find("select:eq(1)").val(); }); that.fireEvent("passengerSelected"); widget.hideFloatDialog($("#float-passenger-selector")); }); }; PassengerSelectionUI.prototype = Object.create(EO); PassengerSelectionUI.constructor = EO; return new PassengerSelectionUI(); });