npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

yyuap-formula

v4.0.26

Published

公式编辑器前端组件

Downloads

55

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

  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