|
@@ -1,303 +1,176 @@
|
|
|
-
|
|
|
function isFormulaItem(ele) {
|
|
|
- return ele.type == 'Element' || ele.type == 'ParamData'
|
|
|
+ return ele.type == 'Element' || ele.type == 'ParamData'
|
|
|
}
|
|
|
|
|
|
-//转换公式的参数
|
|
|
-// function transformArguments(children,curEle,eleMap){
|
|
|
-// let fcReg = /(FC\.\S+\()(.+)\)/;
|
|
|
-// let fcText = '';
|
|
|
-// for (let i = (children.length-1); i >= 0; i--) {
|
|
|
-// let ele = children[i];
|
|
|
-
|
|
|
-// if(ele.isOn === false){
|
|
|
-// //点击了开关关闭的,跳过
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// //console.log(ele.name)
|
|
|
-// let tmpArr = fcReg.exec(ele.template.ft);
|
|
|
-// fcText = tmpArr[1] + fcText;//fc.XX( 左括号部分
|
|
|
-// let argList = tmpArr[2].split(",");//括号里面参数部分#1,#2..
|
|
|
-// let isNestEle = false;//是否有过嵌套的元素了
|
|
|
-// let isNestEle2 = false;
|
|
|
-// //console.log(argList)
|
|
|
-// //console.log(text)
|
|
|
-// argList.forEach((argText,index)=>{
|
|
|
-// if(argText.indexOf('#')>-1){
|
|
|
-// //#动态参数
|
|
|
-// let argIndex = index;
|
|
|
-// for (let j = 0; j < ele.template.args.length; j++) {
|
|
|
-// if(ele.template.args[j].key == argText){
|
|
|
-// //找到相同的#编码
|
|
|
-// argIndex = j;
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// let arg = ele.arguments[argIndex];
|
|
|
-
|
|
|
-// if(arg && isFormulaItem(arg)){
|
|
|
-// if(!isNestEle && !isNestEle2 && i != (children.length-1) && curEle.id == arg.id){
|
|
|
-// //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
-// //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
-// isNestEle = true;
|
|
|
-// }else{
|
|
|
-// if(arg.type == 'Element'){
|
|
|
-// eleMap[arg.tableElementKey] = {
|
|
|
-// id: arg.id,
|
|
|
-// name: arg.name,
|
|
|
-// tableElementKey: arg.tableElementKey,
|
|
|
-// type: "Element",
|
|
|
-// };
|
|
|
-// fcText += `E[${arg.tableElementKey}]`;
|
|
|
-// }else if(arg.type == 'ParamData'){
|
|
|
-// eleMap[arg.k] = {
|
|
|
-// id: arg.id,
|
|
|
-// name: arg.name,
|
|
|
-// v:arg.v,
|
|
|
-// k:arg.k,
|
|
|
-// type: "ParamData",
|
|
|
-// };
|
|
|
-// fcText += `WP[${arg.k}]`;
|
|
|
-// }
|
|
|
-
|
|
|
-// }
|
|
|
-// }else if(Array.isArray(arg)){
|
|
|
-// //ifsles方法会进来
|
|
|
-// arg.forEach((a)=>{
|
|
|
-// if(a && isFormulaItem(a)){
|
|
|
-// if(!isNestEle2 && i != (children.length-1) && curEle.id == a.id){
|
|
|
-// //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
-// //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
-// isNestEle2 = true
|
|
|
-// }else{
|
|
|
-// if(a.type == 'Element'){
|
|
|
-// eleMap[a.tableElementKey] = {
|
|
|
-// id: a.id,
|
|
|
-// name: a.name,
|
|
|
-// tableElementKey: a.tableElementKey,
|
|
|
-// type: "Element",
|
|
|
-// };
|
|
|
-// fcText += `E[${a.tableElementKey}]`;
|
|
|
-// }else if(a.type == 'ParamData'){
|
|
|
-// eleMap[a.k] = {
|
|
|
-// id: a.id,
|
|
|
-// name: a.name,
|
|
|
-// v:a.v,
|
|
|
-// k:a.k,
|
|
|
-// type: "ParamData",
|
|
|
-// };
|
|
|
-// fcText += `WP[${a.k}]`;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }else if(a && a.type == 'Operator'){
|
|
|
-// //在运算符前后加上空格
|
|
|
-// fcText += ' '+a.name+' ';
|
|
|
-// //console.log(fcText)
|
|
|
-// }else if(a && a.type){
|
|
|
-// fcText += a.name;
|
|
|
-// }else{
|
|
|
-// fcText += a?a:"''";
|
|
|
-// }
|
|
|
-// })
|
|
|
-
|
|
|
-// }else{
|
|
|
-// fcText += arg?arg:"''";
|
|
|
-// }
|
|
|
-
|
|
|
-// }else{
|
|
|
-// //已有参数
|
|
|
-// fcText += argText?argText:'';
|
|
|
-// }
|
|
|
-// if(index != argList.length-1){
|
|
|
-// fcText += ',';
|
|
|
-// }
|
|
|
-// })
|
|
|
-// fcText += ')';
|
|
|
-// }
|
|
|
-
|
|
|
-// return fcText;
|
|
|
-// }
|
|
|
function transformArguments(children, curEle, eleMap) {
|
|
|
- // debugger
|
|
|
- let fcReg = /(FC\.\S+\()(.+)\)/
|
|
|
- let fcText = ''
|
|
|
- for (let i = (children.length - 1); i >= 0; i--) {
|
|
|
- let ele = children[i]
|
|
|
-
|
|
|
- if (ele.isOn === false) {
|
|
|
- //点击了开关关闭的,跳过
|
|
|
- continue
|
|
|
- }
|
|
|
- if (ele.template != null && ele.template != undefined) {
|
|
|
- let tmpArr = fcReg.exec(ele.template.ft)
|
|
|
- fcText = tmpArr[1] + fcText//fc.XX( 左括号部分
|
|
|
- let argList = tmpArr[2].split(',')//括号里面参数部分#1,#2..
|
|
|
- let isNestEle = false//是否有过嵌套的元素了
|
|
|
- let isNestEle2 = false
|
|
|
- //console.log(argList)
|
|
|
- //console.log(text)
|
|
|
- argList.forEach((argText, index)=>{
|
|
|
- if (argText.indexOf('#') > -1) {
|
|
|
- //#动态参数
|
|
|
- let argIndex = index
|
|
|
- for (let j = 0; j < ele.template.args.length; j++) {
|
|
|
- if (ele.template.args[j].key == argText) {
|
|
|
- //找到相同的#编码
|
|
|
- argIndex = j
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- let arg = ele.arguments[argIndex]
|
|
|
-
|
|
|
- if (arg && isFormulaItem(arg)) {
|
|
|
- if (!isNestEle && !isNestEle2 && i != (children.length - 1) && curEle.id == arg.id) {
|
|
|
- //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
- //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
- isNestEle = true
|
|
|
- } else {
|
|
|
- // let atbkey=arg.tableElementKey.replace('_key',':key')
|
|
|
- if (arg.type == 'Element') {
|
|
|
- eleMap[arg.tableElementKey] = {
|
|
|
- id: arg.id,
|
|
|
- name: arg.name,
|
|
|
- tableElementKey: arg.tableElementKey,
|
|
|
- type: 'Element',
|
|
|
- }
|
|
|
- fcText += `E[${arg.tableElementKey}]`
|
|
|
- } else if (arg.type == 'ParamData') {
|
|
|
- eleMap[arg.k] = {
|
|
|
- id: arg.id,
|
|
|
- name: arg.name,
|
|
|
- v:arg.v,
|
|
|
- k:arg.k,
|
|
|
- type: 'ParamData',
|
|
|
- }
|
|
|
- fcText += `WP[${arg.k}]`
|
|
|
- }
|
|
|
+ // debugger
|
|
|
+ let fcReg = /(FC\.\S+\()(.+)\)/
|
|
|
+ let fcText = ''
|
|
|
+ for (let i = (children.length - 1); i >= 0; i--) {
|
|
|
+ let ele = children[i]
|
|
|
|
|
|
- }
|
|
|
- } else if (Array.isArray(arg)) {
|
|
|
- //ifsles方法会进来
|
|
|
- arg.forEach((a)=>{
|
|
|
- if (a && isFormulaItem(a)) {
|
|
|
- if (!isNestEle2 && i != (children.length - 1) && curEle.id == a.id) {
|
|
|
- //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
- //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
- isNestEle2 = true
|
|
|
- } else {
|
|
|
- if (a.type == 'Element') {
|
|
|
- eleMap[a.tableElementKey] = {
|
|
|
- id: a.id,
|
|
|
- name: a.name,
|
|
|
- tableElementKey: a.tableElementKey,
|
|
|
- type: 'Element',
|
|
|
+ if (ele.isOn === false) {
|
|
|
+ //点击了开关关闭的,跳过
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if (ele.template != null && ele.template != undefined) {
|
|
|
+ let tmpArr = fcReg.exec(ele.template.ft)
|
|
|
+ fcText = tmpArr[1] + fcText//fc.XX( 左括号部分
|
|
|
+ let argList = tmpArr[2].split(',')//括号里面参数部分#1,#2..
|
|
|
+ let isNestEle = false//是否有过嵌套的元素了
|
|
|
+ let isNestEle2 = false
|
|
|
+ argList.forEach((argText, index) => {
|
|
|
+ if (argText.indexOf('#') > -1) {
|
|
|
+ //#动态参数
|
|
|
+ let argIndex = index
|
|
|
+ for (let j = 0; j < ele.template.args.length; j++) {
|
|
|
+ if (ele.template.args[j].key == argText) {
|
|
|
+ //找到相同的#编码
|
|
|
+ argIndex = j
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
- fcText += `E[${a.tableElementKey}]`
|
|
|
- } else if (a.type == 'ParamData') {
|
|
|
- eleMap[a.k] = {
|
|
|
- id: a.id,
|
|
|
- name: a.name,
|
|
|
- v:a.v,
|
|
|
- k:a.k,
|
|
|
- type: 'ParamData',
|
|
|
+ let arg = ele.arguments[argIndex]
|
|
|
+
|
|
|
+ if (arg && isFormulaItem(arg)) {
|
|
|
+ if (!isNestEle && !isNestEle2 && i != (children.length - 1) && curEle.id == arg.id) {
|
|
|
+ //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
+ //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
+ isNestEle = true
|
|
|
+ } else {
|
|
|
+ // let atbkey=arg.tableElementKey.replace('_key',':key')
|
|
|
+ if (arg.type == 'Element') {
|
|
|
+ eleMap[arg.tableElementKey] = {
|
|
|
+ id: arg.id,
|
|
|
+ name: arg.name,
|
|
|
+ tableElementKey: arg.tableElementKey,
|
|
|
+ type: 'Element',
|
|
|
+ }
|
|
|
+ fcText += `E[${arg.tableElementKey}]`
|
|
|
+ } else if (arg.type == 'ParamData') {
|
|
|
+ eleMap[arg.k] = {
|
|
|
+ id: arg.id,
|
|
|
+ name: arg.name,
|
|
|
+ v: arg.v,
|
|
|
+ k: arg.k,
|
|
|
+ type: 'ParamData',
|
|
|
+ }
|
|
|
+ fcText += `WP[${arg.k}]`
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else if (Array.isArray(arg)) {
|
|
|
+ //ifsles方法会进来
|
|
|
+ arg.forEach((a) => {
|
|
|
+ if (a && isFormulaItem(a)) {
|
|
|
+ if (!isNestEle2 && i != (children.length - 1) && curEle.id == a.id) {
|
|
|
+ //不是第一个嵌套的公式,且和当前挂载的是同一个元素
|
|
|
+ //认为这个参数是之前公式计算的结果,不再写入元素
|
|
|
+ isNestEle2 = true
|
|
|
+ } else {
|
|
|
+ if (a.type == 'Element') {
|
|
|
+ eleMap[a.tableElementKey] = {
|
|
|
+ id: a.id,
|
|
|
+ name: a.name,
|
|
|
+ tableElementKey: a.tableElementKey,
|
|
|
+ type: 'Element',
|
|
|
+ }
|
|
|
+ fcText += `E[${a.tableElementKey}]`
|
|
|
+ } else if (a.type == 'ParamData') {
|
|
|
+ eleMap[a.k] = {
|
|
|
+ id: a.id,
|
|
|
+ name: a.name,
|
|
|
+ v: a.v,
|
|
|
+ k: a.k,
|
|
|
+ type: 'ParamData',
|
|
|
+ }
|
|
|
+ fcText += `WP[${a.k}]`
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (a && a.type == 'Operator') {
|
|
|
+ //在运算符前后加上空格
|
|
|
+ fcText += ' ' + a.name + ' '
|
|
|
+ } else if (a && a.type) {
|
|
|
+ fcText += a.name
|
|
|
+ } else {
|
|
|
+ fcText += a ? a : '\'\''
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ } else {
|
|
|
+ fcText += arg ? arg : '\'\''
|
|
|
}
|
|
|
- fcText += `WP[${a.k}]`
|
|
|
- }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //已有参数
|
|
|
+ fcText += argText ? argText : ''
|
|
|
+ }
|
|
|
+ if (index != argList.length - 1) {
|
|
|
+ fcText += ','
|
|
|
}
|
|
|
- } else if (a && a.type == 'Operator') {
|
|
|
- //在运算符前后加上空格
|
|
|
- fcText += ' ' + a.name + ' '
|
|
|
- //console.log(fcText)
|
|
|
- } else if (a && a.type) {
|
|
|
- fcText += a.name
|
|
|
- } else {
|
|
|
- fcText += a ? a : '\'\''
|
|
|
- }
|
|
|
})
|
|
|
|
|
|
- } else {
|
|
|
- fcText += arg ? arg : '\'\''
|
|
|
- }
|
|
|
+ fcText += ')'
|
|
|
|
|
|
- } else {
|
|
|
- //已有参数
|
|
|
- fcText += argText ? argText : ''
|
|
|
}
|
|
|
- if (index != argList.length - 1) {
|
|
|
- fcText += ','
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- fcText += ')'
|
|
|
-
|
|
|
}
|
|
|
- console.log(fcText, 'ele.name')
|
|
|
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return fcText
|
|
|
+ return fcText
|
|
|
}
|
|
|
+
|
|
|
export const formulaArrayToString = (processFormula, resultFormula) => {
|
|
|
- let text = ''
|
|
|
- let eleMap = {}//元素字典,为了回显的时候查询信息
|
|
|
- let preIsOp = false//前一个参数是否是四则运算(+-*/)
|
|
|
- processFormula.forEach((item, index) => {
|
|
|
- if (isFormulaItem(item)) {
|
|
|
- //console.log(item)
|
|
|
- if (item.children.length < 1) {
|
|
|
- if (item.type == 'Element') {
|
|
|
- eleMap[item.tableElementKey] = {
|
|
|
- id: item.id,
|
|
|
- name: item.name,
|
|
|
- tableElementKey: item.tableElementKey,
|
|
|
- type: 'Element',
|
|
|
- }
|
|
|
- text += `E[${item.tableElementKey}]`
|
|
|
- } else if (item.type == 'ParamData') {
|
|
|
- eleMap[item.k] = {
|
|
|
- id: item.id,
|
|
|
- name: item.name,
|
|
|
- v:item.v,
|
|
|
- k:item.k,
|
|
|
- type: 'ParamData',
|
|
|
- }
|
|
|
- text += `WP[${item.k}]`
|
|
|
- }
|
|
|
+ let text = ''
|
|
|
+ let eleMap = {}//元素字典,为了回显的时候查询信息
|
|
|
+ let preIsOp = false//前一个参数是否是四则运算(+-*/)
|
|
|
+ processFormula.forEach((item, index) => {
|
|
|
+ if (isFormulaItem(item)) {
|
|
|
+ if (item.children.length < 1) {
|
|
|
+ if (item.type == 'Element') {
|
|
|
+ eleMap[item.tableElementKey] = {
|
|
|
+ id: item.id,
|
|
|
+ name: item.name,
|
|
|
+ tableElementKey: item.tableElementKey,
|
|
|
+ type: 'Element',
|
|
|
+ }
|
|
|
+ text += `E[${item.tableElementKey}]`
|
|
|
+ } else if (item.type == 'ParamData') {
|
|
|
+ eleMap[item.k] = {
|
|
|
+ id: item.id,
|
|
|
+ name: item.name,
|
|
|
+ v: item.v,
|
|
|
+ k: item.k,
|
|
|
+ type: 'ParamData',
|
|
|
+ }
|
|
|
+ text += `WP[${item.k}]`
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
- text += (index > 0 && !preIsOp ? ',' : '') + transformArguments(item.children, item, eleMap)
|
|
|
- preIsOp = false
|
|
|
- }
|
|
|
- } else if (item.type == 'Element') {
|
|
|
- text += item.template.ft
|
|
|
- } else if (item.type == 'Operator') {
|
|
|
- //在运算符前后加上空格
|
|
|
- preIsOp = true
|
|
|
- text += ' ' + item.name + ' '
|
|
|
- //console.log(fcText)
|
|
|
- } else {
|
|
|
- text += item.name
|
|
|
- }
|
|
|
- })
|
|
|
- if (resultFormula[0].children.length) {
|
|
|
- //等号左侧部分
|
|
|
- let resText = transformArguments(resultFormula[0].children, resultFormula[0], eleMap)
|
|
|
- //等号左侧元素不需要,左侧的公式嵌套右侧所有结果
|
|
|
- let fcReg = /(FC\.\S+\()(.+)\)/
|
|
|
- let leftArr = fcReg.exec(resText)
|
|
|
- //text = resText.replace(`E[${resultFormula[0].tableElementKey}]`,text);
|
|
|
- if (!!text && !resText.includes(text) && !!leftArr) {
|
|
|
- let reg = leftArr[2].replace('OPTION,', '')
|
|
|
- text = resText.replace(reg, text)
|
|
|
- } else {
|
|
|
- text = resText
|
|
|
+ } else {
|
|
|
+ text += (index > 0 && !preIsOp ? ',' : '') + transformArguments(item.children, item, eleMap)
|
|
|
+ preIsOp = false
|
|
|
+ }
|
|
|
+ } else if (item.type == 'Element') {
|
|
|
+ text += item.template.ft
|
|
|
+ } else if (item.type == 'Operator') {
|
|
|
+ //在运算符前后加上空格
|
|
|
+ preIsOp = true
|
|
|
+ text += ' ' + item.name + ' '
|
|
|
+ } else {
|
|
|
+ text += item.name
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (resultFormula[0].children.length) {
|
|
|
+ //等号左侧部分
|
|
|
+ let resText = transformArguments(resultFormula[0].children, resultFormula[0], eleMap)
|
|
|
+ //等号左侧元素不需要,左侧的公式嵌套右侧所有结果
|
|
|
+ let fcReg = /(FC\.\S+\()(.+)\)/
|
|
|
+ let leftArr = fcReg.exec(resText)
|
|
|
+ //text = resText.replace(`E[${resultFormula[0].tableElementKey}]`,text);
|
|
|
+ if (!!text && !resText.includes(text) && !!leftArr) {
|
|
|
+ let reg = leftArr[2].replace('OPTION,', '')
|
|
|
+ text = resText.replace(reg, text)
|
|
|
+ } else {
|
|
|
+ text = resText
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- console.log(text, '最终')
|
|
|
- //console.log(eleMap)
|
|
|
- return { text, eleMap }
|
|
|
+ return { text, eleMap }
|
|
|
}
|