UNPKG

kre-form

Version:

本项目由 Angular8+ 编写的表单设计器和表单应用,所有的配置都是 JSON 结构体组成,PC 端是基于 ANT 组件库封装

1 lines 94.6 kB
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("ng-zorro-antd/core"),require("@kre-form/core"),require("ng-zorro-antd/collapse"),require("ng-zorro-antd/icon"),require("ng-zorro-antd/tooltip"),require("@antv/x6"),require("@angular/common"),require("@angular/forms"),require("@angular/cdk/drag-drop"),require("ng-zorro-antd/dropdown"),require("ng-zorro-antd/tabs"),require("ng-zorro-antd/radio"),require("ng-zorro-antd/select"),require("ng-zorro-antd/checkbox"),require("ng-zorro-antd/button"),require("ng-zorro-antd/empty"),require("ng-zorro-antd/input"),require("ng-zorro-antd/grid"),require("ng-zorro-antd/input-number"),require("ng-zorro-antd/modal"),require("ng-zorro-antd/message"),require("lodash"),require("@angular/core"),require("echarts")):"function"==typeof define&&define.amd?define("@kre-form/abc",["exports","ng-zorro-antd/core","@kre-form/core","ng-zorro-antd/collapse","ng-zorro-antd/icon","ng-zorro-antd/tooltip","@antv/x6","@angular/common","@angular/forms","@angular/cdk/drag-drop","ng-zorro-antd/dropdown","ng-zorro-antd/tabs","ng-zorro-antd/radio","ng-zorro-antd/select","ng-zorro-antd/checkbox","ng-zorro-antd/button","ng-zorro-antd/empty","ng-zorro-antd/input","ng-zorro-antd/grid","ng-zorro-antd/input-number","ng-zorro-antd/modal","ng-zorro-antd/message","lodash","@angular/core","echarts"],t):t((n["kre-form"]=n["kre-form"]||{},n["kre-form"].abc={}),n.core,n.core$1,n.collapse,n.icon,n.tooltip,n.x6,n.ng.common,n.ng.forms,n.ng.cdk["drag-drop"],n.dropdown,n.tabs,n.radio,n.select,n.checkbox,n.button,n.empty,n.input,n.grid,n.inputNumber,n.modal,n.message,n._,n.ng.core,n.echarts)}(this,function(n,t,e,i,r,o,s,a,l,c,p,d,u,h,g,f,m,y,b,v,C,x,z,S,w){"use strict";var M=function(){return(M=Object.assign||function M(n){for(var t,e=1,i=arguments.length;e<i;e++)for(var r in t=arguments[e])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}).apply(this,arguments)};function O(n,t){var e="function"==typeof Symbol&&n[Symbol.iterator];if(!e)return n;var i,r,o=e.call(n),a=[];try{for(;(void 0===t||0<t--)&&!(i=o.next()).done;)a.push(i.value)}catch(s){r={error:s}}finally{try{i&&!i.done&&(e=o["return"])&&e.call(o)}finally{if(r)throw r.error}}return a}function k(){for(var n=[],t=0;t<arguments.length;t++)n=n.concat(O(arguments[t]));return n}var A=function(){this.FormulaUsage=[{category:"班段验证",categoryCode:"SHIFTVALID",contains:[{name:"ABNORMALHD",intro:"ABNORMALHD函数用于验证班段全天异常\n <br/>\n 函数包含3个参数可配置:是否加上所有休假项目;是否加上所有公出项目;是否加上所有加班项目\n <br/> \n 规则:\n <br/>\n (打卡时段(上)+所有休假时段+所有公出时段+所有加班时段)<标准班段(上)\n <br/>\n (打卡时段(下)+所有休假时段+所有公出时段+所有加班时段)<标准班段(下)\n <br/>\n 二者均符合<br/> \n ",usage:"ABNORMALHD(0,0,0)\n <br/>\n 0代表关闭参数,1代表开启参数\n <br/>\n 验证通过返回值为true,验证不通过返回false\n ",example:"配置:ABNORMALHD(1,0,0)\n <br/>\n 当 打卡时段(上)+所有休假时段<标准班段(上) 或者 打卡时段(下)+所有休假时段<标准班段(下) \n <br/>\n 符合所有情况则返回为true\n <br/>\n 不符合则返回false\n "},{name:"ABNORMALAD",intro:"ABNORMALAD函数用于验证班段半天异常\n <br/>\n 函数包含3个参数可配置:是否加上所有休假项目;是否加上所有公出项目;是否加上所有加班项目\n <br/>\n 规则:\n <br/>\n (打卡时段(上)+所有休假时段+所有公出时段+所有加班时段)<标准班段(上)\n <br/>\n (打卡时段(下)+所有休假时段+所有公出时段+所有加班时段)<标准班段(下)\n <br/>\n 二者仅符合其一\n <br/>\n ",usage:"ABNORMALAD(0,0,0)\n <br/>\n 0代表关闭参数,1代表开启参数 \n <br/>\n 验证通过返回值为true,验证不通过返回false\n <br/>\n ",example:"配置:ABNORMALAD(1,0,0)\n <br/>\n 当 打卡时段(上)+所有休假时段<标准班段(上) 或者 打卡时段(下)+所有休假时段<标准班段(下)\n <br/>\n 符合任意情况则返回为true\n <br/>\n 均不符合则返回false"}]},{category:"计算出勤天数",categoryCode:"ATSDAYCALC",contains:[{name:"ATTENDANCE1",intro:"ATTENDANCE1函数用于计算班段上出勤时数\n <br/>\n 函数包含4个参数可配置:是否加上所有休假时段;是否加上所有公出时段;是否加上所有加班时段;允许差值数。\n <br/>\n 规则:\n <br/>\n 打卡时段(班段上)+所有休假时段(班段上)+所有公出时段(班段上)+所有加班时段(班段上)+ 允许差值数 验证是否全覆盖标准班段(班段上) \n ",usage:"ATTENDANCE1(0,0,0,0)\n <br/>\n 前3个参数0代表关闭参数,1代表开启参数\n <br/>\n 后一个参数0代表不允许差值,具体数字代表允许差值分钟数(支持正整数)\n <br/>\n 返回全覆盖则返回当前配置班段时数,未全覆盖则返回0\n <br/>\n ",example:"配置:ATTENDANCE1(0,0,0,0) \n <br/>\n 计算班段上出勤天数:ATTENDANCE1(1,0,0,0)\n <br/>\n 当打卡时段(班段上)+所有休假时段(班段上)全覆盖标准班段(班段上)\n <br/>\n 符合情况则返回标准工时(班段上)(时数),均不符合则返回0"},{name:"ATTENDANCE2",intro:"ATTENDANCE2函数用于计算班段下出勤时数\n <br/>\n 函数包含4个参数可配置:是否加上所有休假时段;是否加上所有公出时段;是否加上所有加班时段;允许差值数。\n <br/>\n 规则:\n <br/>\n 打卡时段(班段下)+所有休假时段(班段下)+所有公出时段(班段下)+所有加班时段(班段下)+ 允许差值数验证是否全覆盖标准班段(班段下)\n ",usage:"ATTENDANCE2(0,0,0,0)\n <br/>\n 前3个参数0代表关闭参数,1代表开启参数\n <br/>\n 后一个参数0代表不允许差值,具体数字代表允许差值分钟数(支持正整数)\n <br/>\n 返回全覆盖则返回当前配置班段时数,未全覆盖则返回0\n <br/>\n ",example:"配置:ATTENDANCE2(0,0,0,0)\n <br/>\n 计算班段下出勤天数:ATTENDANCE2(1,0,0,0)\n <br/>\n 当打卡时段(班段下)+所有休假时段(班段下)全覆盖标准班段(班段下)\n <br/>\n 符合情况则返回标准工时(班段下)(时数),均不符合则返回0"}]},{category:"通用函数",categoryCode:"BASE",contains:[{name:"PRECISION",intro:"PRECISION函数用于设置计算结果输出的精度与进位规则\n <br/>\n 函数包含2个参数可配置:精度;进位规则",usage:"PRECISION(计算对象,0,0)\n <br/>\n 第一个参数:设置精度,支持属于0-3之间的整数。其余结果按0计算\n <br/>\n 第二个参数:设置进位规则,0代表四舍五入;1代表向上进位;2代表向下进位\n <br/>\n ",example:"配置:PRECISION(7.916,1,0),则输出结果为:7.9\n <br/>\n PRECISION(7.916,2,1),则输出结果为:7.92\n <br/>\n PRECISION(7.916,2,2),则输出结果为:7.91"},{name:"Daycompute",intro:"Daycompute可基于另一个日期型字段加减一个指定的数值,从而计算当前日期型字段的默认值",usage:"Daycompute(日期型字段,运算天数)\n <br/>\n 第一个参数:选择日期型字段\n <br/>\n 第二个参数:输入天数,支持正负数;不支持小数\n ",example:"配置:Daycompute(离职日期,1)\n <br/>\n 离职日期=2022/1/1\n <br/>\n 结果输出=2022/1/2\n <br/>\n 配置:Daycompute(离职日期,-1)\n <br/>\n 离职日期=2022/1/1\n <br/>\n 结果输出=2021/12/31\n <br/>\n "},{name:"Hourcalculation",intro:"Hourcalculation用于计算日期时间之间小时数\n <br/>\n 包含6个参数:开始时间;是否包含开始时间;结束时间;是否包含结束时间;最小单位;进位规则",usage:"Hourcalculation(开始时间,0,结束时间,0,1,1)\n <br/>\n 第一个参数:选择开始日期字段\n <br/>\n 第二个参数:是否包含开始日期,1代表包含,0代表不包含\n <br/>\n 第三个参数:选择结束日期字段\n <br/>\n 第四个参数:是否包含结束日期,1代表包含,0代表不包含\n <br/>\n 第五个参数:设置最小单位,1代表最小单位为1,0.5代表最小单位为0.5\n <br/>\n 第六个参数:设置进位规则,1代表向上进位,2代表向下进位,3代表取接近值(中间值向下取值),4代表4舍5入(最小单位为1时生效)\n <br/>\n ",example:"配置:Hourcalculation(开始时间,1,结束时间,1,1,1)\n <br/>\n 开始日期=10/1 10:00\n <br/>\n 结束日期=10/1 13:30\n <br/>\n 结果输出=4\n "},{name:"SUM",intro:"SUM用于计算多记录数值型字段求和\n <br/>\n 包含1个参数:字段名称",usage:"SUM(明细金额)\n <br/>\n 参数:选择计算字段\n ",example:"配置:SUM(明细金额)\n <br/>\n 明细1为100;明细2为200;明细3为300\n <br/>\n 则汇总金额为:600\n \n "},{name:"CalendarDay",intro:"CalendarDay用于获取周期内日历中不用属性日期的天数\n <br/>\n 包含3个参数:1,日历类型;2,日期属性;3,周期类型",usage:"CalendarDay(0,0,0)\n <br/>\n 第一个参数日历类型:输入“0”代表获取员工关联日历;输入具体日历名称代表指定日历\n <br/>\n 第二个参数日期属性:输入“0”代表计算自然日天数;输入“1”代表获取工作日天数;输入“2”代表获取公休日天数;输入“3”代表获取节假日天数;输入“4”代表获取周六天数;输入“5”代表获取周日天数;输入“6”代表获取周六天数(排除非公休日的周六);输入“7”代表获取周日天数(排除非公休日的周日)\n <br/>\n 第三个参数周期类型:输入“0”代表统计周期内自然日数据;输入“1”代表统计周期内员工在职区间数据\n <br/>\n ",example:"\n 示例1:\n <br/>\n CalendarDay(0,0,0)\n <br/>\n 代表获取员工关联日历周期内的自然日天数\n <br/>\n 示例2:\n <br/>\n CalendarDay(”国家日历“,1,1)\n <br/>\n 代表获取“国家日历”下,周期内,员工在职区间内的工作日天数\n "},{name:"DepartmentScope",intro:"DepartmentScope函数用于部门选择\n <br/>\n 包含2个参数:1,部门选择;2,包含范围",usage:"DepartmentScope('0',0)\n <br/>\n 1,部门选择:输入部门编码,多个部门使用|隔开\n <br/>\n 2,定义包含范围:1,仅本级;2,本级+直接下级;3,本级+所有下级;4,直接下级;5,所有下级\n <br/> \n ",example:"\n 设置DepartmentScope('P01|P02|P03',1)\n <br/>\n 则结果返回部门为:P01,P02,P03\n <br/>\n "}]},{category:"逻辑函数",categoryCode:"LOGIC",contains:[{name:"AND",intro:"如果所有参数都为真,AND函数返回布尔值true,否则返回布尔值false",usage:"AND(逻辑表达式1,逻辑表达式2,...)",example:"AND(语文成绩>90,数学成绩>90,英语成绩>90),如果三门课成绩都>90,返回true,否则返回false"},{name:"OR",intro:"如果任意参数为真,OR 函数返回布尔值true;如果所有参数为假,返回布尔值false",usage:"OR(逻辑表达式1,逻辑表达式2,...)",example:"OR(语文成绩>90,数学成绩>90,英语成绩>90),任何一门课成绩> 90,返回true,否则返回false"},{name:"IF",intro:"IF函数判断一个条件能否满足;如果满足返回一个值,如果不满足则返回另外一个值",usage:"IF(逻辑表达式,为true时返回的值,为false时返回的值)",example:'IF(语文成绩>60,"及格","不及格"),当语文成绩>60时返回及格,否则返回不及格。'},{name:"IN",intro:"IN函数用于判断目标对象,是否包含在当前限定的范围内,包含则返回true,不包含返回false",usage:"用法:IN(表名称.字段名称,'参数1','参数2','参数3'......)",example:"示例:in(组织表.区域,'上海','成都','北京'),判断组织表.区域在上海、成都、北京,符合返回true,否则返回false"}]},{category:"工时计算函数",categoryCode:"SHIFTTIMECALC",contains:[{name:"MANHOURS",intro:"MANHOURS函数用于工时(取各类型时段的并集)\n <br/>\n 函数包含5个参数可配置:打卡时数;是否加上休假时段;是否加上公出时段;是否加上加班时段;指定日历类型(0点拆分)\n <br/>\n 规则:\n <br/>\n 打卡时段+所有休假时段/指定休假项目时段+所有公出时段/指定公出项目时段+所有加班时段\n <br/>\n 日历类型:0代表获取所有日历类型,1代表获取工作日,2代表获取公休日,3代表获取节假日\n ",usage:"MANHOURS(0,0,0,0,0)\n <br/>\n 0代表关闭参数;1代表开启参数;选择项目代表指定项目,多个项目“/”分隔\n <br/>\n 返回 计算结果\n <br/>\n ",example:"\n 示例1:\n <br/>\n 计算工时:MANHOURS(1,1,0,0,0)\n <br/>\n 结果返回,打卡时数+所有休假时数(取并集)\n <br/>\n 示例2:\n <br/>\n 计算工时:MANHOURS(1,年假/事假,0,0,0)\n <br/>\n 结果返回,打卡时数+休假项目年假/事假的时数(取并集)\n <br/>"}]},{category:"日期间天数计算函数",categoryCode:"DATECALC",contains:[{name:"Daycalculation",intro:"Daycalculation用于计算日期之间天数:\n <br/>\n 包含4个参数:开始日期;是否包含开始日期;结束日期;是否包含结束日期\n <br/>\n \n ",usage:"Daycalculation(开始日期,0,结束日期,0)\n\n <br/>\n 第一个参数:选择开始日期字段\n <br/>\n 第二个参数:是否包含开始日期,1代表包含,0代表不包含\n <br/>\n 第三个参数:选择结束日期字段\n <br/>\n 第四个参数:是否包含结束日期,1代表包含,0代表不包含\n <br/>\n ",example:"配置:Daycalculation(开始日期,1,结束日期,1)\n <br/>\n 开始日期=10/1\n <br/>\n 结束日期=10/3\n <br/>\n 结果输出=3\n <br/>\n "}]},{category:"内置函数",categoryCode:"BUILTIN",contains:[{name:"VERIFICATION",intro:"VERIFICATION用于未打卡验证:\n <br/>\n 验证上班后或下班前指定时间内未进行打卡,且期间休假公出记录未全覆盖时则计未打卡\n <br/>\n 函数包含4个参数:\n <br/>\n ",usage:"\n 第一个参数:配置未打卡统计时长,大写X代表获取最大迟到或早退数;输入数字代表指定时长,小于0的数字按0处理(若开启弹性打卡,系统将根据弹性规则动态计算)\n <br/>\n 第二个参数:配置休假记录参与覆盖计算,1代表开启,0代表关闭\n <br/>\n 第三个参数:配置公出记录参与覆盖计算,1代表开启,0代表关闭\n <br/>\n 第四个参数:配置时段间容差分钟数,小于0的数字按0处理\n <br/>\n ",example:"若上班未打卡配置(X,1,1,0)\n <br/>\n 则在最大迟到数之间未打卡;或打卡加上休假,公出未完全覆盖上班段,则计未打卡\n <br/>\n "}]},{category:"编制相关",categoryCode:"PREPARATION",contains:[{name:"PositionHeadcount",intro:"PositionHeadcount函数用于表单字段获取当前自定义维度职位编制相关数:\n <br/>\n 包含2个参数:1,获取对象;2,获取值类型\n <br/>\n ",usage:"\n <br/>\n 第一个参数获取对象:需填写对应表单的字段编码,字段必须是职位单选组件型字段,用于对应需获取编制所对应的组织\n <br/>\n 第二个参数获取值类型:输入“1”代表获取当前职位编制数;输入“2”代表获取当前职位在编数;输入“3”代表获取当前职位占编数;输入“4”代表获取当前职位缺编数;输入“5”代表获取当前职位超编数\n <br/>\n 前置条件:\n <br/>\n 需当前启用自定义维度编制,且末级统计维度为职位\n <br/>\n ",example:"\n <br/>\n 若设置PositionHeadcount(applyinfo$employeebasic$positionid$empmobilize,1)\n <br/>\n 则获取当前表单applyinfo$employeebasic$positionid$empmobilize字段下所选职位的编制数\n <br/>\n "}]}],this.FormulaEditor={CONST:{NAME_FILED_CLS:"cm-field-name",VALUE_FIELD_CLS:"cm-field-value",INVALID_FIELD_CLS:"cm-field-invalid",DEPRECATE_FIELD_CLS:"cm-deprecate",NEGATIVE_FIELD_CLS:"cm-negative",FIELD_REG:/^\$(_widget_*|_formula_[0-9]{13}|ext|createTime|updateTime|creator|wx_open_id|wx_nickname|wx_gender)/},COMMON_REG:{VALIDATOR_FORMULA:"(\\$[0-9a-zA-Z._]+#)",FORM_FORMULA:"(\\$[0-9a-zA-Z._#@]+)",NEW_LINE:"[\\r\\n]"}},this.Utils={},this.Formula={};var d=this;d.Utils={isString:function(n){return"string"==typeof n},isNumber:function(n){d.Utils.isNumeric(n)},isFunction:function(n){return this.isFunction(n)},isDate:function(n){return n instanceof Date},isArray:function(n){return this.isArray(n)},isEmpty:function(n){return""===n||d.Utils.isNull(n)},isBlank:function(n){return d.Utils.isNull(n)||""===n.trim()},isNull:function(n){return null==n},isObjectEmpty:function(n){if(null==n)return!0;if(0<n.length)return!1;if(0===n.length)return!0;for(var t in n)return!this.hasOwnProperty.call(n,t)&&isNaN(n)},isValueWidget:function(n){return!!this.ValueWidgets[n]},address2Str:function(n,t,e){var i;return e&&n&&(i=!(t=""),/p/.test(e)&&n.province&&(t+=n.province,n.province===n.city&&(i=!1)),/c/.test(e)&&n.city&&i&&(t+=n.city),/d/.test(e)&&n.district&&(t+=n.district),/a/.test(e)&&n.detail&&(t+=n.detail)),t},num2Str:function(n,t){if(d.Utils.isEmpty(n))return"";var e=n+"";if(d.Utils.isEmpty(t))return e;if((i=/\[Num0\]/).test(t))return t.replace(i,e);if((i=/\[Num1\]/).test(t))return t.replace(i,d.Utils._num2CN(e,!1));if((i=/\[Num2\]/).test(t))return t.replace(i,d.Utils._num2CN(e,!0));var i=/[#0]+,?[#0]*\.?[#0]*%?/,r=t.match(i);if(r&&0<r.length){r=r[0],e=d.Utils._numberFormat(n,r);return t.replace(i,e)}return t},_numberFormat:function(n,t){var e,i="",r=n+"";/%$/.test(t)&&(n*=100,t=t.replace(i="%",""),-1<(e=r.indexOf("."))&&(o=(o=r.length-3-e)<0?0:8<o?8:o,n=parseFloat(n.toFixed(o))),r=n+"");var o=t.split("."),t=o[0],a=o[1];if(""!==a){for(var s=a?a.length:0,l=(r=parseFloat(n).toFixed(s)).split(""),c=s;0<c&&"#"===a.charAt(c-1);c--){var p=l.pop();if("0"!==p){l.push(p);break}}s=l.pop();"."===s&&(s=""),r=l.join("")+s}s=r.split("."),r=s[0];return/,/.test(t)?s[0]=r.replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,"):(t=t.match(/[0]+[0#]*$/))&&0<t.length&&(s[0]=d.Utils.leftPad(r,t[0].length,"0")),s.join(".")+i},_num2CN:function(n,t){var e="〇一二三四五六七八九",i="个十百千万亿";t&&(e="零壹贰叁肆伍陆柒捌玖",i="个拾佰仟万亿");var r=Math.floor(Math.abs(n)),o=Math.abs(n).toString(),a=o.replace(/\..*$/,""),s=o.split("."),l=e,c=i,p=l[0],o=new RegExp(l[0]+"*$"),e=new RegExp(l[0]+"+","g"),i="",d="",i=n<0?"-."[0]:"";if(2<=s.length){var u=s[1];if(u)for(var d="-."[1],h=0;h<u.length;h++)d+=l[+u[h]]}if(1==a.length)return i+l[r]+d;if(a.length<=5){for(var g="",f=0,r=a.length;r--;){var m=+a[f];g+=this._num2CN(a[f],t)+(m&&r?c[r]:""),f++}return i+(g=(g=g.replace(e,p)).replace(o,""))+d}for(var y=a.length/4>>0,b=a.length%4,g="";0==b||!c[3+y];)b+=4,y--;return+a.substr(0,b)?(g=this._num2CN(a.substr(0,b),t)+c[3+y],"0"===(s=a.substr(b))[0]&&(g+=l[0]),g+=this._num2CN(s,t)):g=this._num2CN(a.substr(0,b),t)+this._num2CN(a.substr(b),t),i+(g=(g=g.replace(e,p)).replace(o,""))+d},date2Str:function(n,t){if(!n)return"";var e=t.length,i="";if(0<e){for(var r=t.charAt(0),o=0,a=r,s=1;s<e;s++){var l=t.charAt(s);r!==l?(i+=d.Utils._compileDateFormat({"char":r,str:a,len:s-o},n),o=s,a=r=l):a+=l}i+=d.Utils._compileDateFormat({"char":r,str:a,len:e-o},n)}return i},_compileDateFormat:function(n,t){var e=n.str,i=n.len;switch(n["char"]){case"E":break;case"y":e=i<=3?(t.getFullYear()+"").slice(2,4):t.getFullYear();break;case"M":break;case"d":e=1<i?d.Utils.leftPad(t.getDate()+"",2,"0"):t.getDate();break;case"h":var r=t.getHours()%12;0===r&&(r=12),e=1<i?d.Utils.leftPad(r+"",2,"0"):r;break;case"H":e=1<i?d.Utils.leftPad(t.getHours()+"",2,"0"):t.getHours();break;case"m":e=1<i?d.Utils.leftPad(t.getMinutes()+"",2,"0"):t.getMinutes();break;case"s":e=1<i?d.Utils.leftPad(t.getSeconds()+"",2,"0"):t.getSeconds();break;case"a":e=t.getHours()<12?"am":"pm";break;default:e=n.str}return e},pick:function(e,n){var i={};return d.Utils.forEach(n,function(n,t){t in e&&(i[t]=e[t])}),i},applyFunc:function(n,t,e,i){return d.Utils.isFunction(t)?t.apply(n,e||[]):i},forEach:function(n,t){if(Array.isArray(n))for(var e=0,i=n.length;e<i&&!1!==t.apply(n[e],[e,n[e]]);e++);else if(n&&"object"==typeof n)for(var r in n)if(n.hasOwnProperty(r)&&!1===t.apply(n[r],[r,n[r]]))break},flatten:function(n,t,e){if(e=e||[],n)for(var i=0,r=n.length;i<r;i++){var o=n[i];Array.isArray(o)?d.Utils.flatten(o,t,e):t&&!t(o)||e.push(o)}return e},applyCss:function(n,t){d.Utils.isEmpty(t)||(d.Utils.isString(t)?n.addClass(t):n.css(t))},getServerDate:function(n){n&&n.getResponseHeader&&((n=n.getResponseHeader("date"))&&(this.STATIC._st=new Date(n).getTime(),this.STATIC._ct=(new Date).getTime()))},getUrlParameter:function(n){for(var t=window.location.search.substring(1).split("&"),e=0;e<t.length;e++){var i=t[e].split("=");if(i[0]==n)return i[1]}return null},validateEmail:function(n){return/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(n)},redirectTo:function(n){window.location.href=n},isCanvasSupported:function(){var n=document.createElement("canvas");return!(!n.getContext||!n.getContext("2d"))},isFormDataSupported:function(){return!0},getFileDownloadURL:function(n,t,e){switch(n.bucket){case this.CONST.QN_BUCKET.PUBLIC_IMAGE:var i="",r=n.thumb;return r&&(i="?imageView2/"+r.mode+"/w/"+r.width+"/h/"+r.height),t(this.CONFIG.HOST.IMAGE_HOST+"/"+n.qnKey+i);case this.CONST.OSS_BUCKET.PUBLIC_IMAGE:return t(this.CONFIG.HOST.OSS_IMAGE_HOST+"/"+n.ossKey);default:this.CONST.QN_BUCKET.PRIVATE_FILE;return e()}},evalFormula:function(n){var e=[];d.Utils.forEach(Object.keys(this.Formula),function(n,t){e.push("let "+t+"=fml.Formula."+t)});var t=e.join(";")+";";return new Function(t+"return "+n)()},createEntryAttributeField:function(n,t){var e={id:t.entryId};switch(n){case"ext":this.extend(e,{name:"ext",type:"text",text:"扩展字段",items:t.extParams});break;case"createTime":this.extend(e,{name:"createTime",type:"datetime",format:"yyyy-MM-dd HH:mm:ss",text:"提交时间"});break;case"updateTime":this.extend(e,{name:"updateTime",type:"datetime",format:"yyyy-MM-dd HH:mm:ss",text:"更新时间"});break;case"creator":this.extend(e,{name:"creator",type:"text",text:"提交人"});break;case"flowState":this.extend(e,{name:"flowState",type:"flowState",text:"流程状态"});break;case"chargers":this.extend(e,{name:"chargers",type:"chargers",text:"当前节点/负责人"});break;case"deleter":this.extend(e,{name:"deleter",type:"text",text:"删除人"});break;case"deleteTime":this.extend(e,{name:"deleteTime",type:"datetime",format:"yyyy-MM-dd HH:mm:ss",text:"删除时间"});break;default:return null}return e},createWidgetName:function(){return"_widget_"+this.STATIC.IDBase++},formatFileSize:function(n){return d.Utils.isNumber(n)?1e9<=n?(n/1e9).toFixed(2)+" GB":1e6<=n?(n/1e6).toFixed(2)+" MB":(n/1e3).toFixed(2)+" KB":"未知"},chunkArray:function(n,t){var e=[];if(!t||!n.length)return e;for(var i=0,r=n.length;i<r;i+=t){var o=n.slice(i,i+t);e.push(o)}return e},UUID:function(n){return null},GCD:function(n,t){return t?this.GCD(t,n%t):n},LCM:function(n,t){return n*t/this.GCD(n,t)},fixDecimalPrecision:function(n,t){var e,i=0;return t=t||8,this.isEmpty(n)||(e=parseFloat(n),isNaN(e)||(i==(n=(e+"").split(".")[1])&&n.length>t&&parseFloat(e.toFixed(t)),6<t&&Math.abs(i)<1&&/e-/.test(i+"")&&(i=parseFloat(e.toFixed(6))))),i},getSelectionText:function(){return null},getCorpType:function(n){return n?(n=n.toLowerCase(),/^ding/.test(n)?"dingtalk":/^w/.test(n)?"wechat":"internal"):null},isCorpSuiteAdmin:function(n){return n&&("dingtalk"===n||"wechat"===n)},getWeekStartDate:function(n){var t=n.getDay();return 0===t&&(t=7),new Date(n.getFullYear(),n.getMonth(),n.getDate()-(t-1))},getWeekEndDate:function(n){var t=n.getDay();return 0===t&&(t=7),new Date(n.getFullYear(),n.getMonth(),n.getDate()+(7-t))},getMonthStartDate:function(n){return new Date(n.getFullYear(),n.getMonth(),1)},getMonthEndDate:function(n){return new Date(n.getFullYear(),n.getMonth()+1,0)},setPageTitle:function(n){d.Utils.isEmpty(n)||(document.title=n)},createMask:function(n,t){var e=this('<div class="x-window-mask"/>'),t=t||{};return t.isModal&&e.addClass("modal"),t.isLight?e.addClass("light"):t.isDark&&e.addClass("dark"),t.hasLoader&&(t=!t.isDark,this.createLoadIcon(e,t)),n&&e.css({"z-index":this.STATIC.zIndex++}).appendTo(n),e},createLoadIcon:function(n,t){n=this('<div class="x-loader-icon"/>').appendTo(n);return t&&n.addClass("colorful"),this("<div/>").appendTo(n),n},doPrint:function(n,t){this("body").children("div").addClass("x-ui-notprint");var e=this("#x-printer").removeClass().empty();0===e.length&&(e=this('<div id="x-printer"/>').appendTo("body")),n&&e.append(n),t=d.Utils.isNull(t)?0:t,setTimeout(function(){window.print()},t)},cancelPrint:function(){this("body").children(".x-ui-notprint").removeClass("x-ui-notprint"),this("#x-printer").remove()},copyToClipboard:function(n,t){if(n&&n.length){var e,i=document.createElement("textarea");i.style.background="transparent",i.style.color="transparent",i.value=n,document.body.appendChild(i),i.select();try{e=document.execCommand("copy")}catch(n){e=!1}document.body.removeChild(i),e&&d.Utils.applyFunc(this,t,[],!1)}},getColorNumber:function(n){return d.Utils.isEmpty(n)?1:parseInt(n.toString().substring(0,8),16)%6+1},getFieldAttr:function(e,i){var r=this;if(!d.Utils.isValueWidget(e.widget.type))return null;if(i&&i.indexOf(e.widget.type)<0)return null;var n={id:e.formId,text:e.label,name:e.widget.widgetName,type:e.widget.type};switch(e.widget.type){case"subform":var o=[];d.Utils.forEach(this,e.widget.items,function(n,t){r.extend(t,{formId:e.formId});t=d.Utils.getFieldAttr(t,i);t&&(r.extend(t,{subform:e.widget.widgetName}),o.push(t))}),this.extend(n,{items:o});break;case"linkdata":this.extend(n,{linkForm:e.widget.linkForm,linkFields:e.widget.linkFields,refAppId:e.widget.refAppId});break;case"combo":case"combocheck":case"radiogroup":case"checkboxgroup":this.extend(n,{"async":e.widget["async"],items:e.widget.items});break;case"datetime":this.extend(n,{format:e.widget.format})}return n},leftPad:function(n,t,e){var i=String(n);for(e=e||" ";i.length<t;)i=e+i;return i.toString()},startWith:function(n,t){var e=n.length;return!(null==t||""==t||0===e||t.length>e)&&n.substr(0,t.length)==t},getFieldInfoByFormula:function(n){var e={},n=(n+"").match(/(\$[0-9a-zA-Z\._]+)(#[0-9a-f]+)?(@[0-9a-f]+)?/),i=["","field","entryId","appId"];return d.Utils.forEach(n,function(n,t){0!==n&&t&&(e[i[n]]=t.substr(1))}),e},getFieldInfoById:function(n){var e={},n=(n="#"+n).match(/(#[0-9a-f]+)(@[0-9a-f]+)?/),i=["","entryId","appId"];return d.Utils.forEach(n,function(n,t){0!==n&&t&&(e[i[n]]=t.substr(1))}),e},isWpsWebView:function(){return/wpscloudform/.test(navigator.userAgent)},callWPSAPI:function(n){},onWPSPageUnload:function(n,t){n?this.Msg.alert({type:"warning",msg:"当前页面未保存,是否确定离开?",text4Ok:"离开",text4Cancel:"取消",onOk:function(){d.Utils.applyFunc(this,t,[],!1)}}):d.Utils.applyFunc(this,t,[],!1)},fileDownload:function(n,t){},isSupportPdf:function(){return!1},dt:function(n,t){n&&(n=["e="+n,"t="+(new Date).getTime()],d.Utils.isEmpty(t)||n.push("ext="+t),this.STATIC.user&&this.STATIC.user.username&&n.push("u="+this.STATIC.user.username),(new Image).src=this.CONFIG.HOST.TRACK_HOST+"/log?"+n.join("&"))}},this.Formula={ABNORMALHD:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(!n[t])return!1;return!0},ABNORMALAD:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},ATTENDANCE1:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},ATTENDANCE2:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},PRECISION:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},MANHOURS:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},Daycalculation:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},VERIFICATION:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},PositionHeadcount:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},Daycompute:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},Hourcalculation:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},SUM:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},AND:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(!n[t])return!1;return!0},OR:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},CalendarDay:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},IF:function(n,t,e){return n?t:e},IN:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1},DepartmentScope:function(){for(var n=d.Utils.flatten(arguments),t=0,e=n.length;t<e;t++)if(n[t])return!0;return!1}}};function I(t,n){var e=[];return null!=t&&""!==t&&(n.formFields&&null!==n.formFields&&0<n.formFields.length&&n.formFields.forEach(function(n){-1<n.label.indexOf(t)&&e.push(n)}),n.tableList&&null!==n.tableList&&0<n.tableList.length&&n.tableList.forEach(function(n){n.fields.forEach(function(n){-1<n.label.indexOf(t)&&e.push(n)})})),e}var E=require("codemirror/lib/codemirror"),T=(Object.defineProperty(F.prototype,"options",{set:function(n){this._options=n,!this._differ&&n&&(this._differ=this._differs.find(n).create())},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"fieldData",{get:function(){return this._fieldData},set:function(n){var t=this;this.itemTitle.tablesName||(this.itemTitle.tablesName="加班/休假/公出项目"),this.itemTitle.fieldsName||(this.itemTitle.fieldsName="分析项目"),this._fieldData=n,Array.isArray(n)&&n.length?n.forEach(function(n){n&&n.formFields&&Array.isArray(n.formFields)&&n.formFields.forEach(function(n){t.labelMap["$_widget_"+n.key+"#"]=n.label}),n&&n.tableList&&Array.isArray(n.tableList)&&n.tableList.forEach(function(n){n&&n.fields&&Array.isArray(n.fields)&&n.fields.forEach(function(n){t.labelMap["$_widget_"+n.key+"#"]=n.label})})}):(n&&n.formFields&&Array.isArray(n.formFields)&&n.formFields.forEach(function(n){t.labelMap["$_widget_"+n.key+"#"]=n.label}),n&&n.tableList&&Array.isArray(n.tableList)&&n.tableList.forEach(function(n){n&&n.fields&&Array.isArray(n.fields)&&n.fields.forEach(function(n){t.labelMap["$_widget_"+n.key+"#"]=n.label})}))},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"dateType",{get:function(){return Array.isArray(this.fieldData)?"array":"object"},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"variableSearch",{get:function(){return this._variableSearch},set:function(n){var t,e,i="array"===this.dateType?(t=n,i=this.fieldData,e=[],i.map(function(n){n=I(t,n);0<n.length&&(e=k(e,n))}),e):I(n,this.fieldData);this.variableSearchList=i,this._variableSearch=n},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"usageFunSearch",{get:function(){return this._usageFunSearch},set:function(n){var t,e,i;this.usageFunSearchList=(t=n,e=this.FormulaUsage,i=[],null!=t&&""!==t&&(new A,e.forEach(function(n){n.contains.forEach(function(n){-1<n.name.indexOf(t.toUpperCase())&&i.push(n)})})),i),this._usageFunSearch=n},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"globalCategorys",{get:function(){var t=[];return z.forEach(this.fml.FormulaUsage,function(n){t.push({name:n.category,code:n.categoryCode,items:z.flatMap(n.contains,function(n){return n.name})})}),t},enumerable:!0,configurable:!0}),Object.defineProperty(F.prototype,"codeMirrorGlobal",{get:function(){return this._codeMirror||(this._codeMirror=void 0!==E?E:require("codemirror"),this._codeMirror)},enumerable:!0,configurable:!0}),F.prototype.ngOnInit=function(){this.nzConfigService.set("message",{nzMaxStack:1,nzAnimate:!1})},F.prototype.filterUsageByBlackList=function(n){var i=this,r=[];return n.forEach(function(e){e.contains.forEach(function(n){var t;z.indexOf(i.blacklist,n.name)<0&&(-1<r.findIndex(function(n){return n.category===e.category})?(t=r.findIndex(function(n){return n.category===e.category}),r[t].contains.push(n)):((t={category:e.category,contains:[]}).contains.push(n),r.push(t)))})}),r},F.prototype.resolveDisplayFormula=function(){console.log("resolveDisplayFormula");var t,e=[];return this.type&&!z.isEmpty(this.type)?(e=this.typeList[this.type])||[]:(this.categorys&&Array.isArray(this.categorys)&&(t=z.keyBy(this.categorys,function(n){return n}),this.globalCategorys.map(function(n){n.items&&t[n.code]&&(e=e.concat(n.items))})),e||[])},F.prototype.resolveFomulaContext=function(){var t=[];return this.FormulaUsage?(this.FormulaUsage.map(function(n){n=z.flatMap(n.contains,function(n){return n.name});t.push.apply(t,k(n))}),this._fomulaContext=t):t},F.prototype.ngAfterViewInit=function(){var r,e=this,n=z.cloneDeep(this.fml.FormulaUsage),t=this.resolveDisplayFormula(),i=this.blacklist||[];"attendance-items"!=this.type&&i.push("CalendarDay","IN","DepartmentScope"),"Daycalculation"!=this.type&&i.push("Daycompute","Hourcalculation","SUM","PositionHeadcount"),this.blacklist&&Array.isArray(this.blacklist)&&(n=this.filterUsageByBlackList(n)),t&&0<t.length?z.isEmpty(t=t)?this.FormulaUsage=n:(r=[],t.forEach(function(i){n.forEach(function(e){e.contains.forEach(function(n){var t;n.name===i&&(-1<r.findIndex(function(n){return n.category===e.category})?(t=r.findIndex(function(n){return n.category===e.category}),r[t].contains.push(n)):((t={category:e.category,contains:[]}).contains.push(n),r.push(t)))})})}),this.FormulaUsage=r):this.FormulaUsage=n.filter(function(n){return"PositionHeadcount"!==n.contains[0].name}),this.ref&&this._ngZone.runOutsideAngular(function(){e.codeMirror=e.codeMirrorGlobal.fromTextArea(e.ref.nativeElement,e._options),e.codeMirror.on("cursorActivity",function(n){return e._ngZone.run(function(){return e.cursorActive(n)})}),e.codeMirror.on("scroll",e.scrollChanged.bind(e)),e.codeMirror.on("blur",function(){return e._ngZone.run(function(){return e.focusChanged(!1)})}),e.codeMirror.on("focus",function(){return e._ngZone.run(function(){return e.focusChanged(!0)})}),e.codeMirror.on("change",function(n,t){e._ngZone.run(function(){return e.codemirrorValueChanged(n,t)})}),e.codeMirror.on("drop",function(n,t){e._ngZone.run(function(){return e.dropFiles(n,t)})}),e.codeMirror.setValue(e.value),E.fomulaContext=Object.keys(e.fml.Formula)})},F.prototype.ngDoCheck=function(){var n,t=this;!this._differ||(n=this._differ.diff(this._options))&&(n.forEachChangedItem(function(n){return t.setOptionIfChanged(n.key,n.currentValue)}),n.forEachAddedItem(function(n){return t.setOptionIfChanged(n.key,n.currentValue)}),n.forEachRemovedItem(function(n){return t.setOptionIfChanged(n.key,n.currentValue)}))},F.prototype.ngOnDestroy=function(){this.codeMirror&&this.codeMirror.toTextArea()},F.prototype.codemirrorValueChanged=function(n,t){var e=this;"complete"!==t.origin?n.showHint({hint:E.hint.formula,completeSingle:!1,shown:function(){},select:function(n,t){},pick:function(n){}}):this.insertBarcket(),setTimeout(function(){e.getValue()},0)},F.prototype.setOptionIfChanged=function(n,t){this.codeMirror&&this.codeMirror.setOption(n,t)},F.prototype.focusChanged=function(n){this.onTouched(),this.isFocused=n,this.focusChange.emit(n)},F.prototype.scrollChanged=function(n){this.scroll.emit(n.getScrollInfo())},F.prototype.cursorActive=function(n){this.cursorActivity.emit(n)},F.prototype.dropFiles=function(n,t){this.drop.emit([n,t])},F.prototype.writeValue=function(n){null!==n&&n!==undefined?(this.value=n,this.setValue()):this.codeMirror&&this.codeMirror.setValue("")},F.prototype.registerOnChange=function(n){this.onChange=n},F.prototype.registerOnTouched=function(n){this.onTouched=n},F.prototype.setDisabledState=function(n){this.disabled=n,this.setOptionIfChanged("readOnly",this.disabled)},F.prototype.usageMouseover=function(n){this.usageDescription='\n <div class="formula-title">'+n.name+'</div>\n <ul class="intro-wrapper">\n <li class="intro">\n '+n.intro+'\n </li>\n <li class="usage">\n 用法:'+n.usage+'\n </li>\n <li class="example">示例:'+n.example+"</li>\n </ul>\n "},F.prototype.insertUsageFun=function(n){this.codeMirror&&null!==this.codeMirror&&(this.codeMirror.getCursor(),this.codeMirror.replaceSelection(""+n.name),this.codeMirror.getCursor(),this.insertBarcket(),this.getValue())},F.prototype.insertField=function(n){var t;this.codeMirror&&null!==this.codeMirror&&(t=this.codeMirror.getCursor(),this.codeMirror.replaceSelection(""+n.label),n={from:t,to:this.codeMirror.getCursor(),key:"$_widget_"+n.key+"#",label:n.label},this.markField(n),this.codeMirror.focus(),this.getValue())},F.prototype.copy=function(){var n;""+this.value?(n=z.cloneDeep(this.value).replace("↵",""),localStorage.setItem("codemirror",n),this.message.success("复制成功")):this.message.warning("公式为空,请配置公式后复制")},F.prototype.paste=function(){localStorage.getItem("codemirror")?(this.value?this.value=""+this.value+localStorage.getItem("codemirror"):this.value=localStorage.getItem("codemirror"),this.setValue(),this.message.success("粘贴成功")):this.message.warning("没有需要粘贴的数据,请先复制")},F.prototype.markField=function(n){var t;this.codeMirror&&null!==this.codeMirror&&((t=document.createElement("span")).innerHTML=n.label,t.className="cm-field cm-field-value",t.setAttribute("field-key",n.key),this.codeMirror.markText(n.from,n.to,{handleMouseEvents:!0,atomic:!0,replacedWith:t}),this.codeMirror.getCursor())},F.prototype.insertBarcket=function(){var n;this.codeMirror&&null!==this.codeMirror&&(this.codeMirror.getCursor(),this.codeMirror.replaceSelection("("),n=this.codeMirror.getCursor(),this.codeMirror.getCursor(),this.codeMirror.replaceSelection(")"),this.codeMirror.getCursor(),this.codeMirror.setCursor(n),this.codeMirror.focus())},F.prototype.getValue=function(){var e=this,i=[],n=this.el.nativeElement.querySelectorAll(".CodeMirror-line");this.fml.Utils.forEach(n,function(n,t){e.fml.Utils.forEach(t.children,function(n,t){e.fml.Utils.forEach(t.children,function(n,t){t.getAttribute("cm-text")!==undefined&&null!==t.getAttribute("cm-text")?i.push("↵"):"CodeMirror-widget"===t.className?e.fml.Utils.forEach(t.children,function(n,t){t.getAttribute("field-key")!==undefined&&null!==t.getAttribute("field-key")?i.push(t.getAttribute("field-key")):i.push(t.innerText)}):i.push(t.innerText)})})}),"↵"===i[0]&&i.splice(0,1),this.value=i.join(""),this.codeMirror&&this.textChange.emit(this.codeMirror.getValue()),this.onChange(this.value)},F.prototype.fakeLabel=function(n){return n?n.replace(/[\[\]()'"]/g," "):""},F.prototype.setValue=function(){var t,c,n,p=this;this.value!==undefined&&null!==this.value&&""!==this.value&&(t=[],c=[],n=this.value.split("\n"),this.fml.Utils.forEach(n,function(s,n){var l="",n=n.split(new RegExp(p.fml.FormulaEditor.COMMON_REG.FORM_FORMULA,"g"));p.fml.Utils.forEach(n,function(n,t){var e,i,r,o,a;p.fml.FormulaEditor.CONST.FIELD_REG.test(t)?(i=!1,p.labelMap&&(e=p.labelMap[t]||" ")&&(e=p.fakeLabel(e),i=!0),p.fml.Utils.isNull(e)&&(e=1),r=(a=t.replace("$","").split("#"))[0],a[1],o=E.Pos(s,l.length),l+=e,a=E.Pos(s,l.length),c.push({from:o,to:a,key:"$"+r+"#",label:i?p.labelMap[t]||"":null})):l+=t}),t.push(l)}),this.codeMirror&&(this.codeMirror.setValue(t.join("\n")),this.fml.Utils.forEach(c,function(n,t){p.markField(t)})))},F.decorators=[{type:S.Component,args:[{selector:"deon-codemirror",template:'<div class="formula-head">\n <div class="formula-title">\n <span class="formula-name">{{ title }}</span\n ><span class="formula-equal">=</span>\n </div>\n <div class="formula-textarea">\n <textarea [name]="name" autocomplete="off" [autofocus]="autoFocus" #ref>\n </textarea>\n <div class="btn-box">\n <button\n nz-tooltip\n nzTooltipTitle="复制"\n nzOverlayClassName=" shiftMark-tooltip"\n (click)="copy()"\n class="copy"\n nz-button\n type="button"\n nzSize="small"\n >\n \x3c!-- [ngxClipboard]=\'value\'\n (cbOnSuccess)=\'successFun($event)\'\n (cbOnError)=\'errorFun($event)\' --\x3e\n <i nz-icon nzType="copy"></i>\n </button>\n <button\n nz-tooltip\n nzTooltipTitle="粘贴"\n nzOverlayClassName=" shiftMark-tooltip"\n (click)="paste()"\n nzSize="small"\n class="paste"\n type="button"\n nz-button\n >\n <i class="icon-other-WenBen"></i>\n </button>\n </div>\n </div>\n</div>\n<div class="formula-wrapper">\n <div class="field-list">\n <div class="field-label">可用变量</div>\n <div class="field-main">\n <div class="formula-search">\n <nz-input-group\n [nzPrefix]="suffixIconSearch1"\n [nzSuffix]="inputClearTpl1"\n >\n <input\n type="text"\n nz-input\n placeholder="搜索可用变量"\n [(ngModel)]="variableSearch"\n />\n </nz-input-group>\n <ng-template #suffixIconSearch1>\n <i nz-icon nzType="search"></i>\n </ng-template>\n <ng-template #inputClearTpl1\n ><i\n nz-icon\n class="ant-input-clear-icon"\n nzType="close-circle"\n *ngIf="variableSearch"\n (click)="variableSearch = \'\'"\n ></i>\n </ng-template>\n </div>\n <div class="formula-collapse">\n <ng-container\n *ngIf="\n variableSearch === null || variableSearch === \'\';\n else varSearchPanel\n "\n >\n \x3c!-- 兼容 {}格式 --\x3e\n <ng-container *ngIf="dateType !== \'array\'; else arrayTemp">\n <ng-container *ngTemplateOutlet="ctx; context: fieldData">\n </ng-container>\n </ng-container>\n </ng-container>\n\n \x3c!-- 数组 st --\x3e\n <ng-template #arrayTemp>\n <ng-container *ngFor="let item of fieldData">\n <ng-container *ngTemplateOutlet="ctx; context: item">\n </ng-container>\n </ng-container>\n </ng-template>\n \x3c!-- 数组 end--\x3e\n\n \x3c!-- content st --\x3e\n <ng-template\n #ctx\n let-filds="formFields"\n let-tl="tableList"\n let-fieldsName="fieldsName"\n let-tablesName="tablesName"\n >\n <nz-collapse nzGhost>\n \x3c!-- formFields --\x3e\n <nz-collapse-panel\n [nzHeader]="fieldsName || itemTitle.fieldsName"\n *ngIf="filds && filds != null && filds.length"\n >\n <ul>\n <li *ngFor="let field of filds" (click)="insertField(field)">\n {{ field.label }}\n </li>\n </ul>\n </nz-collapse-panel>\n\n \x3c!-- tableList --\x3e\n <nz-collapse-panel\n [nzHeader]="tablesName || itemTitle.tablesName"\n *ngIf="tl && tl != null && tl.length"\n >\n <nz-collapse nzGhost>\n <nz-collapse-panel\n *ngFor="let table of tl"\n [nzHeader]="table.label"\n >\n <ul>\n <li\n *ngFor="let field of table.fields"\n (click)="insertField(field)"\n >\n {{ field.label }}\n </li>\n </ul>\n </nz-collapse-panel>\n </nz-collapse>\n </nz-collapse-panel>\n </nz-collapse>\n </ng-template>\n \x3c!-- content end --\x3e\n\n <ng-template #varSearchPanel>\n <ul>\n <li\n *ngFor="let item of variableSearchList"\n (click)="insertField(item)"\n >\n {{ item.label }}\n </li>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n <div class="formula-list">\n <div class="formula-label">函数</div>\n <div class="formula-main">\n <div class="formula-menu">\n <div class="formula-search">\n <nz-input-group\n [nzPrefix]="suffixIconSearch2"\n [nzSuffix]="inputClearTpl2"\n >\n <input\n type="text"\n nz-input\n placeholder="搜索函数"\n [(ngModel)]="usageFunSearch"\n />\n </nz-input-group>\n <ng-template #suffixIconSearch2>\n <i nz-icon nzType="search"></i>\n </ng-template>\n <ng-template #inputClearTpl2\n ><i\n nz-icon\n class="ant-input-clear-icon"\n nzType="close-circle"\n *ngIf="usageFunSearch"\n (click)="usageFunSearch = \'\'"\n ></i>\n </ng-template>\n </div>\n <div class="formula-collapse">\n <nz-collapse\n nzGhost\n *ngIf="\n usageFunSearch === null || usageFunSearch === \'\';\n else searchPanel\n "\n >\n <nz-collapse-panel\n *ngFor="let usage of FormulaUsage"\n [nzHeader]="usage.category"\n >\n <ul>\n <li\n *ngFor="let item of usage.contains"\n (mouseover)="usageMouseover(item)"\n (click)="insertUsageFun(item)"\n >\n {{ item.name }}\n </li>\n </ul>\n </nz-collapse-panel>\n </nz-collapse>\n <ng-template #searchPanel>\n <ul>\n <li\n *ngFor="let item of usageFunSearchList"\n (mouseover)="usageMouseover(item)"\n (click)="insertUsageFun(item)"\n >\n {{ item.name }}\n </li>\n </ul>\n </ng-template>\n </div>\n </div>\n <div\n class="formula-intro"\n [innerHtml]="usageDescription | safeHtml"\n ></div>\n </div>\n </div>\n</div>\n',providers:[{provide:l.NG_VALUE_ACCESSOR,useExisting:S.forwardRef(function(){return F}),multi:!0}],preserveWhitespaces:!1,changeDetection:S.ChangeDetectionStrategy.OnPush}]}],F.ctorParameters=function(){return[{type:S.KeyValueDiffers},{type:S.NgZone},{type:S.ElementRef},{type:x.NzMessageService},{type:t.NzConfigService}]},F.propDecorators={itemTitle:[{type:S.Input}],options:[{type:S.Input}],fieldData:[{type:S.Input}],blacklist:[{type:S.Input}],name:[{type:S.Input}],title:[{type:S.Input}],autoFocus:[{type:S.Input}],type:[{type:S.Input}],categorys:[{type:S.Input}],preserveScrollPosition:[{type:S.Input}],cursorActivity:[{type:S.Output}],focusChange:[{type:S.Output}],scroll:[{type:S.Output}],drop:[{type:S.Output}],textChange:[{type:S.Output}],ref:[{type:S.ViewChild,args:["ref",{"static":!0}]}]},F);function F(n,t,e,i,r){this._differs=n,this._ngZone=t,this.el=e,this.message=i,this.nzConfigService=r,this.itemTitle={tablesName:"加班/休假/公出项目",fieldsName:"分析项目"},this.fml=new A,this.name="codemirror",this.title="",this.autoFocus=!1,this.type="",this.typeList={"attendance-items":["MANHOURS","CalendarDay","PRECISION","DepartmentScope","AND","OR","IF","IN"],Daycalculation:["Daycalculation","Hourcalculation","SUM","Daycompute","PositionHeadcount"]},this.preserveScrollPosition=!1,this.labelMap={},this._fieldData={},this.cursorActivity=new S.EventEmitter,this.focusChange=new S.EventEmitter,this.scroll=new S.EventEmitter,this.drop=new S.EventEmitter,this.textChange=new S.EventEmitter,this.value="",this.disabled=!1,this.isFocused=!1,this.variableSearchList=[],this.usageFunSearchList=[],this.FormulaUsage=[],this._variableSearch=null,this._usageFunSearch=null,this.usageDescription='\n <ul class="intro-wrapper default">\n <li>从左侧面板选择字段名和函数,或输入函数</li>\n <li>公式编辑举例:\n <span class="formula-name">AVERAGE</span>\n (\n <span class="formula-field">语文成绩</span>\n ,\n <span class="formula-field">数学成绩</span>\n )\n </li>\n </ul>\n ',this.onChange=function(n){},this.onTouched=function(){}}var D=(L.decorators=[{type:S.NgModule,args:[{declarations:[T],imports:[a.CommonModule,l.FormsModule,l.ReactiveFormsModule,y.NzInputModule,i.NzCollapseModule,r.NzIconModule,e.KreFormModule,f.NzButtonModule,o.NzToolTipModule],exports:[T],entryComponents:[T],schemas:[S.NO_ERRORS_SCHEMA,S.CUSTOM_ELEMENTS_SCHEMA]}]}],L);function L(){}var N=(_.prototype.ngOnInit=function(){this.graphShape(),this.grahpInit(),this.getHistoryGrahp(),this.graphEvent();for(var n=this.graph.getLeafNodes(),t=0;t<n.length;t++)if("输出"!==n[t].label){this.message.error("界面必须包含输出");break}},_.prototype.grahpInit=function(){var e=this,o=this;this.graph=new s.Graph({container:document.getElementById("graph-container"),grid:!0,history:!0,minimap:{enabled:!0,container:document.getElementById("minimap"),width:198,height:198,padding:10},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:"ctrl",minScale:.5,maxScale:3},connecting:{router:"manhattan",connector:{name:"rounded",args:{radius:8}},anchor:"center",connectionPoint:"anchor",allowBlank:!1,snap:{radius:20},createEdge:function(){return new s.Shape.Edge({attrs:{line:{stroke:"#A2B1C3",strokeWidth:2,targetMarker:{name:"block",width:12,height:8}}},zIndex:0})},validateConnection:function(n){var t=n.sourceView,e=n.targetView,i=n.sourceMagnet,r=n.targetMagnet,n=(n.sourceCell,n.targetCell);if(r&&n&&(o.graph.getIncomingEdges(n)||[]).length>=e.cell.getData().out)return o.message.error("超出out数量"),!1;return t!==e&&(!(!i||"left"===i.getAttribute("port-group"))&&(!(!r||"right"===r.getAttribute("port-group"))&&!!r))}},highlighting:{magnetAdsorbed:{name:"stroke",args:{attrs:{fill:"#5F95FF",stroke:"#5F95FF"}}}},resizing:!0,rotating:!0,selecting:{enabled:!0,rubberband:!0,showNodeSelectionBox:!0},snapline:!0,keyboard:!0,clipboard:!0}),this.stencil=new s.Addon.Stencil({target:this.graph,stencilGraphWidth:200,stencilGraphHeight:180,collapsable:!0,groups:[{title:"数据处理",name:"group1"},{title:"输入输出",name:"group2"}],layoutOptions:{columns:2,columnWidth:80,rowHeight:55},validateNode:function(n){var t=o.graph.getNodes();if(0<t.length)for(var e=0;e<t.length;e++){var i=t[e];if("输出"===n.label&&"输出"===i.label)return!1}return!0},getDropNode:function(n){var t=n.size();return"输入"===n.label&&o.getModal(n.label),"输出"===n.label&&r.attr("body/fill","#ccc"),n.clone().size(1.1*t.width,1.1*t.height)}}),document.getElementById("stencil").appendChild(this.stencil.container);var i={groups:{right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#5F95FF",strokeWidth:1,fill:"#fff",style:{visibility:"hidden"}}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#5F95FF",strokeWidth:1,fill:"#fff",style:{visibility:"hidden"}}}}},items:[{id:"port1",group:"left"},{id:"port2",group:"right"}]},n=this.graph.createNode({shape:"custom-rect",id:"in",label:"输入",ports:M({},{groups:{right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#5F95FF",strokeWidth:1,fill:"#fff",style:{visibility:"hidden"}}}}},items:[{id:"port2",group:"right"}]}),data:{"in":0,out:3}}),r=this.graph.createNode({shape:"custom-rect",id:"out",label:"输出",ports:M({},{groups:{left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#5F95FF",strokeWidth:1,fill:"#fff",style:{visibility:"hidden"}}}}},items:[{id:"port1",group:"left"}]}),data:{"in":2,out:2}}),a=[];this.menuList.forEach(function(n,t){a.push(e.graph.createNode({shape:"custom-rect",label:n.title,ports:M({},i),data:n.data}))}),this.stencil.load([n,r],"group1"),this.stencil.load(k(a),"group2")},_.prototype.graphEvent=function(){var t=this;this.graph.bindKey("backspace",function(){var n=t.graph.getSelectedCells();n.length&&t.graph.removeCells(n)});var e=function(n,t){for(var e=0,i=n.length;e<i;e+=1)n[e].style.visibility=t?"visible":"hidden"};this.graph.on("node:mouseenter",function(){var n=document.getElementById("graph-container").querySelectorAll(".x6-port-body");e(n,!0)}),this.graph.on("node:mouseleave",function(){var n=document.getElementById("graph-container").querySelectorAll(".x6-port-body");e(n,!1)}),this.graph.on("node:click",function(n){n.cell;n=n.view.cell;console.log(n.label),"输入"===n.label?t.getModal(n.label):t.getDrawer(n.label)})},_.prototype.getHistoryGrahp=function(){var n=localStorage.getItem("graphJSON");n&&this.graph.fromJSON(JSON.parse(n))},_.prototype.getModal=function(n){this.modalEvent.emit(n)},_.prototype.getDrawer=function(n){this.drawerEvent.emit(n)},_.prototype.graphShape=function(){s.Graph.registerNode("custom-rect",{inherit:"rect",width:66,height:30,attrs:{body:{strokeWidth:1,stroke:"#eee",fill:"#fff"},text:{fontSize:12,color:"#262626"}}},!0)},_.prototype.handleZoomIn=function(){this.graph.zoom(.1),console.log(this.graph.zoom())},_.prototype.handleZoomOut=function(){this.graph.zoom(-.1)},_.prototype.handleUndo=function(){this.graph.history.undo()},_.prototype.handleRedo=function(){this.graph.history.redo()},_.prototype.handleReal=function(){this.graph.scale(1),this.graph.centerContent()},_.prototype.handleFit=function(){this.graph.zoomToFit({