Browse Source

公式编辑

yangyj 1 year ago
parent
commit
791e62cf1f

+ 3 - 2
src/views/formula/edit1.vue

@@ -604,7 +604,7 @@ export default {
 
       symbolReg:/(\+|-|\*|\/)(.+)/,
       operatorReg : /^\+|-|\*|%/,//加减乘除
-      startFCRegExp : /^FC\.([a-zA-Z]+)\(/,// 匹配开始的FC.xxx(
+      startFCRegExp : /^FC\.([a-zA-Z\d]+)\(/,// 匹配开始的FC.xxx(
 
       componentMap:{
         '日期偏移':'date-deviation',
@@ -1257,7 +1257,7 @@ export default {
 
     //点选等式中的元素
     equationClick({selected,item},index,arrName){
-      
+      debugger
       if(selected){
         this.resultFormula.forEach((ele)=>{
           ele.selected = false;
@@ -1290,6 +1290,7 @@ export default {
 
     //在等式模式下点选计算式
     equationSelect(index,indexPath){
+      debugger
       if(!this.equationSelectEle ||(this.equationSelectEle && !(this.equationSelectEle.type == 'Element' || this.equationSelectEle.type == 'ParamData')) ){
         this.$message({
           type: "warning",

+ 15 - 4
src/views/formula/formulaArrayToString.js

@@ -241,8 +241,8 @@ function transformArguments(children,curEle,eleMap){
 export const formulaArrayToString = (processFormula,resultFormula) => {
   let text = '';
   let eleMap = {};//元素字典,为了回显的时候查询信息
-
-  processFormula.forEach(item => {
+  let preIsOp=false;//前一个参数是否是四则运算(+-*/)
+  processFormula.forEach((item,index) => {
     if(isFormulaItem(item)){
       //console.log(item)
       if(item.children.length <1){
@@ -266,12 +266,14 @@ export const formulaArrayToString = (processFormula,resultFormula) => {
         }
         
       }else{
-        text += transformArguments(item.children,item,eleMap);
+        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{
@@ -282,8 +284,17 @@ export const formulaArrayToString = (processFormula,resultFormula) => {
     //等号左侧部分
     let resText = transformArguments(resultFormula[0].children,resultFormula[0],eleMap);
     //等号左侧元素不需要,左侧的公式嵌套右侧所有结果
-    text = resText.replace(`E[${resultFormula[0].tableElementKey}]`,text);
+    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,'最终');

+ 2 - 2
src/views/formula/formulaStringToArray.js

@@ -71,7 +71,7 @@ function parseArguments(ele,funObj){
 
     argList.forEach((argText,index)=>{
         //只用动态的
-        if(argText.indexOf('#')>-1){
+        if(argText.indexOf('#')>-1||/^[A-Z]+$/.test(argText)){
           if(argSpliceArr[index].length>1){
             if(fun.name == '判断'){
               fun.arguments.push(ifFunArgumentsHandle(argSpliceArr[index]))
@@ -300,7 +300,7 @@ debugger
       }
       
       let content =contentStack[contentStack.length - 1];
-      if(content){
+      if(!!content){
         content.children.push(obj);
       }else{
         //如果没有,那就是在最上层

+ 2 - 2
src/views/manager/projectinfo/tree.vue

@@ -1167,7 +1167,7 @@
     </el-dialog>
 <!-- 元素公式 -->
     <el-dialog
-    :title="(curEleTable.tableName?curEleTable.tableName:'')+'  元素公式(项目级)'"
+    :title="(curEleTable.tableName?curEleTable.tableName:'')+'  元素公式'"
      
       :visible.sync="editEleFormulaVisible"
       width="800px"
@@ -1423,7 +1423,7 @@
     <!-- 节点公式 -->
     <el-dialog
      
-      :title="(curEleTable.tableName?curEleTable.tableName:'')+'  元素公式2'"
+      :title="(curEleTable.tableName?curEleTable.tableName:'')+'  元素公式(元素库)'"
       :visible.sync="formulaCompVisible"
       fullscreen
       append-to-body

+ 3 - 3
src/views/manager/wbsinfo/element.vue

@@ -210,7 +210,7 @@
     </el-dialog>
     <!-- 公式配置 -->
     <el-dialog
-      title="元素公式6"
+    :title="(curNode.title?curNode.title:'')+'  元素公式'"
       :visible.sync="editEleFormulaVisible"
       width="800px"
       append-to-body
@@ -256,7 +256,7 @@
     </el-dialog>
      <!-- 公式 -->
     <el-dialog
-      title="元素公式2"
+      title="元素公式(元素库)"
       :visible.sync="formulaCompVisible"
       fullscreen
       append-to-body
@@ -279,7 +279,7 @@
     <PublicWbs  ref="PublicWbs" :from="from"/>
     <!-- 编辑元素 -->
      <el-dialog
-      :title="(curEleTable.title?curEleTable.title:'')+'  元素编辑'"
+      :title="(this.curNode.title?this.curNode.title:'')+'  元素编辑'"
       :visible.sync="editEleVisible"
       width="80%"
       append-to-body