171 lines
5.2 KiB
JavaScript
171 lines
5.2 KiB
JavaScript
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("<li>无法加载联系人:" + msg + "</li>");
|
|
});
|
|
};
|
|
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";
|
|
if (curSeat) {
|
|
var s = _.findWhere(x.seats, { code: curSeat });
|
|
if (s)
|
|
s.selected = true;
|
|
}
|
|
|
|
$("#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();
|
|
});
|