/**
|
* 添加子表行
|
* @param subTabName
|
* @param rowData
|
*/
|
function addSubTabRow(subTabName, rowData) {
|
//获取对应的子表
|
var elementName = "#subtable\\|" + subTabName;
|
var subTab = $(elementName);
|
if (subTab.length = 0) {
|
return;
|
}
|
|
//获取模板列变量
|
var templateHtml = window["templateHtml_" + subTabName];
|
if (!templateHtml) {
|
return;
|
}
|
|
var newRow = $(templateHtml);
|
var index = $(elementName + " tr.datarow").length + 1;
|
|
//把行数据放到元素的数据中去
|
newRow.data("rowData", rowData);
|
|
//如果有序号字段,则生成序号
|
if (newRow.children("td.serial")) {
|
newRow.children("td.serial").html(index);
|
}
|
|
if (rowData) {
|
var props = Object.getOwnPropertyNames(rowData);
|
for (var i = 0; i < props.length; i++) {
|
var prop = props[i];
|
var elmName = "subtable|" + subTabName + "|" + prop;
|
var elms = $(newRow).find("[name='" + elmName + "']");
|
if (elms.length > 0) {
|
$(elms[0]).val(rowData[prop]);
|
}
|
|
//查找是否有标签
|
var elmLabelName = "subtable|" + subTabName + "|" + prop + "|label";
|
var elmLabels = $(newRow).find("[name='" + elmLabelName + "']");
|
if (elmLabels.length > 0) {
|
$(elmLabels[0]).html(rowData[prop]);
|
}
|
}
|
}
|
|
//将新行添加到子表中
|
newRow.appendTo(elementName + " tbody");
|
|
//解析新添加的行
|
$.parser.parse(elementName);
|
}
|
|
function updateSubTabRowDatas(subTabName, newRowDatas, keyField) {
|
//读取原有的rowDatas
|
var rowDatas = getSubTabRowDatas(subTabName);
|
|
//循环新数据,看是否需要添加进来
|
for (var index in newRowDatas) {
|
var isExists = false;
|
for (var n = 0; n < rowDatas.length; n++) {
|
if (rowDatas[n] && rowDatas[n][keyField] != "" && rowDatas[n][keyField] == newRowDatas[index][keyField]) {
|
isExists = true;
|
break;
|
}
|
}
|
|
if (!isExists) {
|
addSubTabRow(subTabName, newRowDatas[index]);
|
}
|
}
|
|
//循环老数据,看是否需要删除
|
for (var n = rowDatas.length - 1; n >= 0; n--) {
|
var isExists = false;
|
if (rowDatas[n]) {
|
for (var index in newRowDatas) {
|
if (rowDatas[n][keyField] != "" && rowDatas[n][keyField] == newRowDatas[index][keyField]) {
|
isExists = true;
|
break;
|
}
|
}
|
}
|
|
if (!isExists) {
|
removeSubTabRowByIndex(subTabName, n);
|
}
|
}
|
}
|
|
//获取子表数据行的原始数据
|
function getSubTabRowDatas(subTabName) {
|
var rowDatas = [];
|
|
//获取对应的子表
|
var elementName = "#subtable\\|" + subTabName;
|
var subTab = $(elementName);
|
if (subTab.length = 0) {
|
return rowDatas;
|
}
|
|
var trs = $(elementName + " tr.datarow");
|
for (var i = 0; i < trs.length; i++) {
|
var tr = trs[i];
|
var rowData = $(tr).data("rowData");
|
|
//如果没有数据,则从字段中去读取
|
if (!rowData) {
|
var inputs = $(tr).find("input");
|
if (inputs.length > 0) {
|
rowData = new Object();
|
for (var n = 0; n < inputs.length; n++) {
|
var input = inputs[n];
|
|
var inputName = $(input).attr("name");
|
if (inputName) {
|
var nameArr = inputName.split("|");
|
if (nameArr.length == 3) {
|
rowData[nameArr[2]] = $(input).val();
|
}
|
}
|
}
|
}
|
}
|
|
rowDatas.push(rowData);
|
}
|
|
return rowDatas;
|
}
|
|
function removeSubTabRowByIndex(subTabName, index) {
|
//获取对应的子表
|
var elementName = "#subtable\\|" + subTabName;
|
|
var tr = $(elementName + " tr.datarow:eq(" + index + ")");
|
|
if (tr.length > 0) {
|
removeSubTabRow(tr[0]);
|
}
|
}
|
|
/**
|
* 删除子表行
|
* @param obj
|
*/
|
function removeSubTabRow(obj) {
|
var tr = $(obj).closest("tr");
|
var table = $(obj).closest("table");
|
if (tr.length == 0 && table.length == 0) {
|
return;
|
}
|
|
//判断是否有ID,有ID则说明在数据库中,需要添加到待删除列表
|
var tableIdName = $(table).attr("id");
|
var idElemName = tableIdName + "|id";
|
var idElem = $(tr).find("[name='" + idElemName + "']");
|
if (idElem.length > 0) {
|
id = $(idElem[0]).val();
|
if (id != "") {
|
var waitDeleteIdsElem = $("[name='" + tableIdName + "|waitDeleteIds'");
|
if (waitDeleteIdsElem.length > 0) {
|
var waitDeleteIds = $(waitDeleteIdsElem[0]).val();
|
if (waitDeleteIds != "") {
|
waitDeleteIds += ",";
|
}
|
|
waitDeleteIds += id;
|
$(waitDeleteIdsElem[0]).val(waitDeleteIds);
|
}
|
}
|
}
|
|
//删除行
|
$(tr).remove();
|
|
//如果有序号行,则重新生成序号
|
var serialCols = $(table).find("td.serial");
|
if (serialCols.length > 0) {
|
$(serialCols).each(function (index, val) {
|
$(val).html(index + 1);
|
});
|
}
|
}
|
|
/**
|
* 处理表单数据中的子表数据(将子表数据转换为对象)
|
* @param formData
|
*/
|
function dealSubTabData(formData) {
|
var propertys = Object.getOwnPropertyNames(formData);
|
for (var i = 0, len = propertys.length; i < len; i++) {
|
var prop = propertys[i];
|
if (prop.indexOf("subtable|") == 0) {
|
|
var parts = prop.split('|');
|
if (parts.length == 3) {
|
var subTabName = parts[1];
|
var fieldName = parts[2];
|
|
if (!formData.hasOwnProperty("subTabItems")) {
|
formData.subTabItems = new Object();
|
}
|
|
if (!formData.subTabItems.hasOwnProperty(subTabName)) {
|
formData.subTabItems[subTabName] = new Object();
|
formData.subTabItems[subTabName].items = new Array();
|
formData.subTabItems[subTabName].waitDeleteIds = "";
|
}
|
|
if (fieldName == "waitDeleteIds") {
|
formData.subTabItems[subTabName].waitDeleteIds = formData[prop];
|
} else {
|
if (Array.isArray(formData[prop])) {
|
for (var j = 0, n = formData[prop].length; j < n; j++) {
|
if (!formData.subTabItems[subTabName].items[j]) {
|
formData.subTabItems[subTabName].items[j] = new Object();
|
}
|
|
formData.subTabItems[subTabName].items[j][fieldName] = formData[prop][j];
|
}
|
} else {
|
if (!formData.subTabItems[subTabName].items[0]) {
|
formData.subTabItems[subTabName].items[0] = new Object();
|
}
|
|
formData.subTabItems[subTabName].items[0][fieldName] = formData[prop];
|
}
|
}
|
}
|
|
delete formData[prop];
|
}
|
}
|
|
//清理所有字段都为空的数据
|
if (formData.hasOwnProperty("subTabItems")) {
|
var subTabNames = Object.getOwnPropertyNames(formData.subTabItems);
|
for (var n = 0, len = subTabNames.length; n < len; n++) {
|
var subTabName = subTabNames[n];
|
|
//倒序清理,因为要删除数组元素
|
for (var p = formData.subTabItems[subTabName].items.length - 1; p >= 0; p--) {
|
var item = formData.subTabItems[subTabName].items[p];
|
var isEmpty = true;
|
|
var propertys = Object.getOwnPropertyNames(item);
|
for (j = 0; j < propertys.length; j++) {
|
var prop = propertys[j];
|
|
//如果有一个属性不为空,则跳出
|
if (item[prop] && item[prop] != "") {
|
isEmpty = false;
|
break;
|
}
|
}
|
|
//如果都为空,则删除该条数据
|
if (isEmpty) {
|
delete formData.subTabItems[subTabName].items.splice(p, 1);
|
}
|
}
|
|
//如果该子表没有有效数据,且没有删除的数据,则把该子表信息一起删除
|
if (formData.subTabItems[subTabName].items.length == 0 && formData.subTabItems[subTabName].waitDeleteIds == "") {
|
delete formData.subTabItems[subTabName];
|
}
|
}
|
}
|
}
|