You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

420 lines
18 KiB
Plaintext

9 months ago
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link href="../Scripts/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="../Scripts/bootstrap/css/TableExp/bootstrap-table-expandable.css" rel="stylesheet" type="text/css" />
<script src="../Scripts/bootstrap/js/jquery.min.js" type="text/javascript"></script>
<script src="../Scripts/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="../Scripts/config.js" type="text/javascript"></script>
<script src="../Comm/Gener.js" type="text/javascript"></script>
<script src="../Scripts/QueryString.js" type="text/javascript"></script>
<script type="text/javascript">
var mainData = null;
//页面启动函数.
$(function () {
var ensName = GetQueryString("EnsName");
//加载JS文件
try {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = "../../DataUser/JSLibData/" + ensName + ".js";
var tmp = document.getElementsByTagName('script')[0];
tmp.parentNode.insertBefore(s, tmp);
}
catch (err) {
}
InitMainTable();
});
var sys_MapDtl;
var dtlCount = 0;
//生成主表数据
function InitMainTable() {
var isReadonly = getQueryString("IsReadonly");
//获得mapdtl实体的基本信息.
var hand = new HttpHandler("BP.WF.HttpHandler.WF_CCForm");
hand.AddUrlData();
mainData = hand.DoMethodReturnJSON("DtlCard_Init");
//主表数据,用于变量替换.
var mainTable = mainData["DTDtls"]; //主表数据.
sys_MapDtl = mainData["Main"][0]; //从表描述.
var sys_mapAttrs = mainData["MapAttrs"]; //从表字段.
var mapDtls = mainData["MapDtls"]; //从表的从表集合.
dtlCount = mainTable.length;
$('#dt_CardPanel').html(''); //清空表格数据
//表头
var thread = $('<thead></thead>');
var threadTr = $('<tr></tr>');
var columnCount = 2;
var headTHs = [];
var tableMinWidth = 0;
var th = $("<th></th>");
var rowShowModel = sys_MapDtl.EditModel;
//有新增权限,添加按钮
if (sys_MapDtl.IsInsert == 1 && sys_MapDtl.IsReadonly == "0" && isReadonly != "1") {
th = $("<th><img src='../Img/Btn/Add.gif' style='cursor: pointer;' name='insertBtn' onclick='insertRow(" + rowShowModel + ")' /></th>");
}
th.css('width', '30px');
threadTr.append(th);
//生成列名
$.each(sys_mapAttrs, function (i, mapAttrObj) {
th = $('<th></th>');
th.text(mapAttrObj.Name);
th.data(mapAttrObj);
th.css('width', mapAttrObj.UIWidth);
th.data().colname = mapAttrObj.KeyOfEn;
if (mapAttrObj.UIVisible == 1) {
columnCount++;
tableMinWidth += mapAttrObj.UIWidth;
headTHs.push(th);
threadTr.append(th);
}
});
//添加列名行到Head
thread.append(threadTr);
$('#dt_CardPanel').append(thread);
//数据行
var tbody = $('<tbody></tbody>');
$.each(mainTable, function (i, dataObj) {
//主表数据
var tbodyTr = $('<tr class="tbodyTr"></tr>');
$.each(headTHs, function (i, th) {
var data = $(th).data();
var columName = data.colname;
if (data.LGType == "1" || data.LGType == "2") {
columName = columName + "Text";
}
var text = dataObj[columName];
var td = $('<td></td>');
td.data(dataObj);
td.text(text);
tbodyTr.append(td);
});
//添加操作列,删除、编辑
var optionTD = $("<td style='width:80px;'></td>");
if (sys_MapDtl.IsUpdate == 1) {
var optionEdit = $("<img src='../Img/Btn/Edit.gif' onclick='updateRow(" + dataObj.OID + ", " + rowShowModel + ")' class='updateRow' titile='修改' style='cursor:pointer;'/>");
optionTD.append(optionEdit);
optionTD.append("&nbsp;&nbsp;");
}
if (sys_MapDtl.IsDelete == 1) {
var optionDelete = $("<img src='../Img/Btn/Delete.png' onclick='deleteRow(" + dataObj.OID + ")' class='delRow' titile='删除' style='cursor:pointer;'/>");
optionTD.append(optionDelete);
}
if (sys_MapDtl.IsReadonly == "0" && isReadonly != "1")
tbodyTr.append(optionTD);
//点击行展开行后的内容
var tbodyExpTr = $('<tr></tr>');
var tbodyExpTd = $('<td colspan=' + columnCount + ' align="center"></td>');
//加载子表
var childTable = ChildDtls(mapDtls, tbodyExpTd, dataObj.OID);
tbodyExpTr.append(childTable);
//添加两条数据行tbodyTr 父级数据tbodyExpTr 子级内容
tbody.append(tbodyTr);
tbody.append(tbodyExpTr);
});
//小计配置规则
if (typeof sys_MapDtl.ColAutoExp != "undefined" && sys_MapDtl.ColAutoExp != "" && mainTable.length > 0) {
//创建统计行
var statisticTr = addStatisticsRow(sys_MapDtl, headTHs, mainTable, false);
if (statisticTr) {
//添加统计行数据
tbody.append(statisticTr);
}
}
//表格生成完成
$('#dt_CardPanel').append(tbody);
try {
//表格宽度计算
if (sys_MapDtl.FrmW < tableMinWidth) {
$('#dt_CardPanel').css("width", tableMinWidth + "px");
$('#dt_CardPanel').css("max-width", tableMinWidth + "px");
}
//加载JS文件
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = "../Scripts/bootstrap/js/bootstrap-table-expandable.js";
var tmp = document.getElementsByTagName('script')[0];
tmp.parentNode.insertBefore(s, tmp);
}
catch (err) {
}
}
//创建明细表
function ChildDtls(mapDtls, parentTDObj, RefPK) {
if (mapDtls.length > 0) {
$.each(mapDtls, function (i, mapDtl) {
var mapAttrs = mainData[mapDtl.No];
var table = $('<table class="table" style="width:95%;background-color:White;"></table>');
//表头
var thread = $('<thead></thead>');
var threadTr = $('<tr></tr>');
var columnCount = 0;
var headTHs = [];
//表格列头
$.each(mapAttrs, function (i, mapAttrObj) {
var th = $('<th></th>');
th.text(mapAttrObj.Name);
th.data(mapAttrObj);
th.css('width', mapAttrObj.UIWidth);
th.data().colname = mapAttrObj.KeyOfEn;
if (mapAttrObj.UIVisible == 1) {
columnCount++;
headTHs.push(th);
threadTr.append(th);
}
});
thread.append(threadTr);
table.append(thread);
//表格数据
//获得mapdtl实体的基本信息.
var hand = new HttpHandler("BP.WF.HttpHandler.WF_CCForm");
hand.AddPara("EnsName", mapDtl.No);
hand.AddPara("RefPKVal", RefPK);
var dtlDatas = hand.DoMethodReturnJSON("DtlCard_Init_Dtl");
var dtlData = dtlDatas["DTDtls"];
//数据行
var tbody = $('<tbody></tbody>');
if (dtlData.length > 0) {
$.each(dtlData, function (i, dataObj) {
//表数据
var tbodyTr = $('<tr></tr>');
$.each(headTHs, function (i, th) {
var data = $(th).data();
var columName = data.colname;
if (data.LGType == "1" || data.LGType == "2") {
columName = columName + "Text";
}
var text = dataObj[columName];
var td = $('<td></td>');
td.data(dataObj);
td.text(text);
tbodyTr.append(td);
});
tbody.append(tbodyTr);
});
} else {
var tbodyTr = $('<tr><td colspan=' + columnCount + '>无数据</td></tr>');
tbody.append(tbodyTr);
}
//小计配置规则
if (typeof mapDtl.ColAutoExp != "undefined" && mapDtl.ColAutoExp != "" && dtlData.length > 0) {
//创建统计行
var statisticTr = addStatisticsRow(mapDtl, headTHs, dtlData, true);
if (statisticTr) {
//添加统计行数据
tbody.append(statisticTr);
}
}
table.append(tbody);
parentTDObj.append(table);
parentTDObj.append("<br/>");
});
}
return parentTDObj;
}
/// 生成统计行
/// mapDtl: 明细表描述信息
/// headHTs: 表格显示列头
/// DTDtls: 明细表数据
function addStatisticsRow(mapDtl, headHTs, DTDtls, isSub) {
var columnExp = [];
// 解析统计规则字符串
$.each(mapDtl.ColAutoExp.split("@"), function (i, e) {
if (e.indexOf(":") != -1) {
var sp = e.split(":");
columnExp.push({
"KeyOfEn": sp[0], // 字段
"exp": sp[1] // 表达式
});
}
});
// 统计行
var statisticsRow = $("<tr id='dtl_Sum'></tr>");
statisticsRow.data().customRowType = "statistics";
if (isSub == false) {
statisticsRow.append("<td></td>");
}
// 遍历表头
$.each(headHTs, function (i, th) {
// 根据表头的colname与待统计列的KeyOfEn对比
var matchesColumn = $.grep(columnExp, function (val) {
return val.KeyOfEn == $(th).data().colname;
});
// 如果是统计列
if (matchesColumn.length == 1) {
var keyOfEn = matchesColumn[0]["KeyOfEn"];
var exp = matchesColumn[0]["exp"];
var figureNum = 0;
if (exp == "Sum") { // 和
// 遍历数据
$.each(DTDtls, function (i, dataObj) {
var ival = parseFloat(dataObj[keyOfEn]);
if (!isNaN(ival)) {
figureNum += ival;
}
});
} else if (exp == "Avg") { // 平均数
var sum = 0;
var count = 0;
$.each(DTDtls, function (i, dataObj) {
var ival = parseFloat(dataObj[keyOfEn]);
if (!isNaN(ival)) {
sum += ival;
count++;
}
});
if (count > 0) {
figureNum = sum / count;
var strDecimal = figureNum.toString();
var decimalIndex = strDecimal.indexOf('.');
if (decimalIndex >= 0) {
var decimalPart = strDecimal.substring(decimalIndex + 1, strDecimal.length);
//小数位太多进行舍去
if (decimalPart.length > 4) {
figureNum = Math.round(figureNum * 10000) / 10000;
}
}
}
} else if (exp == "Max") { // 最大
var max = null;
$.each(DTDtls, function (i, dataObj) {
var ival = parseFloat(dataObj[keyOfEn]);
if (!isNaN(ival)) {
if (max == null) {
max = ival;
} else if (ival > max) {
max = ival;
}
}
});
figureNum = max;
} else if (exp == "Min") { // 最小
var min = null;
$.each(DTDtls, function (i, dataObj) {
var ival = parseFloat(dataObj[keyOfEn]);
if (!isNaN(ival)) {
if (min == null) {
min = ival;
} else if (ival < min) {
min = ival;
}
}
});
figureNum = min;
}
var td = $("<td></td>");
td.text(figureNum);
statisticsRow.append(td);
} else {
// 非统计列直接赋空<td></td>
statisticsRow.append("<td></td>");
}
});
//主表需要补充一列操作列
if (isSub == false) {
statisticsRow.append("<td></td>");
}
//返回统计行
return statisticsRow;
}
//插入行.
function insertRow(EditModel) {
//判断插入行的模式 =0行模式. 1=傻瓜表单卡片模式 2=自由表单卡片模式.
if (EditModel != 0 && window.parent) {
var ensName = GetQueryString("EnsName");
var refPKVal = GetQueryString("RefPKVal");
var FK_MapData = GetQueryString("FK_MapData");
var FID = GetQueryString("FID");
var FK_Node = GetQueryString("FK_Node");
window.parent.DtlFrm(ensName, refPKVal, '0', EditModel, InitMainTable, FK_MapData, FK_Node, FID, false);
return;
}
}
//编辑行
function updateRow(OID, EditModel) {
if (window.parent) {
var ensName = GetQueryString("EnsName");
var refPKVal = GetQueryString("RefPKVal");
var FK_MapData = GetQueryString("FK_MapData");
var fid = GetQueryString("FID");
if (fid == "" || fid == undefined)
fid = 0
var FK_Node = GetQueryString("FK_Node");
window.parent.DtlFrm(ensName, refPKVal, OID, EditModel, InitMainTable, FK_MapData, FK_Node, fid, true);
}
}
//删除行
function deleteRow(OID) {
var result = parent.window.confirm('确定要删除吗?');
if (result == false)
return;
if (OID > 0) {
var ensName = GetQueryString("EnsName");
//获得mapdtl实体的基本信息.
var hand = new HttpHandler("BP.WF.HttpHandler.WF_CCForm");
hand.AddPara("EnsName", ensName);
hand.AddPara("RefOID", OID);
hand.AddPara("FK_Node", GetQueryString("FK_Node"));
var dtlData = hand.DoMethodReturnJSON("Dtl_DeleteRow");
if (dtlData.indexOf('err@') != -1) {
alert(dtlData);
return;
}
InitMainTable();
}
}
//从表最小集合判断
function CheckDtlNum() {
var num = sys_MapDtl.NumOfDtl;
if (dtlCount < num) {
return false;
}
}
function SaveAll() {
}
</script>
</head>
<body style="overflow:auto;">
<table id="dt_CardPanel" class="table table-hover table-expandable" style="width:2000px;">
<tbody>
<tr><td style="text-align:center; color:Red;">明细表模板加载错误,请联系管理员。</td></tr>
</tbody>
</table>
</body>
</html>