formrun = {
getValidateType: function (valueType)//得到验证类型
{
valueType = valueType || "";
var vtype = "empty";
if (!valueType || $.trim(valueType).length == 0)
{
return vtype;
}
switch (parseInt(valueType))
{
case 0:
vtype = "empty";
break;
case 1:
vtype = "int";
break;
case 2:
vtype = "decimal";
break;
case 3:
vtype = "positiveint";
break;
case 4:
vtype = "positivefloat";
break;
case 5:
vtype = "negativeint";
break;
case 6:
vtype = "negativefloat";
break;
case 7:
vtype = "mobile";
break;
}
return vtype;
},
initData: function (jsonData, dbtable, jsonStatus, displayModel)
{
if (!jsonData || !dbtable)
{
return;
}
if ("1" == $("#Form_HasUEditor").val())
{
$(".edui-default[id^='" + dbtable + "'],[type1='flow_html']").each(function ()
{
var id = $(this).attr("id");
var filed = id.split('.')[1];
var filedshow = 1;//字段显示状态
var filedcheck = 0;//字段检查方式
if ("1" != displayModel)
{
var fieldstatus = '';
try { fieldstatus = eval("jsonStatus." + dbtable + "_" + filed); } catch (e) { }
if (fieldstatus.length > 0)
{
var fieldstatusArray = fieldstatus.split('_');
if (fieldstatusArray.length == 2)
{
filedshow = parseInt(fieldstatusArray[0]);
filedcheck = parseInt(fieldstatusArray[1]);
}
}
}
if (1 == filedcheck)
{
}
else if (2 == filedcheck)
{
$(this).attr("validate", "editor");
}
if (filedshow == 0)
{
}
else if (filedshow == 1)
{
var value = '';
try { value = eval("jsonData." + dbtable + "_" + filed); } catch (e) { }
$(this).after(value).remove();
}
else if (filedshow == 2)
{
$(this).remove();
}
});
}
$("[isflow='1']").each(function ()
{
var $control = $(this);
var type1 = ($control.attr("type1") || "").toLowerCase();
var name = $control.attr("name");
if (type1 == "flow_org" || type1 == "flow_dict" || type1 == "flow_files")//某些特定控件在原控件name上加了 _text
{
name = name.substr(0, name.lastIndexOf("_text"));
}
var field = (name || "").split('.');
if (field.length != 2)
{
return true;
}
var fieldName = field[1];
var fieldstatus = "1" != displayModel ? eval("jsonStatus." + dbtable + "_" + fieldName) : "";
var validatetype = formrun.getValidateType($control.attr("valuetype"));
var initValue = eval("jsonData." + dbtable + "_" + fieldName);
//验证类型
var validate = formrun.initFlowControl(type1, $control, initValue, validatetype, fieldstatus);
if (validate && $.trim(validate).length > 0)
{
$control.attr("validate", validate);
}
});
$("[issubflowtable='1']").each(function ()
{
var $table = $(this);
var id = $("input[name='flowsubtable_id']", $table).val();
var secondtable = $("input[name='flowsubtable_" + id + "_secondtable']", $table).val();
var primarytablefiled = $("input[name='flowsubtable_" + id + "_primarytablefiled']", $table).val();
var secondtableprimarykey = $("input[name='flowsubtable_" + id + "_secondtableprimarykey']", $table).val();
var secondtablerelationfield = $("input[name='flowsubtable_" + id + "_secondtablerelationfield']", $table).val();
var dbconnid = $("#Form_DBConnID").val();
var primarytablefiledvalue = eval("jsonData." + dbtable + "_" + primarytablefiled);
if (!primarytablefiledvalue)
{
var $ctls = $("tbody tr[type1='listtr'] [issubflow='1']", $table);
for (var i = 0; i < $ctls.size() ; i++)
{
var $ctl = $ctls.eq(i);
var subtype = $ctl.attr("type1");
var colname = $ctl.attr("colname");
var valtype = formrun.getValidateType($ctl.attr("valuetype"));
var subfieldstatus = "1" != displayModel ? eval("jsonStatus." + colname) : "";
var ctlvalue = $ctl.val();
if (subtype == "subflow_radio" || subtype == "subflow_checkbox")
{
ctlvalue = $ctl.prop("checked") ? $ctl.val() : "";
}
var subvalidate = formrun.initFlowControl(subtype, $ctl, ctlvalue, valtype, subfieldstatus);
if (subvalidate && $.trim(subvalidate).length > 0)
{
$ctl.attr("validate", subvalidate);
}
}
}
else
{
var ajaxUrl = top.rootdir + "/Platform/WorkFlowRun/Scripts/Forms/GetSubTableData.aspx?secondtable=" + secondtable + "&primarytablefiled=" + primarytablefiled +
"&secondtableprimarykey=" + secondtableprimarykey + "&secondtablerelationfield=" + secondtablerelationfield +
"&primarytablefiledvalue=" + primarytablefiledvalue + "&dbconnid=" + dbconnid;
$.ajax({
url: ajaxUrl, cache: false, async: false, dataType: "JSON", success: function (json)
{
var isReadonly = "1" == displayModel;//从表里只要有一个字段为只读,则隐藏最后一列添加删除行按钮
var countCols = [];//要计算合计的列
for (var i = 0; i < json.length; i++)
{
var secondtableprimarykeyvalue = eval("json[i]." + secondtable + "_" + secondtableprimarykey);
var $newtr = formrun.subtableNewRow($("tbody tr:first td:last input[type='button']:first", $table), secondtableprimarykeyvalue, 1, true);
var $tds = $("td[colname]", $newtr);
for (var j = 0; j < $tds.length; j++)
{
var colname = $tds.eq(j).attr("colname");
var colvalue = eval("json[i]." + colname);
var subfieldstatus = "1" != displayModel ? eval("jsonStatus." + colname) : "";
if (!isReadonly)
{
var subfieldstatusArray = (subfieldstatus || "").split('_');
if (subfieldstatusArray.length == 2 && subfieldstatusArray[0] == "1")
{
isReadonly = true;
}
}
$("[issubflow='1']", $tds.eq(j)).each(function ()
{
var $ctl = $(this);
if (!colvalue || $.trim(colvalue).length == 0)
{
colvalue = $ctl.val();
}
var subtype = $ctl.attr("type1");
var subvalidate = formrun.initFlowControl(subtype, $ctl, colvalue, "", subfieldstatus);
if ("1" == $ctl.attr("iscount"))
{
countCols.push(colname);
}
if (subvalidate && $.trim(subvalidate).length > 0)
{
$ctl.attr("validate", subvalidate);
}
});
}
}
//计算列合计
countCols = countCols.unique();
for (var i = 0; i < countCols.length; i++)
{
formrun.subtableCount(id, countCols[i], null, isReadonly);
}
//从表里只要有一个字段为只读,则隐藏最后一列添加删除行按钮
if (isReadonly)
{
$("thead tr td:last", $table).remove();
$("td:last", $("tbody tr[type1='listtr']", $table)).remove();
}
if (json.length > 0)
{
$("tbody tr[type1='listtr']:first", $table).remove();
}
}
});
}
});
},
initFlowControl: function (type, $control, initValue, validatetype, fieldstatus)
{
var validate = "";
var filedshow = 1;//字段显示状态
var filedcheck = 0;//字段检查方式
if (fieldstatus && fieldstatus.length > 0)
{
var fieldstatusArray = fieldstatus.split('_');
if (fieldstatusArray.length == 2)
{
filedshow = parseInt(fieldstatusArray[0]);
filedcheck = parseInt(fieldstatusArray[1]);
}
}
if (!initValue || $.trim(initValue).length == 0 || initValue.toLowerCase() == "null")
{
if (type == "flow_org" || type == "flow_dict" || type == "flow_files")//某些特定控件取值要值前一个对象的值
{
initValue = $control.prev().val();
}
else if (type == "flow_checkbox" || type == "flow_radio" || type == "subflow_checkbox" || type == "subflow_radio")
{
initValue = $control.prop("checked") ? $control.val() : "";
}
else
{
initValue = $control.val();
}
if (!initValue || $.trim(initValue).length == 0 || initValue.toLowerCase() == "null")
{
initValue = "";
}
}
switch (type)
{
case "flow_text":
case "flow_hidden":
case "subflow_text":
if (filedshow == 0)
{
$control.val(initValue);
}
else if (filedshow == 1)
{
$control.after(initValue).remove();
}
else if (filedshow == 2)
{
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty," + (validatetype || "empty");
}
else if (2 == filedcheck)
{
validate = validatetype || "empty";
}
break;
case "flow_textarea":
case "subflow_textarea":
if (filedshow == 0)
{
$control.html(initValue);
}
else if (filedshow == 1)
{
$control.after('' + initValue + '').remove();
}
else if (filedshow == 2)
{
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty," + (validatetype || "empty");
}
else if (2 == filedcheck)
{
validate = validatetype || "empty";
}
break;
case "flow_html":
if (filedshow == 0)
{
$control.html(initValue);
}
else if (filedshow == 1)
{
$control.after('' + initValue + '').remove();
}
else if (filedshow == 2)
{
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty," + (validatetype || "empty");
}
else if (2 == filedcheck)
{
validate = validatetype || "empty";
}
break;
case "flow_datetime":
case "subflow_datetime":
var value1 = "";
if (initValue && initValue.trim().length > 0)
{
var format = $control.attr("format");
if (!format || format.length == 0)
{
if ("1" == $control.attr("istime"))
{
value1 = RoadUI.Core.formatDate(initValue, "yyyy-MM-dd hh:mm");
}
else
{
value1 = RoadUI.Core.formatDate(initValue, "yyyy-MM-dd");
}
}
else
{
value1 = RoadUI.Core.formatDate(initValue, format);
}
}
if (filedshow == 0)
{
$control.val(value1);
}
else if (filedshow == 1)
{
$control.after('' + value1 + '').remove();
}
else if (filedshow == 2)
{
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty," + (validatetype || "empty");
}
else if (2 == filedcheck)
{
validate = validatetype || "empty";
}
break;
case "flow_combox":
if (filedshow == 0)
{
$control.val(initValue);
if (initValue.length > 0)
{
new RoadUI.Combox().initValue($control.attr('id'), initValue);
}
}
else if (filedshow == 1)
{
$control.val(initValue);
if (initValue.length > 0)
{
new RoadUI.Combox().initValue($control.attr('id'), initValue);
}
var text = $control.next().val();
$control.before('' + text + '');
$control.next().remove();
$control.remove();
}
else if (filedshow == 2)
{
$control.next().remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,empty";
}
else if (2 == filedcheck)
{
validate = "empty";
}
break;
case "flow_org":
case "subflow_org":
if (filedshow == 0)
{
$control.prev().val(initValue);
if (initValue.length > 0)
{
new RoadUI.Member().setValue($control.prev());
}
}
else if (filedshow == 1)
{
$control.prev().val(initValue);
if (initValue.length > 0)
{
new RoadUI.Member().setValue($control.prev());
}
$control.prev().remove();
$control.next().remove();
$control.after('' + $control.val() + '');
$control.remove();
}
else if (filedshow == 2)
{
$control.prev().remove();
$control.next().remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,empty";
}
else if (2 == filedcheck)
{
validate = "empty";
}
break;
case "flow_dict":
case "subflow_dict":
if (filedshow == 0)
{
$control.prev().val(initValue);
new RoadUI.Dict().setValue($control.prev());
}
else if (filedshow == 1)
{
$control.prev().val(initValue);
new RoadUI.Dict().setValue($control.prev());
$control.prev().remove();
$control.next().remove();
$control.after('' + $control.val() + '');
$control.remove();
}
else if (filedshow == 2)
{
$control.prev().remove();
$control.next().remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,empty";
}
else if (2 == filedcheck)
{
validate = "empty";
}
break;
case "flow_radio":
case "subflow_radio":
if (filedshow == 0)
{
if (initValue.toLowerCase() == ($control.val() || "").toLowerCase())
{
$control.prop("checked", true);
}
}
else if (filedshow == 1)
{
if (initValue == $control.val())
{
$control.remove();
}
else
{
$control.next("label").remove();
$control.remove();
}
}
else if (filedshow == 2)
{
$control.next("label").remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,radio";
}
else if (2 == filedcheck)
{
validate = "radio";
}
break;
case "flow_checkbox":
case "subflow_checkbox":
if (filedshow == 0)
{
if (("," + initValue.toLowerCase() + ",").indexOf("," + ($control.val() || "").toLowerCase() + ",") != -1)
{
$control.prop("checked", true);
}
}
else if (filedshow == 1)
{
if (("," + initValue + ",").indexOf("," + $control.val() + ",") != -1)
{
$control.next("label").after(" ");
$control.remove();
}
else
{
$control.next("label").remove();
$control.remove();
}
}
else if (filedshow == 2)
{
$control.next("label").remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,checkbox";
}
else if (2 == filedcheck)
{
validate = "checkbox";
}
break;
case "flow_select":
case "subflow_select":
if (filedshow == 0)
{
$control.val(initValue);
}
else if (filedshow == 1)
{
var $opts = $control.children();
for (var i = 0; i < $opts.size() ; i++)
{
if ($opts.eq(i).val() == initValue)
{
$control.after($opts.eq(i).text());
$control.remove();
break;
}
}
}
else if (filedshow == 2)
{
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,empty";
}
else if (2 == filedcheck)
{
validate = "empty";
}
break;
case "flow_files":
case "subflow_files":
if (filedshow == 0)
{
if ($.trim(initValue).length > 0)
{
$control.val('共' + initValue.split('|').length + '个文件');
}
$control.prev().val(initValue);
}
else if (filedshow == 1)
{
var links = '';
if ($.trim(initValue).length > 0)
{
var filesArray = initValue.split('|');
for (var i = 0; i < filesArray.length; i++)
{
var extName = (filesArray[i].substr(filesArray[i].lastIndexOf('.') + 1) || "").toLowerCase();
if ("jpg" == extName || "png" == extName || "gif" == extName)
{
links += '
';
}
else
{
links += '' + filesArray[i].substr(filesArray[i].lastIndexOf('/') + 1) + '';
}
}
}
else
{
links = "无";
}
$control.next().remove();
$control.prev().remove();
$control.after(links);
$control.remove();
}
else if (filedshow == 2)
{
$control.prev().remove();
$control.next().remove();
$control.remove();
}
if (1 == filedcheck)
{
validate = "canempty,empty";
}
else if (2 == filedcheck)
{
validate = "empty";
}
break;
}
return validate;
},
subtableNewRow: function (but, pkValue, isAppend, isLoad)//pkValue:主键值 isAppend 0:为在当前行后增加 1:为在最后一行增加 isLoad:是否为二次加载
{
var $tr = $(but).parent().parent();
var $newtr = $tr.clone();
var guid = pkValue || RoadUI.Core.newid(false);
var id = $("input[name='flowsubid']", $tr).val();
$("[type1='subflow_text']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).val("");
});
$("[type1='subflow_textarea']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).html("");
});
$("[type1='subflow_select']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).val("");
});
$("[type1='subflow_checkbox']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).prop("checked", false);
});
$("[type1='subflow_radio']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).prop("checked", false);
});
$("[type1='subflow_datetime']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).val("");
new RoadUI.Calendar().init($(this));
});
$("[type1='subflow_dict']", $newtr).each(function ()
{
$(this).prev().remove();
$(this).next().remove();
$(this).removeClass().addClass("mydict");
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).val("");
new RoadUI.Dict().init($(this));
});
$("[type1='subflow_org']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).val("");
$(this).prev().remove();
$(this).next().remove();
$(this).removeClass().addClass("mymember");
new RoadUI.Member().init($(this));
});
$("[type1='subflow_files']", $newtr).each(function ()
{
var colname = $(this).attr("colname");
$(this).attr("name", id + "_" + guid + "_" + colname).attr("id", id + "_" + guid + "_" + colname).attr("value1", "");
$(this).prev().remove();
$(this).next().remove();
$(this).removeClass().addClass("myfile");
new RoadUI.File().init($(this));
});
$("input[name^='hidden_guid_']", $newtr).val(guid);
new RoadUI.Text().init($(".mytext", $newtr));
new RoadUI.Button().init($("input[type='button']", $newtr));
if (1 == isAppend)
{
var $table = $(but).parent().parent().parent().parent();
$("tr[type1='listtr']:last", $table).after($newtr);
}
else
{
$tr.after($newtr);
}
return $newtr;
},
subtableDeleteRow: function (but)
{
var $table = $(but).parent().parent().parent().parent();
var $tr = $(but).parent().parent();
var $tds = $("td[iscount='1']", $tr);
if ($("tbody tr[type1='listtr']", $table).size() > 1)
{
$tr.remove();
}
//重新计算合计
if ($tds.size() > 0)
{
var id = $("input[name='flowsubtable_id']", $table).val();
for (var i = 0; i < $tds.size() ; i++)
{
formrun.subtableCount(id, $tds.eq(i).attr("colname"));
}
}
},
subtableCount: function (id, colname, showid, isReadonly)//从表计算合计 id:从表ID, colname:列, showid:显示合计值的label id, isReadonly:是否为只读状态
{
var $table = $("#subtable_" + id);
var $tds = $("tbody td[colname='" + colname + "']", $table);
var count = 0;
for (var i = 0; i < $tds.size() ; i++)
{
var val = isReadonly ? $.trim($tds.eq(i).text()) : $("input[type1='subflow_text']", $tds.eq(i)).val();
if (val && !isNaN(val))
{
count = RoadUI.Core.accAdd(count, parseFloat(val));
}
}
showid = showid || "countspan_" + id + "_" + colname;
$("#" + showid).text(count);
}
};