/*
* 版 本 Learun-ADMS V7.0.0 数字化智慧校园(http://www.learun.cn)
* Copyright (c) 2013-2017 北京泉江科技有限公司
* 创建人:数字化智慧校园-前端开发组
* 日 期:2018.7.12
* 描 述:数字化智慧校园移动端框架(ADMS) 自定义表单
*/
(function ($, learun, window) {
// 加载自定义表单模板
learun.custmerform = {
loadScheme: function (schemeIds, callback) {// formIds表单主键集合,callback回调函数
if (learun.type(schemeIds) === 'string') {
schemeIds = [schemeIds];
}
var req = [];
var scheme = {};
$.each(schemeIds, function (_index, _item) {
var formId = 'lrform' + _item;
var formScheme = learun.storage.get(formId);// 从缓存中获取表单模板数据
if (!formScheme) {
req.push({ id: _item, ver: "" });
}
else {
scheme[_item] = JSON.parse(formScheme.content);
req.push({ id: _item, ver: formScheme.ver });
}
});
// 加载自定义表单模板
learun.httpget(config.webapi + "learun/adms/form/scheme", req, (data) => {
if (data) {
$.each(data, function (_index, _item) {
scheme[_index] = JSON.parse(_item.F_Scheme);
var formScheme = { ver: _item.F_Id, content: _item.F_Scheme };
learun.storage.set('lrform' + _index,formScheme);
});
}
callback(scheme);
});
}
};
// 自定义表单初始化
$.fn.custmerform = function (formScheme) {
var $this = $(this);
$this.scroll();
var $container = $this.find('.f-scroll');
$.each(formScheme, function (_id, _scheme) {
custmerformRender($container, _scheme.data, _id);
});
$this = null;
$container = null;
};
// 获取自定义表单数据
$.fn.custmerformGet = function () {
var res = {};
var validateflag = true;
$(this).find('.lrcomponts').each(function () {
var $this = $(this);
var schemeInfoId = $this.attr('data-id');
var _componts = $this[0].componts;
res[schemeInfoId] = res[schemeInfoId] || {};
// 遍历自定义表单控件
$.each(_componts, function (_index, _item) {
var _fn = componts[_item.type].get;
if (_fn) {
var compontData = _fn(_item, $this);
if (compontData.isHad) {
if (_item.verify) {
var checkfn = window.fui.validator['is' + _item.verify];
var r = checkfn(compontData.value);
if (!r.code) {
validateflag = false;
window.fui.dialog({ msg: r.msg });
return false;
}
}
res[schemeInfoId][_item.id] = compontData.value;
}
}
});
$this = null;
if (!validateflag) {
return false;
}
});
if (!validateflag) {
return null;
}
return res;
};
// 设置自定义表单数据
$.fn.custmerformSet = function (data) {
var $this = $(this);
function set($this, data) {
if ($this.find('.lrcomponts').length > 0) {
$this.find('.lrcomponts').each(function () {
var $this = $(this);
var schemeInfoId = $this.attr('data-id');
var _componts = $this[0].componts;
var _data = {};
$.each(data[schemeInfoId] || [], function (_index, _item) {
$.each(_item[0] || [], function (_id, _jitem) {
_data[_index.toLowerCase() + _id] = _jitem;
});
});
// 遍历自定义表单控件
$.each(_componts, function (_index, _item) {
var _fn = componts[_item.type].set;
if (_fn) {
if (_item.table && _item.field) {
_fn(_item, _data[(_item.table + _item.field).toLowerCase()], $this);
}
else if (_item.table){// 表格
_fn(_item, data[schemeInfoId][_item.table], $this);
}
}
});
$this = null;
});
}
else {
setTimeout(function () {
set($this, data);
}, 100);
}
}
set($this, data);
};
function getFontHtml(verify) {
var res = "";
switch (verify) {
case "NotNull":
case "Num":
case "Email":
case "EnglishStr":
case "Phone":
case "Fax":
case "Mobile":
case "MobileOrPhone":
case "Uri":
res = '*';
break;
}
return res;
}
function loadCheck(data, text, value, compontId) {
var $row = $('#' + compontId);
if ($row.length === 0) {
setTimeout(function () {
loadCheck(data, text, value, compontId);
}, 100);
}
else {
var $Last = $row;
$.each(data, function (_index, _item) {
$div = $('
');
$Last.after($div);
$div.find('.checkbox').lrswitch();
$Last = $div;
$div = null;
});
if ($Last) {
$Last.after('');
$Last = null;
}
}
$row = null;
}
function organizeRegister1(_compont) {
if ($('#' + _compont.relation).length > 0) {
$('#' + _compont.relation).on('change', { myId: _compont.id }, function (e) {
e = e || window.event;
var myId = e.data.myId;
var value = $(this).lrselectGet();
$('#' + myId).lrselectUpdate({
companyId: value,
needPre: value === '' ? true : false
});
});
}
else {
setTimeout(function () { organizeRegister1(_compont); }, 100);
}
}
function organizeRegister2(_compont) {
if ($('#' + _compont.relation).length > 0) {
$('#' + _compont.relation).on('change', { myId: _compont.id }, function (e) {
e = e || window.event;
var myId = e.data.myId;
var value = $(this).lrselectGet();
$('#' + myId).lrselectUpdate({
departmentId: value,
needPre: value === '' ? true : false
});
});
}
else {
setTimeout(function () { organizeRegister2(_compont); }, 100);
}
}
function loadGridComponts(compont) {
}
function loadGridButton(compont) {// 编辑表格增加按钮
var $row = $('#' + compont.id);
if ($row.length === 0) {
setTimeout(function () {
loadGridButton(compont);
}, 100);
}
else {
var $btn = $('增加' + (compont.title || '') + '
');
$btn[0].compont = compont;
$btn.on('tap', { compont: compont }, function (e) {
e = e || window.event;
});
$row.after($btn);
}
$row = null;
}
// 渲染自定义表单
function custmerformRender($container, scheme, schemeInfoId) {
var loaddataComponts = [];
$.each(scheme, function (_index, _item) {
var $list = $('');
$list[0].componts = _item.componts;
$.each(_item.componts, function (_jindex, _jitem) {
var $row = $('');
if (componts[_jitem.type].render($row, _jitem)) {
$list.append($row);
$row.prepend(getFontHtml(_jitem.verify));
}
});
$container.append($list);
});
$container = null;
}
var componts = {
label: {
render: function ($row, compont) {
$row.addClass('lr-form-row-title');
return true;
}
},
html: {
render: function ($row, compont) {
return false;
}
},
text: {
render: function ($row, compont) {
var $compont = $('');
$row.append($compont);
$compont.val(compont.dfvalue || '');
$compont = null;
$row = null;
if (compont.isHide === '1') {
return false;
}
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.val();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).val(value || '');
}
},
textarea: {
render: function ($row, compont) {
$row.addClass('lr-form-row-multi');
var $compont = $('');
$compont.text(compont.dfvalue || '');
$row.append($compont);
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.val();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).val(value || '');
}
},
texteditor: {
render: function ($row, compont) {
$row.addClass('lr-form-row-multi');
var $compont = $('');
$compont.text(compont.dfvalue || '');
$row.append($compont);
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.val();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).val(value || '');
}
},
radio: {
render: function ($row, compont) {// 单选改用和下拉一致
var $compont = $('');
$row.append($compont);
if (compont.dataSource === '0') {
$compont.lrpickerex({
code: compont.itemCode,
type: 'dataItem'
});
} else {
var vlist = compont.dataSourceId.split(',');
$compont.lrpickerex({
code: vlist[0],
type: 'sourceData',
ivalue: vlist[2],
itext: vlist[1]
});
}
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrpickerGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).lrpickerSet(value);
}
},
checkbox: {
render: function ($row, compont) {
var $compont = $('');
$row.append($compont);
if (compont.dataSource === '0') {
$compont.lrcheckboxex({
code: compont.itemCode,
type: 'dataItem'
});
} else {
var vlist = compont.dataSourceId.split(',');
$compont.lrcheckboxex({
code: vlist[0],
type: 'sourceData',
ivalue: vlist[2],
itext: vlist[1]
});
}
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrcheckboxGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).lrcheckboxSet(value);
}
},
select: {
render: function ($row, compont) {//
var $compont = $('');
$row.append($compont);
if (compont.dataSource === '0') {
$compont.lrpickerex({
code: compont.itemCode,
type: 'dataItem'
});
} else {
var vlist = compont.dataSourceId.split(',');
$compont.lrpickerex({
code: vlist[0],
type: 'sourceData',
ivalue: vlist[2],
itext: vlist[1]
});
}
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrpickerGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).lrpickerSet(value);
}
},
datetime: {
render: function ($row, compont) {//
var $compont = $('');
$row.append($compont);
if (compont.dateformat === '0') {
$compont.lrdate({
type: 'date'
});
}
else {
$compont.lrdate();
}
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrdateGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
if (compont.dateformat === '0') {
value = learun.date.format(value, 'yyyy-MM-dd');
}
else {
value = learun.date.format(value, 'yyyy-MM-dd hh:mm');
}
$container.find('#' + compont.id).lrdateSet(value);
}
},
datetimerange: {
render: function ($row, compont) {//
var $compont = $('');
function register(_compont) {
if ($('#' + _compont.startTime).length > 0 && $('#' + _compont.endTime).length > 0) {
$('#' + _compont.startTime).on('change', { myId: _compont.id, end: _compont.endTime }, function (e) {
e = e || window.event;
var end = e.data.end;
var myId = e.data.myId;
var st = $(this).lrdateGet();
var et = $('#' + end).lrdateGet();
if (!!st && !!et) {
var diff = learun.date.parse(st).DateDiff('d', et) + 1;
$('#' + myId).val(diff);
}
});
$('#' + _compont.endTime).on('change', { myId: _compont.id, begin: _compont.startTime }, function (e) {
e = e || window.event;
var begin = e.data.begin;
var myId = e.data.myId;
var st = $('#' + begin).lrdateGet();
var et = $(this).lrdateGet();
if (!!st && !!et) {
var diff = learun.date.parse(st).DateDiff('d', et) + 1;
$('#' + myId).val(diff);
}
});
}
else {
setTimeout(function () {
register(_compont);
}, 100);
}
}
if (!!compont.startTime && compont.endTime) {
register(compont);
}
$row.append($compont);
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.val();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).val(value);
}
},
encode: {
render: function ($row, compont) {
var $compont = $('');
compont.isInit = false;
learun.getRuleCode(compont.rulecode, function (data) {
if (!compont.isInit) {
compont.isInit = true;
$('#' + compont.id).val(data);
}
});
$row.append($compont);
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.val();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
compont.isInit = true;
$container.find('#' + compont.id).val(value);
}
},
organize: {
render: function ($row, compont) {
var $compont = $('');
$row.append($compont);
switch (compont.dataType) {
case "company"://公司
$compont.lrselect();
break;
case "department"://部门
$compont.lrselect({
type: 'department',
needPre: compont.relation === '' ? false : true
});
organizeRegister1(compont);
break;
case "user"://用户
$compont.lrselect({
type: 'user',
needPre: compont.relation === '' ? false : true
});
organizeRegister2(compont);
break;
}
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrselectGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).lrselectSet(value);
}
},
currentInfo: {
render: function ($row, compont) {
var $compont = $('');
var userinfo = learun.storage.get('userinfo');
switch (compont.dataType) {
case 'company':
compont.value = userinfo.baseinfo.companyId;
if (compont.isHide !== '1') {
learun.clientdata.get('company', {
key: compont.value,
compont: compont,
callback: function (item, _op) {
if (!_op.compont.isEdit) {
$compont.val(item.name);
}
}
});
}
break;
case 'department':
compont.value = userinfo.baseinfo.departmentId;
if (compont.isHide !== '1') {
learun.clientdata.get('department', {
key: compont.value,
compont: compont,
callback: function (item, _op) {
if (!_op.compont.isEdit) {
$compont.val(item.name);
}
}
});
}
break;
case 'user':
$compont.val(userinfo.baseinfo.realName);
compont.value = userinfo.baseinfo.userId;
break;
case 'time':
compont.value = learun.date.format(new Date(), 'yyyy-MM-dd hh:mm:ss');
$compont.val(compont.value);
break;
case 'guid':
compont.value = learun.guid();
$compont.val(compont.value);
break;
}
if (compont.isHide === '1') {
$compont = null;
$row = null;
return false;
}
else {
$row.append($compont);
$compont = null;
$row = null;
}
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = compont.value;
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
if (value) {
var organization = learun.storage.get('organization');
compont.isEdit = true;
switch (compont.dataType) {
case 'company':
compont.value = value;
if (compont.isHide !== '1') {
learun.clientdata.get('company', {
key: compont.value,
compont: compont,
callback: function (item, _op) {
$container.find('#' + _op.compont.id).val(item.name || '');
}
});
}
break;
case 'department':
compont.value = value;
if (compont.isHide !== '1') {
learun.clientdata.get('department', {
key: compont.value,
compont: compont,
callback: function (item, _op) {
$container.find('#' + _op.compont.id).val(item.name || '');
}
});
}
break;
case 'user':
compont.value = value;
if (compont.isHide !== '1') {
learun.clientdata.get('user', {
key: compont.value,
compont: compont,
callback: function (item, _op) {
$container.find('#' + _op.compont.id).val(item.name || '');
}
});
}
break;
case 'time':
compont.value = value;
if (compont.isHide !== '1') {
$container.find('#' + compont.id).val(value);
}
break;
case 'guid':
compont.value = value;
if (compont.isHide !== '1') {
$container.find('#' + compont.id).val(value);
}
break;
}
}
}
},
guid: {
render: function ($row, compont) {
compont.value = learun.guid();
$row.remove();
return false;
},
get: function (compont) {
var res = {};
res.isHad = true;
res.value = compont.value;
return res;
},
set: function (compont, value) {
compont.value = value;
}
},
upload: {
render: function ($row, compont) {
$row.addClass('lr-form-row-multi');
var $compont = $('');
$row.append($compont);
$compont.lrImagepicker();
$compont = null;
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.imagepickerGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).imagepickerSet(value);
}
},
girdtable: {
render: function ($row, compont) {
var gridCompont = [];
$.each(compont.fieldsData, function (_index, _item) {
if (_item.field) {
switch (_item.type) {
case 'radio':
case 'select':
case 'checkbox':
if (_item.dataSource === '0') {
_item.code = _item.itemCode;
_item.datatype = 'dataItem';
}
else {
_item.code = _item.dataSourceId;
_item.ivalue = _item.saveField;
_item.itext = _item.showField;
_item.datatype = 'sourceData';
}
break;
case 'layer':
if (_item.dataSource === '0') {
_item.code = _item.itemCode;
_item.datatype = 'dataItem';
}
else {
_item.code = _item.dataSourceId;
_item.datatype = 'sourceData';
}
break;
}
gridCompont.push(_item);
}
});
$row.attr('id', compont.id);
$row.lrgrid({
title: compont.title,
componts: gridCompont,
isToLowerCase: true
});
$row = null;
return true;
},
get: function (compont, $container) {
var res = {};
var $compont = $container.find('#' + compont.id);
res.isHad = $compont.length > 0 ? true : false;
if (res.isHad) {
res.value = $compont.lrgridGet();
}
$compont = null;
return res;
},
set: function (compont, value, $container) {
$container.find('#' + compont.id).lrgridSet(value);
}
}
};
})(window.jQuery, window.lrmui, window);