/** * 公式编辑器 * @author wangting * @date 2022-2-15 */ layui.define(['layer','element','form','table','dynamicCondition' ,'tree'],function(exports){ var webUtil = $webUtil; var Class = function(){ this.MODELNAME = "formulaEditor"; this.moduleKey = "formulaEditor"; this.id = "formulaEditor"; this.backPath = configData.compatibility? path:configData.objectServicePath; this.getContent=function(){ var that = this; var filter = "compuse_" + that.id; var html=[ '
', '
', '
', '
', '
', '
', '
', // '', '', '', '
', '
', '
', '
', that.getOperatorHtml(), '
', '
', '
', '
', '
', '
', '
', '
', '
    ', '
  • 常用
  • ', '
  • 财务
  • ', '
  • 日期
  • ', '
  • 数学
  • ', '
  • 其他
  • ', '
', '
    ', '
  • ', that.getFormulaFaHtml(), '
  • ', '
  • ', that.getFormulaSiHtml(), '
  • ', '
  • ', that.getFormulaDateHtml(), '
  • ', '
  • ', that.getFormulaMathHtml(), '
  • ', '
  • ', that.getFormulaOtherHtml(), '
  • ', '
', '
', '
', '
', '
', '
', '
', '
    ', '
  • 本场景变量
  • ', '
  • 系统变量
  • ', '
', '
    ', '
  • ', that.getThisVarHtml(), '
  • ', '
  • ', that.getSysVarHtml(), '
  • ', '
', '
', '
', '
', '
', '
', '
' ] return html.join(''); }; this.getOperatorHtml = function(){ var that=this; var filter ="compuse_" + that.id; var html=['
', '', '
', '', '', '', '
', '', '', '', '
', '', '', '', '
', '', '', '', '
', '', '', '', '
', '', '', '', '', '
', '
'] return html.join('') } this.getFormulaMathHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
公式描述
abs(value)求参数value的绝对值,value必须为数字格式
acos(value)求参数value的反余弦,value必须为数字格式
asin(value)求参数value的反正弦,value必须为数字格式
atan(value)求参数value的反正切,value必须为数字格式
cbrt(value)求参数value的立方根,value必须为数字格式
ceil(value)返回不大于参数value的最小整数,例如ceil(1.7)就等于2,value必须为数字格式
cos(value)求参数value的余弦值,value必须为数字格式
cosh(value)求参数value的双曲余弦值,value必须为数字格式
exp(n)欧拉数 e 的n次幂,n必须为数字格式
expm1(n)欧拉数 e 的n次幂减1,n必须为数字格式
floor(n)返回不小于参数value的最大整数,例如floor(1.7)等于1,n必须为数字格式
log(value)自然对数,value必须为数字格式
log10(value)计算底数为 10 的对数,value必须为数字格式
log1p(value)返回参数与 1 之和的自然对数,value必须为数字格式
random()返回一个伪随机数,该值大于等于 0.0 且小于 1.0
rint(value)返回其值最接近参数并且是整数的 double 值。如果两个整数的 double 值都同样接近,那么结果取偶数。特殊情况是:如果参数值是整数,那么结果就是该参数。如果参数是 NaN 或无穷大或正零或负零,那么结果与参数相同
round(value)四舍五入取整数
signum(value)符号函数;如果参数为 0,则返回 0;如果参数大于 0, 则返回 1.0;如果参数小于 0,则返回 -1.0
sin(value)求参数value的正弦值,value必须为数字格式
sinh(value)求参数value的双曲正弦值,value必须为数字格式
tan(value)求参数value的正切值,value必须为数字格式
tanh(value)求参数value的双曲正切值,value必须为数字格式
max(v1,v2)求两个数中的较大的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3.2
min(v1,v2)求两个数中的较小的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3
sqrt(value)求平方根
'] return html.join('') } this.getFormulaSiHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
公式描述
toChinese(value)将阿拉伯数字转为为汉字大写方式
getChineseCurrency(value)将阿拉伯数字转为为汉字金额大写方式,与tochiness的区别是这个会显示元、角、分
setThmark(value)为参数value设置千分位
'] return html.join('') } this.getFormulaDateHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
公式描述
compareDate(d1,d2)对比参数d1,d2的大小。d1,d2为yyyy-MM-dd格式的日期字符串
nowDate()获取当前日期
chinaDate(d1)将时间转换为农历,d1是yyyy-MM-dd格式的日期字符串
dateAdd(d1,count)在d1的基础上添加count天,d1为yyyy-MM-dd HH:mm:ss格式的时间字符串
dateBalanceYear(sourceDate,targetDate,false)计算相差的年份,比如计算年龄,targetDate为""表示当前时间,第三个参数为true表示有多余的月份或者天数时,就加1;
dateBalanceDay(sourceDate,targetDate)计算相差的天数,targetDate为""表示当前时间
dateformat(d1,format)将当前的日期(时间)字符串转为指定的字符串,如果format的内容有空格,请使用&代替
nowDatetime()获取当前日期和时间。格式为yyyy-MM-dd HH:mm:ss
dayOf(d1)获取格式为yyyy-MM-dd的日期的天数
nowMon()获取当前的月份,格式为MM
monOf(d1)获取日期d1的月份数
nowTime()获取当前时间,格式为HH:mm:ss
nowYear()获取年份,格式为yyyy
yearOf()获取时间d1的年份
'] return html.join('') } this.getFormulaFaHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // ' ', ' ', '
公式描述
if(compare,trueResult,falseResult)如果compare的表达式为true,则执行trueResult的表达式,否则执行flaseResult.例如if(3>2,2*(3+2),3/(2-4)),值等于10
sum(douber1,douber2)两个格式为douber的参数求和
sub(douber1,douber2)格式为douber的参数douber1减去格式为douber的参数douber2
mul(douber1,douber2)两个格式为douber的参数相乘
div(douber1,douber2)格式为douber的参数douber1除以格式为douber的参数douber2.当douber2等于0的时候,返回0;如果除不尽的时候保留10位小数
mod(int,int)求余数
toInt(string)转换为int格式
doubleRound(string,count)处理douber的小数位数,count表示小数位数
zeroIfNull(value)如果参数的值为null或者"",将返回0
endsWith(string,str1)字符串string是不是以str1结尾
startsWith(string,str1)字符串string是否以str1开头
charAt(string,index)获取字符串string中第index位置的字符,如果长度小于index,则返回"";
equalsIgnoreCase(str1,str2)字符串str1和字符串str2是否相等
indexOf(str1,str2)字符串str2在字符串str1中首次出现的位置
isEmpty(str1)参数str1是否为空,其中null这个字符串也表示为空
lastIndexOf(str1,str2)字符串str2在字符串str1中最后出现的位置
leftStr(str1,index)获取index位置左侧的所有字符
rightStr(str1,str2)获取index位置右侧的所有字符
length(str1)参数str1的长度
mid(str1,start,end)获取str1的从start到end直接的字符串,出现异常时返回""
tolowercase(str1)将字符串str1转为小写
touppercase(str1)将字符串str1转为大写
trimzero(str1)去除字符串str1中的0
MD5(str1)将字符串进行MD5加密
getValueByMethod(serviceName,method,paramJsonString)从方法中获取值
'] return html.join('') } this.getFormulaOtherHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', '
公式描述
getcolvalue(servername,tablename,fieldname,pkField,pkValue)查询servername中tablename数据库表中fieldname字段的值,pkfield表示主键的字段名称,pkValue表示主键的值,serverName现在默认为localServer
'] return html.join('') } this.getSysVarHtml = function() { var that = this; var filter = "compuse_" + that.id; var html = ['', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
变量描述
#CURRENTUSER.OID#当前用户的主键
#CURRENTUSER.ID#当前用户的账户
#CURRENTTIME#当前时间
#CURRENTDATE#当前日期
#CURRENTDATETIME#当前日期时间
#CURRENTUSER_NAME#当前用户的姓名
#CURRENTUSER.SECRETGRADE#当前用户密级
#CURRENTUSER.IPSECRET#当前用户的IP密级
#CURRENTUSER.BUSINESSUNIT#当前用户所属业务单元
#CURRENTUSER.BUSINESSUNITNAME#当前用户所属业务单元名称
#CURRENTUSER.GROUPOID#当前用户的部门主键
#CURRENTUSER.GROUPNAME#当前用户所属部门名称
#CURRENTUSER.EMAIL#当前用户邮件地址
#CURRENTUSER.ROLENAME#当前用户所属角色名称
'] return html.join('') } this.getThisVarHtml = function() { var that = this; var html = ['', ' ', ' ', ' ', ' ', ' ', '
变量描述
'] return html.join('') } this.init=function(){ }; this.showReferDialog=function (options){ var that=this; var form = layui.form; var table = layui.table; if(!options){ options={} } if(options.id){ that.id=options.id } var target = options.target; var filter ="compuse_" + that.id; var compuseIndex =webUtil.dialog({ title:'公式编辑框', content:that.getContent(), resizing:function(layero){ form.doResize(filter); }, success:function(layero,layerIndex,classP) { var easyuiLayout = $('#easyuiLayout_' + filter) easyuiLayout.css({height: 600, width: 1000}) easyuiLayout.parent().parent().css({margin: '5px'}) $('#easyuiLayoutCenter_' + filter).layout() $('#easyuiLayoutSouth_' + filter).layout() easyuiLayout.layout(); form.addItems(filter, [{ field: 'formulacontext', title: '公式内容', required: true, type: 'textarea', textWidth: 500, textStyle:'height:120px;' }], function () { form.setValues({formulacontext: options.value}, filter) webUtil.relocationOpen(classP) }, {}, {labelWidth: 110}); var tableOptions={ limit:-1, height:255, done:function(res,cur,total) { $('.formula-div .layui-table-header').hide(); $('.formula-div .layui-table-body').height(253) }, rowDBLClick:function (thisTableFilter, record) { var formulacontext=form.getValues(filter).formulacontext; formulacontext+=record.id form.setValues({formulacontext:formulacontext},filter); } } //数学公式 table.init('formula-table-math', tableOptions); //财务公式 table.init('formula-table-si', tableOptions); //日期公式 table.init('formula-table-date', tableOptions); //常用公式 table.init('formula-table-fa', tableOptions); //其它公式 table.init('formula-table-other', tableOptions); //系统变量 table.init('sysvar-table', tableOptions); //本场景变量 if(options.currentVars){ //说明传递了 var thisVarOptions=$.extend(tableOptions,{data:options.currentVars}) table.init('thisvar-table', thisVarOptions); }else if(options.useFormKey && options.textFormKey){ //获取使用的表单上的字段 var id = options.formValues[options.useFormKey]; var text = options.formValues[options.textFormKey]; var data = [{id:"${" + id + "}",name:text}]; var thisVarOptions = $.extend(tableOptions, {data: data}) table.init('thisvar-table', thisVarOptions); }else if(options.currentVarsUrl){ debugger; var submitParams = options.currentVarsParams; if(!submitParams){ submitParams = {}; } var formKey = "${formValues."; for(var key in submitParams){ var value = submitParams[key]; try { if ($webUtil.isNotNull(value) && value.indexOf(formKey) > -1) { while (value.indexOf(formKey) > -1) { var temp = value.substring(value.lastIndexOf(formKey) + formKey.length, value.indexOf("}")); var thisKeyValue = options.formValues[temp]; if (!thisKeyValue || thisKeyValue == null) { thisKeyValue = ''; } value = value.replace(formKey + temp + "}", thisKeyValue); } } }catch (e){ } submitParams[key] = value; } submitParams['page'] = 1; submitParams['limit'] = -1; $webUtil.ajax(options.currentVarsMethod||'get', options.currentVarsUrl, submitParams, function (res) { layui.each(res.data, function (i, item) { res.data[i].id = '${' + item.id + '}' }) var thisVarOptions = $.extend(tableOptions, {data: res.data}) table.init('thisvar-table', thisVarOptions); }, function (e, msg) { }, that.backPath, true); } //运算符 $('.operator_'+filter+' .layui-btn').click(function (){ var formulacontext=form.getValues(filter).formulacontext; formulacontext+=$(this).text() form.setValues({formulacontext:formulacontext},filter); }) function checkFormula(formulacontext){ if(formulacontext){ return true; }else { webUtil.showErrorMsg('验证不通过'); return false; } return true; } //验证公式 $('.toolbar_'+filter+'_verify').click(function (){ var formulacontext=form.getValues(filter).formulacontext; if(checkFormula(formulacontext)) { webUtil.showMsg('验证通过') } }) //清除内容 $('.toolbar_'+filter+'_chear').click(function (){ form.setValues({formulacontext:''},filter); }) //确定 $('.toolbar_'+filter+'_add').click(function (){ var formulacontext=form.getValues(filter).formulacontext; if(formulacontext=='' || checkFormula(formulacontext)) { target.setValue(options.filter,options.name,formulacontext,formulacontext,true); layer.close(compuseIndex) } }) } }); } this.refresh = function (buttonid,ele) { }; this.ADVQUERY = function () { var that = this; if(!that.serinorQueryInstance) { var dynamicCondition = layui.dynamicCondition; $('[layui-filter="toolbar_' + that.id + '"]').append('
'); that.checkColumns(); that.serinorQueryInstance = dynamicCondition.create({ fields: that.dataFields//查询字段 , tableId: "table_" + that.id//需要查询的表格 , type: "complex" //type:"simple"/"complex" 查询的方法 暂时写死为 complex , queryCallBack: function (requestData) {//查询之后的callback } }); } that.serinorQueryInstance.open(); }; }; var cs = new Class(); exports(cs.MODELNAME,cs); });