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();
});