yyuap-formula

4.0.26 • Public • Published

欢迎使用公式编辑器


1. 安装(后端注意升级最新版jar包)

第四版公式(优先使用) npm i -S yyuap-formula@4.0.26 (推荐使用)

第三版公式 npm i -S yyuap-formula@3.0.0-beta.9 (已废弃)

第二版公式 npm i -S yyuap-formula@2.0.90(不再维护)

第一版公式 npm i -S yyuap-formula@1.0.27 (已废弃)

在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 内部能力对应为以下三个参数

  1. Formula.core -- 核心解析能力 见 chapter3
  2. Formula.createFormula --- 公式函数式调起 见示例 4
  3. 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 版本 image.png

End

Readme

Keywords

none

Package Sidebar

Install

npm i yyuap-formula

Weekly Downloads

4

Version

4.0.26

License

ISC

Unpacked Size

26.4 MB

Total Files

26

Last publish

Collaborators

  • qianxy
  • jerrychane
  • xiaoxiaoyong