zhangh vor 2 Jahren
Ursprung
Commit
f31c673e40

+ 62 - 7
src/views/formula/component/funComponent/ifelse.vue

@@ -22,11 +22,11 @@
     <div class="mg-t-20 flex jc-al-c">
       <span class="textblod mg-r-20">IF</span>
       <div class="flex jc-al-c" v-if="symbol == '<&&<' || symbol == '<=&&<='">
-        <vue-tags-input v-model="tag1" :tags="tags1" @focus="curFocusIndex = 1" @blur="tags1 = [];setCondition()" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
+        <vue-tags-input v-model="tag1" :tags="tags1" @focus="curFocusIndex = 1" @blur="inputBlur(1)" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
         <span v-if="symbol == '<&&<'" class="mg-l-20 mg-r-20">&lt;</span>
         <span v-if="symbol == '<=&&<='" class="mg-l-20 mg-r-20">≤</span>
       </div>
-      <vue-tags-input v-model="tag2" :tags="tags2" @focus="curFocusIndex = 2" @blur="tags2 = [];setCondition()" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
+      <vue-tags-input v-model="tag2" :tags="tags2" @focus="curFocusIndex = 2" @blur="inputBlur(2)" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
       <span class="mg-l-20 mg-r-20">
         <span v-if="symbol == '>='">≥</span>
         <span v-if="symbol == '<='">≤</span>
@@ -36,14 +36,14 @@
         <span v-if="symbol == '<&&<'">&lt;</span>
         <span v-if="symbol == '<=&&<='">≤</span>
       </span>
-      <vue-tags-input v-model="tag3" :tags="tags3" @focus="curFocusIndex = 3" @blur="tags3 = [];setCondition()" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
+      <vue-tags-input v-model="tag3" :tags="tags3" @focus="curFocusIndex = 3" @blur="inputBlur(3)" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
     </div>
 
     <div class="flex jc-al-c mg-t-20" v-if="result == 1">
       <span class="textblod mg-r-10">真值</span>
-      <vue-tags-input v-model="tag4" :tags="tags4" @focus="curFocusIndex = 4" @blur="tags4 = [];setTF()" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
+      <vue-tags-input v-model="tag4" :tags="tags4" @focus="curFocusIndex = 4" @blur="inputBlur(4)" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
       <span class="textblod mg-r-10 mg-l-20">假值</span>
-      <vue-tags-input v-model="tag5" :tags="tags5" @focus="curFocusIndex = 5" @blur="tags5 = [];setTF()" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
+      <vue-tags-input v-model="tag5" :tags="tags5" @focus="curFocusIndex = 5" @blur="inputBlur(5)" placeholder="输入/参数" @before-adding-tag="beforeAddingTag"/>
     </div>
     <div class="mg-t-20" v-if="result == 2">
       <div class="flex">
@@ -205,6 +205,19 @@ export default {
       console.log(111)
     },
 
+    inputBlur(num){
+      if(this['tag'+num]){
+        this['tags'+num] = [];
+      }
+
+
+      if(num>=1&&num<=3){
+        this.setCondition();
+      }else if(num>=4&&num<=5){
+        this.setTF();
+      }
+    },
+
     addText(){
       this.inputVisible = true;
     },
@@ -348,8 +361,13 @@ export default {
           this['tags'+this.curFocusIndex] = [obj];
           this['tag'+this.curFocusIndex] = '';
 
+          if(this.curFocusIndex == 4 || this.curFocusIndex == 5){
+            this.setTF();
+          }else{
+            this.setCondition();
+          }
+
           this.curFocusIndex = 0;
-          this.setCondition();
         }
       }
     },
@@ -423,6 +441,13 @@ export default {
           }else if((typeof args0[6]) == 'string'){
             this.tag3 = args0[6];
           }
+        }else if(typeof args0 == 'object' && args0.type == 'Element'){
+          let ele = args0;
+          this.tags2 =  [
+            Object.assign({
+              text:ele.name,
+              style:'background-color: #409EFF',
+            },ele)]
         }
       }
     },
@@ -499,15 +524,45 @@ export default {
     //初始化运算的真假值
     initTFFormula(args1,args2){
       if(Array.isArray(args1)){
+        args1.forEach((a,index)=>{
+          if(typeof a == 'string'){
+            this.$set(args1,index,{
+              type:'Text',
+              name:a,
+              selected:false,
+            })
+          }
+        })
         this.selectEleFormula = args1;
       }else if(typeof args1 == 'object' && args1.type == 'Element'){
         this.selectEleFormula = [Object.assign({},args1)];
+      }else if(typeof args1 == 'string'){
+        this.selectEleFormula = [{
+          type:'Text',
+          name:args1,
+          selected:false,
+        }]
       }
 
       if(Array.isArray(args2)){
-        this.selectEleFormula2 = args1;
+        args2.forEach((a,index)=>{
+          if(typeof a == 'string'){
+            this.$set(args2,index,{
+              type:'Text',
+              name:a,
+              selected:false,
+            })
+          }
+        })
+        this.selectEleFormula2 = args2;
       }else if(typeof args2 == 'object' && args2.type == 'Element'){
         this.selectEleFormula2 = [Object.assign({},args2)];
+      }else if(typeof args2 == 'string'){
+        this.selectEleFormula2 = [{
+          type:'Text',
+          name:args2,
+          selected:false,
+        }]
       }
     },
 

+ 13 - 1
src/views/formula/edit.vue

@@ -702,7 +702,17 @@ export default {
       let curEle = this.equationSelectEle;
       let isIn = false;
       for (let i = 0; i < formula.arguments.length; i++) {
-        if(formula.arguments[i] && formula.arguments[i].id ==curEle.id){
+        if(Array.isArray(formula.arguments[i])){
+          for(let j=0;j<formula.arguments[i].length;j++){
+            if(formula.arguments[i][j] && formula.arguments[i][j].id ==curEle.id){
+              isIn = true;
+              break;
+            }
+          }
+          if(isIn){
+            break;
+          }
+        }else if(formula.arguments[i] && formula.arguments[i].id ==curEle.id){
           isIn = true;
           break;
         }
@@ -721,6 +731,7 @@ export default {
     //保存公式
     saveFormula(){
       let obj = formulaArrayToString(this.processFormula,this.resultFormula);
+      //return;
       //console.log(text);
       if(this.formulaid){
         updateFormula({
@@ -760,6 +771,7 @@ export default {
       if(detail.id){
         this.formulaid = detail.id;
         //let formula = formulaStringToArray('FC.sum(FC.repeat(E[测试测试_222]))+FC.ifelse(3<E[测试测试_333]&&E[测试测试_333]<10,E[测试测试_222]+E[测试测试_333],E[测试测试_333])',detail.map,this.formulaMap);
+        detail.formula = detail.formula.replace(/&lt;/g,"<").replace(/&amp;/g,"&");
         let formula = formulaStringToArray(detail.formula,detail.map,this.formulaMap);
         this.processFormula = formula.processFormula;
         formula.resultFormula[0].id = this.resultFormula[0].id;

+ 28 - 1
src/views/formula/formulaArrayToString.js

@@ -14,6 +14,8 @@ function transformArguments(children,curEle,eleMap){
     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)=>{
@@ -30,9 +32,10 @@ function transformArguments(children,curEle,eleMap){
         let arg = ele.arguments[argIndex];
         
         if(arg && arg.type == 'Element'){
-          if(i != (children.length-1) && curEle.id == arg.id){
+          if(!isNestEle && !isNestEle2 && i != (children.length-1) && curEle.id == arg.id){
             //不是第一个嵌套的公式,且和当前挂载的是同一个元素
             //认为这个参数是之前公式计算的结果,不再写入元素
+            isNestEle = true;
           }else{
             eleMap[arg.tableElementKey] = {
               id: arg.id,
@@ -42,6 +45,30 @@ function transformArguments(children,curEle,eleMap){
             };
             fcText += `E[${arg.tableElementKey}]`;
           }
+        }else if(Array.isArray(arg)){
+          //ifsles方法会进来
+          arg.forEach((a)=>{
+            if(a && a.type == 'Element'){
+              if(!isNestEle2 && i != (children.length-1) && curEle.id == a.id){
+                //不是第一个嵌套的公式,且和当前挂载的是同一个元素
+                //认为这个参数是之前公式计算的结果,不再写入元素
+                isNestEle2 = true
+              }else{
+                eleMap[a.tableElementKey] = {
+                  id: a.id,
+                  name: a.name,
+                  tableElementKey: a.tableElementKey,
+                  type: "Element",
+                };
+                fcText += `E[${a.tableElementKey}]`;
+              }
+            }else if(a && a.type){
+              fcText += a.name;
+            }else{
+              fcText += a?a:'""';
+            }
+          })
+
         }else{
           fcText += arg?arg:'""';
         }

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

@@ -72,7 +72,9 @@ function parseArguments(ele,funObj){
 
         }else{
           let arg = argSpliceArr[index][0];
-          if(arg.type == 'Element'){
+          if(!arg){
+            fun.arguments.push(undefined)
+          }else if( arg.type == 'Element'){
             fun.arguments.push(arg)
           }else if(arg.type == 'Function'){
             fun.arguments.push(ele)
@@ -117,6 +119,10 @@ function ifFunArgumentsHandle(argArr){
     if(Element.type == 'Text' || Element.type == 'Logical'){
       arr.push(Element.tag)
     }else{
+      // let rootObj = {root:null};
+      // getRootElement(Element,rootObj)
+      // arr.push(rootObj.root)
+
       arr.push(Element)
     }
   })
@@ -124,6 +130,19 @@ function ifFunArgumentsHandle(argArr){
   return arr;
 }
 
+//获取嵌套里面根节点元素,认为是if显示的元素
+// function getRootElement(Element,rootObj){
+//   if(Element.children.length == 0){
+//     rootObj.root = Element;
+//   }else{
+//     Element.children.forEach((ele)=>{
+//       if(ele && ele.type == 'Function'){
+//         getRootElement(ele,rootObj)
+//       }
+//     })
+//   }
+// }
+
 export const formulaStringToArray = (text,elemap,formulaMap) => {
 
   // 匹配开始的FC.xxx(
@@ -304,13 +323,16 @@ export const formulaStringToArray = (text,elemap,formulaMap) => {
       //匹配文本
       let word = nuText.match(wordReg)[0];
       console.log('匹配文本',word)
+      if(word == '""'){
+        word = "";
+      }
 
       contentStack[contentStack.length - 1].children.push({
         type:'Text',
         tag:word
       });
 
-      strIndex += word.length;//索引移动
+      strIndex += word.length?word.length:2;//索引移动
     }
     else{
       console.log('匹配不到:',nuText)

+ 7 - 3
src/views/manager/projectinfo/tree.vue

@@ -265,18 +265,22 @@
                 >删除</el-button>
                 <el-button
                   size="mini"
+                  <<<<<<<
+                  HEAD
                   type="primary"
-                  v-throttle='3000'
+                  v-throttle='3000'=======type="danger"
+                  v-throttle='2000'
+                >>>>>>> 780bb177cb050efdf95c9a8a7ba8cbe94cd787fb
                   v-show="scope.row.status==0"
                   @click="hideMD(scope.row)"
-                >隐藏</el-button>
+                  >隐藏</el-button>
                 <el-button
                   size="mini"
                   type="primary"
                   v-throttle='3000'
                   v-show="scope.row.status==1"
                   @click="hideMD(scope.row)"
-                >激活</el-button>
+                >激活</el-button>
               </template>
             </el-table-column>
           </el-table>