yyuap-formula
v4.0.26
Published
公式编辑器前端组件
Downloads
45
Readme
欢迎使用公式编辑器
1. 安装(后端注意升级最新版jar包)
第四版公式(优先使用) npm i -S [email protected] (推荐使用)
第三版公式 npm i -S [email protected] (已废弃)
第二版公式 npm i -S [email protected](不再维护)
第一版公式 npm i -S [email protected] (已废弃)
在MDF中使用公式请参考 https://gfwiki.yyrd.com/pages/viewpage.action?pageId=20774831
2. 导入
react:
const Formula = React.lazy(() => import(/* formula */ 'yyuap-formula'))
// import Formula from 'yyuap-formula'
import 'yyuap-formula/dist/main.css'
<script>
<Formula />
</script>
非react:
import Formula from 'yyuap-formula/lib/main.js'
import 'yyuap-formula/lib/main.css'
<script>
<Formula />
</script>
CDN:
// 方式一
先引入react、tinper-next的CDN,再引入以下CDN
<script src="/iuap-apcom-coderule/ucf-wh/formula/without-react/main.js"></script>
<link rel="stylesheet" href="/iuap-apcom-coderule/ucf-wh/formula/without-react/main.css"></link>
webpack配置
externals: isEnvDevelopment ? {} : {
'react': 'React',
'react-dom': 'ReactDOM',
'@tinper/next-ui': 'TinperNext',
'yyuap-formula': 'Formula'
}
module.xml 配置依赖的前端服务名及tagName版本标识
<module name="" description="">
<nginx_mode>ucf</nginx_mode>
<ucf_engine>
<dependencies>
<dependency name="iuap-apcom-coderule-fe" tag="release" />
</dependencies>
</ucf_engine>
</module>
使用方式
const Formula = React.lazy(() => import(/* formula */ 'yyuap-formula'))
// import Formula from 'yyuap-formula'
<script>
<Formula />; // Formula为全局对象 dom为制定dom节点
</script>
// 方式二 (支持非react环境)
<script src="/iuap-apcom-coderule/ucf-wh/formula/main.js"></script>
<link rel="stylesheet" href="/iuap-apcom-coderule/ucf-wh/formula/main.css"></link>
module.xml 配置依赖的前端服务名及tagName版本标识
<module name="" description="">
<nginx_mode>ucf</nginx_mode>
<ucf_engine>
<dependencies>
<dependency name="iuap-apcom-coderule-fe" tag="release" />
</dependencies>
</ucf_engine>
</module>
// 使用方式
<script>
Formula.renderFormula(option, dom); // Formula为全局对象 dom为制定dom节点
</script>
// 第二版本引入(不再维护)
<script src="/iuap-apcom-coderule/ucf-wh/formula2/main.js"></script>
<link rel="stylesheet" href="/iuap-apcom-coderule/ucf-wh/formula2/main.css"></link>
// 以下(cdn.yonyoucloud.com)引入方式已废弃
<script src="https://cdn.yonyoucloud.com/SupportServices/formula4/main.js"></script>
<link rel="stylesheet" href="https://cdn.yonyoucloud.com/SupportServices/formula4/main.css"></link>
<script src="https://cdn.yonyoucloud.com/SupportServices/formula3/main.js"></script>
<link rel="stylesheet" href="https://cdn.yonyoucloud.com/SupportServices/formula3/main.css"></link>
<script src="https://cdn.yonyoucloud.com/SupportServices/formula2/main.js"></script>
<link rel="stylesheet" href="https://cdn.yonyoucloud.com/SupportServices/formula2/main.css"></link>
<script src="https://cdn.yonyoucloud.com/SupportServices/formula/main.js"></script>
<link rel="stylesheet" href="https://cdn.yonyoucloud.com/SupportServices/formula/main.css"></link>
全局绑定对象 Formula 内部能力对应为以下三个参数
- Formula.core -- 核心解析能力 见 chapter3
- Formula.createFormula --- 公式函数式调起 见示例 4
- Formula.renderFormula --- 公式非 react 或非 es 情况下 调用组件方式 见示例 5(同时给出重绘方案)
3. 使用公式核心解析能力
import { core } from 'yyuap-formula'
// 功能1 接受 表达式串(组) 生成 包含 公式数据结构
core.parse:formulaExpression => '公式数据结构'
// 功能2 异步请求 接受公式参数 与 表达式串(组) 生成 包含 公式、翻译公式、含数据的数据结构 的对象(对象数组))
core.ajaxToParse:(option:any, express:Array?<string>) => Array?<{formula,formuladisplay,formulaList}>
// 使用示例
async()=>{
let result = await core.ajaxToParse({serviceName:'iuap-ms-demo'},['code3+123','#{123}$+#{"常量字符串"}$']);
console.log(result)
}
//功能3 前端校验 参数为confirm、onChange参数中获得的 formulaList 或 对公式表达式做解析(功能1)
core.validate : formulaList => [] // 返回错误说明列表
//功能4 异步校验 参数为confirm、onChange参数中获得的 formulaList 与 expressList
core.validateAsync : (formulaList:any,expressList:any,option?:any) => [errFlag,info] // 返回错误说明列表
//功能5 获取公式信息 参数为confirm、onChange参数中获得的 formulaList 与 expressList
core.getFormulaInfo : (formulaList:any,expressList:any,option?:any) => result// 返回结果
// 使用示例
async()=>{
let result1 = await validateAsync(formulaList,expressList,{serviceName:''})
let result2 = await getFormulaInfo(formulaList,expressList,{serviceName:''})
}
//功能6 公式计算 参数1:confirm、onChange参数中获得的 formulaList 或 core.parse的返回值 参数2: paramList 见项目配置项
core.calculate = calculate(formulaList,paramList)
/** 使用说明
* 计算出错会抛出error 需要catch
* 计算成功返回计算值(若带未知函数,则会包含未知函数)
* */
4. 使用代码配置项目
| 必需(版本) | 配置 | 说明 | 类型 | 默认 | 可选值 | | --- | --- | --- | --- | --- | --- | | | locale(新) | 语种信息 | string | 'zh_CN' | ['zh_CN','en_US','zh_TW'] | | √ | serviceName(新) | 应用名(上下文路径,可带域名) | string | '' | | | √4.0.8 | useBusiness(新) | 是否使用业务对象 | Boolean | false | [true,false] | | √2.67 | multiBillNo | 是否多单据 | Boolean | false | [true,false] | | 2.0 | disableDrag(新) | 禁用拖拽(防止拖拽事件冲突) | boolean | false | [true,false] | | | iMaxLength(新) | 确认时最大值控制 | number | undefined | | | | disabled | 禁用 | boolean | false | [true,false] | | 2.4 | inputOpen | 点击输入框是否弹打开弹窗 | boolean | false | [true,false] | | 4.0.10 | showClear | 是否显示清空按钮 | boolean | false | [true,false] | | 4.0.10 | onClear | input框清空回调 | func | ()=>{} | | | | autoFocus | input框自动获取焦点 | boolean | false | [true,false] | | | onFocus\onBlur(新增) | input框焦点事件 | function | (e)=>{} | | | 2.25 | className, mask等 | 支持 modal 参数与 class 名 | any | undefined | any | | | useFC | 是否以函数式调起弹窗 | boolean | false | [true,false] | | 2.0 | uiMode(新) | 是否以 UI 组件形式提供(min 提供较小的面板) | Boolean/string | false | [false,true,"min"] | | 4.0.1 | containerName | 赋值目标 | String | '' | | | | leftPannel | 左侧函数项 | boolean(false隐藏)或array(见下行) | true | | | | 自定义左侧面板项 | 常用函数、数学、字符串、时间、系统、聚合、自定义函数 [''common,'math','string','time','system','aggregate','custom'] | | | | | 2.4 | leftDefaultOpenKey | 左侧函数默认展开项 | string | '' | ['math','string','time','system','aggregate','custom'] | | | funcFilter(新增) | 左侧函数过滤 | (字符串数组 | 正则对象 | 正则字符串) | [] | | | | rightPannel | 右侧变量项 | boolean(false隐藏)或array(见下行) | true | | | | 自定义右侧面板项 | 上下文、元数据、自定义变量、常量、集成对象 ['context','meta','userVar','userConst','extend'] | | | | | 2.4 | rightDefaultOpenKey | 右侧变量默认下拉选项 | string | 'context' | ['context','meta','userVar','userConst'] | | 4.0.1 | activeKey | 默认展示函数还是变量 | String | leftPannel | leftPannel/rightPannel | | 2.35 | showMetaCode | 是否显示属性编码 | Boolean | false | [true,false] | | 4.0.15 | notLimitDrillDown | 是否不限制穿透 | Boolean | false | [true,false] | | √ | requestParams(新) | 提供请求时参数(注意dominkey,serviceCode字段) | object | {func:{a:1,domainKey:'aaa'},meta:{ss:2,domainKey:'aaa'},context:{domainKey:'aaa'},search:{domainKey:'bbb',serviceCode:''}} | | | 2.27 | CompatibleMode | 是否对初始化表达式做格式兼容 | boolean | false | [true,false] | | 2.4 | beforeOpenHook | 打开公式弹窗前 hook 函数 | function | ()=>Boolean 或 Promise | | | | onChange(新) | 编辑区实时数据变化回调 | function | (formulaExpression,formulaList,expressList) =>{} | | | √ | confirm | 确认回调 | function | (formula,formulaList,expressList)=>{} | | | √ | formula | 公式表达式 | string | '' | | | √ | formuladisplay | 公式显示式 | string | '' | | | 2.30 | customShowFn | 自定义变量显示值 | func ({name,code,parentCode,parentName})=>({flag,display}) | | | | | autoCalc | 自动计算 | boolean | false | | | | paramList | 自定计算时变量值(需autoCalc) 支持提供前端函数 | object | {[变量code]:[变量value]} | | | | onTextFocus\onTextBlur(新增) | 编辑区焦点事件 | function | (e)=>{} | | | 2.7 | allowEmpty | 校验支持空值 | Boolean | false | [true,false] | | 2.3 | verifyBeforeConfirm | 保存前校验 | Boolean | false | [true,false] | | | beforeVerify(新增) | 校验前调整参数 | function | (url,params)=>({ url,params,method:'GET' }) | | | 4.0.15 | fieldid | 自动化测试字段 | string | 'formula' | | | 4.0.16 | showFullName | 显示全路径中文 | Boolean | false | [true,false] | | 4.0.18 | token/xChangeInfo | header增加字段 | string | '' | | | 4.0.19 | enhanceValidate | 是否强校验 | Boolean | true | [true,false] | | 4.0.20 | customIsCanInsert | 是否支持插入 | function | (item: any, level: number) => {return true} | | 4.0.22 | customData | 指定业务对象下插入自定义数据 | array | customData | | | | 示例 |[{parentCode: 'PurchaseOrder.operator',parentName: '采购订单主表.采购员',data: [{"name": "id","title": "主键","typeClass": "DataType","fullName": "","entityId": null,"dataType": "String","refCode": null,"properties": []}],mode: 2}]|
| 必需(版本) | 配置 | 说明 | 类型 | 默认 | 可选值 | | --- | --- | --- | --- | --- | --- | | 2.2 | refEnv | 参照对应环境地址(不传感知 url) | string | [] | ['test','daily','pre','product'] | | 2.0 | contextData | 上下文变量 | Array | [] | | | | contextData 说明 1支持树结构 | 节点需 children 属性 节点可增加 disabld 属性 | Array | | | contextData 说明 2支持参照 | 上下文变量中增加 refCode 属性 | string | | refCode 为参照 refCode | | | contextData 说明 3支持枚举 | 上下文变量中增加 enumvalues 属性 | Array | | | 枚举属性支持数字与字符串 | enumvalues:[{"id":1,"name":"数字"},{"id":"str","name":"字符串"}] | Array | | | | | contextData 说明 4元数据穿透 | 上下文变量中增加 metaUri 属性 | string | | 元数据对应的 uri | | | 元数据说明 1元数据级联 | 上下文变量中增加 metaCascade 属性 | number | | 1:开启元数据级联,0:关闭 | | | 元数据说明 2元数据自定义处理 | 上下文变量中增加 handSelfItem 属性 | boolean | | | | 2.36 | extend | 自定义模块 | Object/Array | {title:'t',component:(add,get) => null} | |
- 上下文变量类型说明(1.0.8 特性)(2.0.6 支持 ui 元数据)
| 类型 | 配置 | 说明 |
| --- | --- | --- |
| 变量 | {type:'variable',name: "编码",code: "code" ,paramType: "DOUBLE" }
| type 不传递默认变量 |
| 常量 | {type:'const',code: "code",name: "名字", value: 1}
| value 为 Number 或 String |
| 函数(待定支持) | { type:"func",functionName: "func", methodName: "func(1,2,3,,)" }
| 支持参数传递 |
| 字符串 | {type:'string',code:"\\"specific str\\"" }
| 传入时需用\对引号转义 |
| 保留字 | {type:'reserved',code:"true" }
| 全量['true','false','undefined','null'] |
| 说明 | paramType 取值为全量中的一个 | 全量 [INT, INTEGER, CHAR, VARCHAR,DOUBLE, FLOAT]; |
| ui 元数据(2.0.12 更新) | {"mode":1,"domain"?:String,"billtypeid"?:String,"metaCascade"?:boolean,"data": Array/Object }
| mode 需要设为 1 domain 设为对应领域 billtypeid 为单据类型 metaCascade 是否开启元数据级联(默认关闭) data 为 UI 元数据 需要设置在 context 第一级 |
| | ui 样板数据 http://cdn.yonyoucloud.com/SupportServices/formula2/example.json | |
| 业务对象元数据(2.1.0 更新) | {"mode":2,"businessCode"?:String,"scope"?:String,"scopeList": Array } | mode 需要设为 2 businessCode 业务对象编码 scope 范围(exclude 排除,include 包含,all 所有,默认是all) scopeList 排除或包含的对象数组 |
| | {mode: 2,code: 'case1',name: 'c1测试',disabled: true,children: [{code: 'case2',name: 'c2测试',children: [{ code: 'case21', name: 'c2-1测试' }]}} | mode 需要设为 2, 可扩展自定义的业务对象 |
- confirm 以及 onChange 回掉参数调整(1.0.18) formulaExpression,formulaList,expressList
| 参数 | 类型 | 说明 | 补充 | | --- | --- | --- | --- | | formulaExpression | string | 公式值 | 常用 格式表达式 | | formulaList | array | 公式解析数据结构 | 做前端解析与计算可用 | | expressList | object | 公式各类显示值(原始值,对象化值,自定义值) | 校验与获取中文串 对象属性见示例 iParams 接口 |
5. 使用代码示例
interface iParams {
formulaExpression:string, // 公式值 *
formulaExpressionDisplay:string, // 公式编辑区手工输入值
formulaExpressionShow:string, // 公式中文值(展示值) *
paramType:Array<any>, // 参数类型数组
}
//1:常规公式
function FormulaWrap(props) {
const [formulaExpression, setFormulaExpression] = useState('')
const [formulaExpressionDisplay, setFormulaExpressionDisplay] = useState('')
return (
<Formula
leftPannel={['math', 'string', 'custom']} // 自定义左侧面板 可不传
rightPannel={['context', 'meta', 'userVar', 'userConst']} // 自定义右侧面板 可不传
requestParams={{
func: { a: 1 },
meta: { ss: 2 },
context: { domainKey: 'aaa' },
search: { domainKey: 'aaa' }
}} //请求参数 可不传
disabled // 是否禁用
showMetaCode={true} // 是否显示属性编码
confirm={(formulaExpression: any, formulaList: any, expressList: iParams) => {
setFormulaExpression(formulaExpression);
setFormulaExpressionDisplay(expressList.formulaExpressionShow);
}}
formula={formulaExpression || ''}
formuladisplay={formulaExpressionDisplay || ''}
contextData={[{ code: 'case1', name: 'c1测试', paramType: 'VARCHAR' }]} // 上下文
paramList={{
case1: case1, case2: case2, case3: case3, hehe: (a: any, b: any) => {
return a + 2 * b
}
}}
></Formula>
)
}
//1.2:常规公式 支持树、参照、枚举
function FormulaWrap(props) {
const [formulaExpression, setFormulaExpression] = useState('')
const [formulaExpressionDisplay, setFormulaExpressionDisplay] = useState('')
return (
<Formula
confirm={(formulaExpression: any, formulaList: any, expressList: iParams) => {
setFormulaExpression(formulaExpression);
setFormulaExpressionDisplay(expressList.formulaExpressionShow);
}}
formula={formulaExpression || ''}
formuladisplay={formulaExpressionDisplay || ''}
contextData={[
{ disabled: true, code: 'ref1', name: '组织', paramType: 'STRING', refCode: 'ucf-org-center.bd_adminorgtreeviewref' },
{ code: 'ref2', name: '库存', paramType: 'STRING', refCode: 'ustock.aa_warehouse' },
{ code: 'enum1', name: '枚举', paramType: 'STRING', enumvalues: [{ "id": 1, "name": "数字1" }, { "id": "end", "name": "字符串1" },] },
{ code: 'case1', name: '1树测试', paramType: 'STRING', children: [{ code: 'case2', name: '1-1测试', paramType: 'STRING', children: [{ code: 'case3', name: '1-1-1测试', paramType: 'STRING' }] }
]} // 上下文
></Formula>
)
}
//2:公式UI组件形式
function FormulaWrap(props) {
const [formulaExpression, setFormulaExpression] = useState('')
const [formulaExpressionDisplay, setFormulaExpressionDisplay] = useState('')
return (
<Formula
locale={"zh_CN"}
uiMode
onChange={(formulaExpression: any, formulaList: any, expressList: iParams) => {
callBackFn(formulaExpression); // formulaExpression当前解析公式
}}
leftPannel={['math', 'string', 'custom']} // 自定义左侧面板 可不传
rightPannel={['context', 'meta', 'userVar', 'userConst']}
requestParams={{ func: { key1: 'filterParam' }, meta: { mkey: new Date.now() } }} //请求参数 可不传
disabled // 是否禁用
formula={formulaExpression || ''} // ui形式下作为初始值
contextData={[{ code: 'case1', name: 'c1测试', paramType: 'VARCHAR' }]} // 上下文
></Formula>
)
}
//3:自动计算公式
function FormulaWrap(props) {
const [case1, setCase1] = useState(2);
const [formulaExpression, setFormulaExpression] = useState('')
const [formulaExpressionDisplay, setFormulaExpressionDisplay] = useState('')
return (
<>
<input value={case1} onChange={e => setCase1(e.target.value)}/>
<Formula
locale={"zh_CN"}
autoCalc //基于paramList的前端自动计算
formula={formulaExpression}
formuladisplay={formulaExpressionDisplay || ''}
confirm={(formulaExpression: any, formulaList: any, expressList: iParams, value: any) => {
setFormulaExpression(formulaExpression);
setFormulaExpressionDisplay(formulaExpressionDisplay);
}}
contextData={[{ code: 'case1', name: 'c1测试', paramType: 'VARCHAR' },]}
paramList={{ case1: case1, hehe: (a, b) => a + 2 * b }}
/>
</>
)
}
//4:函数式调用(与input解绑 )
import { createFormula } from 'yyuap-formula'
function FormulaWithoutInput(props) { // option与1、2使用方法一致 将props转为对象即可
const [formulaExpression, setFormulaExpression] = useState('')
let option = {
confirm: (formulaExpression: any, formulaList: any, expressList: iParams,) => {
setFormulaExpression(formulaExpression);
setFormulaExpression(expressList.formulaExpressionShow);
},
formula: formulaExpression || '',
formuladisplay: formulaExpression || '',
contextData: [{ code: 'case1', name: 'c1测试', paramType: 'VARCHAR' }] // 上下文
}
return (
<button onClick={() => createFormula(option)}></button>
)
}
//5:非react环境函数式调用()
// 1. es module
import { renderFormula } from 'yyuap-formula/lib/main.js'
import 'yyuap-formula/lib/main.css'
function FormulaWithoutInput(props) { // option与1、2使用方法一致 将props转为对象即可
let dom = document.getElementById('formuala-dom')
renderFormula(option, dom);
}
// 2. script 引入 全局对象Formula
<script src="/iuap-apcom-coderule/ucf-wh/formula/main.js"></script>
<link rel="stylesheet" href="/iuap-apcom-coderule/ucf-wh/formula/main.css"></link>
let dom = document.getElementById('formuala-dom')
Formula.renderFormula(option, dom);
/**
* 如何重绘
* 1.移除在dom节点绑定组件: dom._reactRootContainer.unmount()
* 2.重新在dom节点绑定组件: Formula.renderFormula(option,dom)
*/
6. 版本说明
- 1.0.0 公式计算前端发布,提供基础公式服务
- 1.0.1 修改 less-loader 对产出 css 的解析错误,提供前端计算能力
- 1.0.2 修改 无函数列表正则解析 bug,无数据前端报错处理
- 1.0.3 对全局点击事件的修改 左右面板控制项 serviceName 选项 操作符面板样式
- 1.0.4 修复部分已知错误 增加自定义常量 区分多项常量 面板自定义控制
- 1.0.5 增加系统函数 解决 rightPannel 默认问题 解决 umd 打包 this 变量问题(issue) 解决 sideEffects 副作用
- 1.0.6 提供函数调用方法(不绑定 input) 提供请求参数 提供基础组件属性传入 引入本地字体文件
- 1.0.7 解决参数未传导致的 bug 调整操作符 完善输入部分历史记录 函数公式值取为 method 提供函数参数带入 提供输入框事件 增加变量过滤
- 1.0.8 增加属性对树格式数据的支持 兼容多属性类型
- 1.0.9 公式解析算法调整 公式 ui 组件提供
- 1.0.10 增加 serviceName 扩展能力 增加保留字 修复内部解析 bug ui 模式下样式修改
- 1.0.11 修改 ssr 下 window 的问题
- 1.0.12 分离公式算法 增加公式 core 对象(包含公式能力)
- 1.0.13 限制解决 Blur 的触发时机 在 uiMode 下的请求能力支撑问题
- 1.0.14 解决常量可能发生的显示 bug
- 1.0.15 属性列树节点控制能否编辑 增加多语 增加前端校验功能 增加吸附算法 解析算法调整拆分逻辑 增加非 react 环境下的引入
- 1.0.16 对非 react 环境下 增加公式组件的渲染 dom 矫正 1.0.5 文档部分内容
- 1.0.17 解决&&等特殊字符正则 bug
- 1.0.18 统一调整回掉参数 修复多语全局变量 bug 属性列多类型 bug 异步校验
- 1.0.19 示例下 paramType 调整 公式前端异步校验报错 catch 修复 focus 下的公式修改逻辑
- 1.0.20 兼容样式调整 确认前简单前端校验 增加 disableDrag 属性
- 1.0.21 增加聚合函数 对未知函数参数调整控制 增加 onChange 异步回掉能力(解决拖拽报错问题) 输入框回显 bug 调整 提供非 react 引入下的重绘解决方法 光标定位问题 函数参数前端校验 bug 函数携带参数 bug 修复
- 1.0.22 修改前端计算 扩展对外界函数的支持 抽取前端计算能力 增加 iMaxLength 增加校验前扩展属性
- 1.0.23 前端过滤 bug 修复 初始化兼容营销云格式 函数参数校验
- 1.0.24 增加对中文符号的校验 修复对 E、PI 函数的校验 增加前端函数过滤项 uiMode 下的属性动态更新(需对象深拷贝)
- 1.0.25 多数据量时滚动加载 支持树过滤 支持字符串内空格
- 1.0.26 扩展自定义校验(支持 get 请求) 文字折行问题
- 1.0.27 完善折行样式 支持中文括号 解决点击事件覆盖
- 2.0.0 更新公式整体样式与交互 提供参照与枚举接入
- 2.0.1 调整公式懒加载请求 cdn 地址 bug 解决全局 thie 问题、服务端渲染 移除 package.json 的内部依赖包
- 2.0.2 光标定位 cdn 适配 protocal 解决参照初始化问题 参照环境地址匹配
- 2.0.3 属性支持元数据 uri 加载 支持保存前校验 uiMode 下样式微调
- 2.0.4 去除对外界元素 click 的阻塞 拉取数据重绘缺陷 调整元数据加载交互 扩展配置:1.左右面板默认展开 2.点 input 展开 3.弹窗前 hook
- 2.0.5 支持聚合函数内部子公式 函数错误信息展示
- 2.0.6 增加对 UI 元数据的支持
- 2.0.7 校验时支持空值校验 函数参数分隔时忽略字符串内分隔符
- 2.0.8 扩展空值校验 集成基础组件样式 重制光标定位逻辑
- 2.0.9 修复组件 key 变化时光标定位对象释放与重生成的冲突 不覆盖 mdf 框架全局变量
- 2.0.10 解决光标失焦导致参照选择失效的问题
- 2.0.11 优化函数定位正则(解除与常量冲突) 修复枚举重复问题 完善 MDF 框架全局变量覆盖问题 解除对中文括号的校验 扩展定位对象,控制文本修改定位
- 2.0.12 增加对元数据领域的适配 去除 MDF 全局变量污染 增加对参照数据常量类型的判断
- 2.0.13 增加元数据级联配置 调整折行样式 放开子实体限制 ui 元数据下查询元数据
- 2.0.14 输入框重绘控制 主子表选中逻辑与选用字段调整
- 2.0.15 ui 元数据下参照支持根据 billtypeid 过滤 聚合函数可添加函数(对字符串参数暂未支持)
- 2.0.16 手工输入位置记忆 字符串优化:去除对常量函数等误检测,支持内嵌字符串(单引号·推荐、转义双引号·仅前端支持) ui 元数据增加级联配置项(默认关闭)
- 2.0.17 光标定位受原型链属性影响 增加 ie11 的 polyfill 并解决零宽断言不兼容问题
- 2.0.18 调整 ui 元数据无主表信息时树的构建,同时增加对孙级的支持
- 2.0.19 完善字符串检测正则 过滤非法函数 元数据添加交互调整、添加类型类型改为字符串
- 2.0.20 补全多语资源 修改左右标题样式
- 2.0.21 控制弹窗点击时 blur 事件的触发
- 2.0.22 跨域请求携带 cookie
- 2.0.23 调整部分类名(新旧样式冲突) 放开函数参数控制 增加专属化包
- 2.0.24 调整页面缩放对部分样式的影响
- 2.0.25 增加 modal 参数与类名
- 2.0.26 简单添加三目解析与左侧函数提示优化
- 2.0.27 增加格式兼容配置项 CompatibleMode,不配置的话默认为 false
- 2.0.28 ui 元数据 增加枚举值的处理 增加自定义项字段处理配置
- 2.0.29 beforeOpenHook 增加返回参数
- 2.0.30 ie11 添加兼容性 增加 customShowFn(自定义显示值)属性
- 2.0.31 解决参照兼容导致重复问题 调整枚举显示
- 2.0.32 Icon 替换 取消可能的 bfc 搜索样式
- 2.0.33 增加个性化板块
- 2.0.34 样式调整、属性传递 > 说明: > 元数据查询参数放在 requestParams={{func:{a:1},meta:{ss:2},context:{domain:'33333'}}}
- 2.0.35 显示属性编码(默认否) > 说明: > 属性默认只显示名称,增加showMetaCode={true},则显示属性名称+编码
- 2.0.36 校验请求增加search参数&扩展支持获取上下文paramList > 说明: > 1.校验请求search参数可添加domainKey;2.扩展通过get()方法返回上下文参数
- 2.0.37 展示值修改,支持多行公式、元数据搜索&排序、函数按描述排序 > 功能说明: > 1.YWZT-20114 支持多行公式 { ***** , ****} 大括号开始和结束,多个公式用逗号分隔 > 2.YWZT-21004 支持对元数据按照对象进行搜索、排序 > 3.YWZT-21002 函数搜索支持按照函数描述内容搜 > 4.YWZT-20228 公式组件formulaExpressionShow(展示值)修改 > 5.LYJM-10361 公式编辑器界面距离顶部距离修改
- 2.0.38 属性&元数据名称修改,多行公式bug修复 > 功能说明: > 1.YWZT-23442 公式组件右侧属性区,属性改名为单据字段,元数据改名为档案 > 2.YWZT-23437 formula/metadataByUri请求增加 domainKey > 3.多行公式单据值中包{},解析错误修复
- 2.0.39 多行公式支持以英文逗号回车和解析;增加档案穿透标记;单据改名为单据字段 > 功能说明: > 1.多行公式支持以逗号回车换行解析,去掉变量前后的[] > 2.YWZT-24472 公式组件单据改名为单据字段 > 3.YWZT-23437 formula/metadataByUri请求增加 domainKey
- 2.0.40 校验增加 getFormulaInfo 方法,修复中文公式解析问题
- 2.0.41 修复 getValue,sum 函数解析 bug,调整档案搜索逻辑
- 2.0.42 调整档案搜索逻辑,过滤掉未匹配项
- 2.0.43 支持右侧单据字段、档案、自定义变量&常量一级目录全量搜索
- 2.0.44 修复右侧搜索点击当前字段无法添加到 textarea 区域
- 2.0.45 编辑态中文公式显示 methodName,修复保存无法校验问题
- 2.0.46 单据字段有子表时,预览区和显示值增加主表字段名称显示
- 2.0.47 取消全局搜索,调整为单据字段搜索,档案四级以内字段可搜索 > 功能说明: > 1.多行公式代码优化,bug 修复 > 2.表达式存在中文符号,不再请求后端校验 > 3.YWZT-28900 中文公式无法解析问题修复
- 2.0.48 档案四级以内字段可搜索 bug 修复
- 2.0.49 修复档案搜索 bug 和字符串单引号中间无法加空格问题
- 2.0.50 修复 bug 嵌套公式引号没办法通过校验
- 2.0.51 修复 mdf 框架 es-check 报错问题
- 2.0.52 修复 mdf 框架 es-check 报错问题
- 2.0.53 修复嵌套公式引号没办法通过校验
- 2.0.54 去掉聚合公式变量中括号和元数据穿透获取不到 domainKey 的值 > 功能说明: > 1.去掉聚合公式变量中括号 > 2.修复元数据穿透(metadataByUri)获取不到domainKey的值问题
- 2.0.55 针对 mdf 元数据穿透更新 requestParams 参数
- 2.0.56 校验结果优化,新校验结果覆盖上一次校验结果
- 2.0.57 getFormulaInfo 方法,返回错误信息
- 2.0.58 公式参照请求兼容统一域名和专属化环境域名
- 2.0.59 fix:Cannot have two HTML5 backends at the same time 错误
- 2.0.60 恢复打包,转移旧版参照js和css资源
- 2.0.61 修复打包 DndProvider TS 语法不识别问题
- 2.0.62 修复打包 es-build 语法检查不通过 && mdf 公式渲染异常 超长公式回显慢
- 2.0.63 恢复2.0.49 版本的打包方式,修复函数描述不显示问题
- 2.0.64 fix: Mac 本地产出打包,修复参照打开报错
- 2.0.65 serviceName 兼容处理
- 2.0.66 增加 getFormulaInfo 异常提示语
- 2.0.67 增加 multiBillNo 参数,支持多单据
- 2.0.68 修复校验时 customExpress 参数错误
- 2.0.69 过滤自定义变量无 variables 情况
- 2.0.70 bee-* 组件升级为 tinpernext
- 2.0.71 不打包 tinpernext 组件
- 2.0.72 修复 tinpernext 排除报错
- 2.0.73 升级 tinpernext 4.1.8 修改 modal 样式
- 2.0.74 升级 tinpernext 4.1.8 修改 modal 样式
- 2.0.75 升级 tinpernext 4.1.8 修改 modal 样式
- 2.0.76 覆盖 tinpernext 样式修复 tooltip 样式
- 2.0.77 升级 tinpernext 4.1.9 修复函数 menu 不显示问题
- 2.0.78 修复modal onHide 改为 onCancel
- 2.0.79 兼容档案meta_name为null、函数描述长度限制、参照资源路径修改
- 2.0.80 统一 node 参照适配
- 2.0.81 公式编辑器低分率下增加滚动显示
- 2.0.89 修复符号弹窗遮挡问题
- 2.0.90 自动清除前后空格
- 2.1.0 公式支持业务对象
- 3.0.0-beta.4 修复输入空格无法通过校验
- 3.0.0-beta.5 修复点击确定校验太快,提示语未来得及显示
- 3.0.0-beta.6 修复公式参照值不显示问题
- 3.0.0-beta.7 公式参照请求兼容统一域名和专属化
- 3.0.0-beta.8 恢复打包,转移旧版参照js和css资源
- 3.0.0-beta.9 恢复 3.0.0-beta.6 打包,修复参照样式
- 4.0.1 新版公式设计,优化操作方式,提升用户体验
- 4.0.2 样式优化
- 4.0.3 编辑区显示优化
- 4.0.4 多语抽取,优化中文展示,文本框增加清空按钮
- 4.0.5 自动清除前后空格 修复拖拽插件问题
- 4.0.6 修复弹层遮罩问题
- 4.0.7 公式解析逻辑优化,修复公式过长解析慢问题
- 4.0.8 固定值模块样式优化,着色逻辑优化
- 4.0.9 样式优化,点击清空按钮失焦事件处理, 修复变量不显示业务对象时默认显示context
- 4.0.10 样式优化,修复第一次校验显示无公式数据问题
- 4.0.12 修复钉耙打包错误
- 4.0.14 业务对象接口增加formula前缀,mdf会做formula代理
- 4.0.15-beta.1 添加自动化测试字段fieldid 增加格式化功能,增加预览功能,输入框必填样式优化,删除插入常量时的#{}$符号, 增加双击插入功能, > 左侧搜索树支持虚拟滚动,修复静态检查错误
- 4.0.15-beta.2 增加单元测试用例,优化搜索,优化代码
- 4.0.15-beta.3 增加范围值类型,修复多语错误
- 4.0.15-beta.4 兼容IE(关闭拖拽功能),业务对象支持多单据,变量模块滚动条优化
- 4.0.15-beta.6 删除xsrf-token设置,删除package.json中的钉耙版本,避免三方下载钉耙冲突
- 4.0.15-beta.7 LYJM-52671 YWZT-98940 YWZT-98747 修复bug
- 4.0.15-beta.8 调整webpack配置,YWZT-102575 修复中文回显问题,修复因为格式化的空格导致的前端计算失败问题
- 4.0.15-beta.9 业务对象、单据字段显示全路径中文, 单据字段时不需要传sourceDataType,压缩打包质量
- 4.0.15-beta.10 1.搜索功能优化 如果当前节点的子节点有匹配项也前置 2.优化档案对象字段的中文显示
- 4.0.15-beta.11 1、变量搜索区,去掉键盘key事件,通过enter和点击搜索icon触发搜索; 2、当纵向滚动条处于费顶部时,搜索到结果后,自动置顶; > 3、注释掉过滤/不过滤的选项,默认不过滤,搜索命中顺序置顶
- 4.0.16 实现业务对象,单据字段的全链路中文回显
- 4.0.16-beta.1 初始化穿透增加loading提示
- 4.0.16-beta.2 增加对象类型的字段插入控制开关
- 4.0.16-beta.3 1.fielid通过脚本调整 2.cdn引入方式调整 3.修复中文回显导致code变化问题
- 4.0.16-beta.4 1.支持领域控制插入功能 2.修复ts错误
- 4.0.16-beta.5 修复带条件的表达式的中文回显
- 4.0.16-beta.6 header添加X-A01(因为同一个租户可以拥有不同的领域操作权限,用于区分)
- 4.0.17-beta.1 隐藏参照的新增按钮,修复checkMax漏洞
- 4.0.17-beta.2 YWZT-115410 如果contextData中数据有type属性,需要重写为变量类型,另外档案也支持显示code
- 4.0.17-beta.3 删除初始化样式,避免污染全局样式
- 4.0.17-beta.4 处理弹窗多语,修改content-Type
- 4.0.17-beta.5 YWZT-117477 修复集成对象模块没有滚动条
- 4.0.17-beta.6 变量展开子级时自动滚动到合适位置,增加快捷键说明、支持函数说明直接插入函数
- 4.0.17-beta.7 修复window.tnsSdk跨域问题
- 4.0.17-beta.8 修复公式保存时mdf因为空格计算失败问题
- 4.0.17-beta.9 增加非压缩版js,方便调试
- 4.0.17-beta.10 修复性能问题
- 4.0.17-beta.11 修复南航越权问题
- 4.0.17-beta.12 接入TNS
- 4.0.17-beta.13 修复样式冲突
- 4.0.18 修复工作台菜单遮挡问题,优化中文回显逻辑
- 4.0.19 1、支持多业务对象 2、中文回显优化 3、添加请求域名ymshost 4.增加Aajax:1, 避免跳转登录失败
- 4.0.20 解决diwork.com报404问题
- 4.0.21 修改返回描述区插入按钮的位置,所有接口增加serviceCode
- 4.0.22 搜索优化,修复样式冲突,修改英文展示
- 4.0.22-beta.1 删除协议信息
- 4.0.22-beta.2 1.优化搜索 2.自定义业务对象,支持全路径中文显示
- 4.0.22-beta.3 业务对象第一级也支持控制是否插入,参照传参增加serviceCode属性
- 4.0.22-beta.4 处理漏洞扫描
- 4.0.22-beta.5 修复参照问题,调整钉耙版本
- 4.0.22-beta.6 档案穿透优化,设置fieldid
- 4.0.22-beta.7 支持印尼语
- 4.0.22-beta.8 升级多语新模型
- 4.0.22-beta.9 处理sonar问题
- 4.0.22-beta.10 支持业务对象,自定义插入数据,修复样式问题
- 4.0.23 修复档案新接口404问题
- 4.0.24 升级多语后兼容旧版本
- 4.0.25 1.移除oss文件上传 2.移除无用的typename字段,统一使用dataType 3.代码质量优化
- 4.0.26 1.数据隔离,避免同时打开两个公式互相干扰 2.业务对象支持国家地区搜索 3.业务对象增加模拟取值模拟计算
7. 缺陷
- 前端计算算法不够健壮,对边界测试与较复杂情况可能缺少支持
- 自动计算暂未集成后端计算能力,待优化
8. 界面截图
- 1.0 版本
- 2.0 版本
- 3.0 版本
- 4.0 版本