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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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>