Parcourir la source

Merge branch 'test-dev' of http://219.151.181.73:3000/web/saber into test-dev

lvy il y a 1 mois
Parent
commit
1f7010b164

+ 2 - 1
src/api/manager/wbsprivate.js

@@ -47,7 +47,7 @@ export const findNodeTableByCondition = (parentId,projectId,wbsId, params) => {
   })
 }
 
-export const removeTableByCondition = (id,projectId,wbsId, params) => {
+export const removeTableByCondition = (id,projectId,wbsId,pKeyId, params) => {
   return request({
     url: '/api/blade-manager/wbsPrivate/remove-table',
     method: 'get',
@@ -56,6 +56,7 @@ export const removeTableByCondition = (id,projectId,wbsId, params) => {
       id,
       projectId,
       wbsId,
+      pKeyId
     }
   })
 }

+ 14 - 1
src/views/exctab/ElementIdentification/index.vue

@@ -459,7 +459,7 @@
 
       <!-- 关联公共WBS模板 -->
       <el-dialog
-        title="关联公共WBS模板"
+        title="关联公共WBS模板22"
         class="excelBox"
         :visible.sync="AssociatedPublicTap"
         modal-append-to-body
@@ -604,6 +604,13 @@
                     ></el-option>
                   </el-select>
                 </div>
+                <div class="martop10 text-green">
+                  系统检测:当前节点不存在当前元素表,允许新增
+                </div>
+                <div class="martop10 text-red">
+                  系统检测:当前节点已存在当前元素表,不允许新增,请请联系项目负责人处理!!!
+                </div>
+                <div class="martop20">已有元素表</div>
               </el-tab-pane>
             </el-tabs>
           </el-col>
@@ -1799,6 +1806,12 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.text-green{
+  color:rgba(82, 178, 0, 1);
+}
+.text-red{
+  color:red;
+}
 .boxswai {
   padding: 0px 14px 10px 14px !important;
 }

+ 1 - 1
src/views/formula/component/funComponent/ifelse.vue

@@ -1659,7 +1659,7 @@ export default {
           this.formulainfo.arguments[0] = arr;
         }
       } else if(this.symbol == 'more'){
-        this.result=this.remark||'1'
+        // this.result=this.remark||'1'
         // 处理多条件情况
         this.formulainfo.arguments[0] = this.conditionList.map(condition => ({
           formulaIfElse: condition.formulaIfElse.map(inner => ({

+ 5 - 3
src/views/formula/component/funComponent/multiIfElseTools.js

@@ -119,7 +119,7 @@ export function formatArrayMore(inputArray) {
   return inputArray.map(item => processObject(item));
 }
 
-export function restoreArrayMore(processedArray, formulaDetailMap) {
+export function restoreArrayMore(processedArray, formulaDetailMap,remark) {
   // 定义反转的字段映射关系(与原方法相反)
   const reverseMappings = {
       'parameter1': 'tag2',
@@ -267,6 +267,8 @@ const operators = new Set(['+', '-', '*', '/', '%', '=', '>', '<', '!', '&', '|'
 
   // 还原单个对象的函数
   function restoreObject(obj) {
+
+    
       const result = {};
       
       // 递归还原formulaIfElse(如果存在)
@@ -275,10 +277,10 @@ const operators = new Set(['+', '-', '*', '/', '%', '=', '>', '<', '!', '&', '|'
       }
       
       // 还原formula1和formula2
-      if (obj.trueData) {
+      if (obj.trueData&&remark==='2') {
           result.formula1 = parseExpressionToFormula(obj.trueData);
       }
-      if (obj.falseData) {
+      if (obj.falseData&&remark==='2') {
           result.formula2 = parseExpressionToFormula(obj.falseData);
       }
       

+ 19 - 0
src/views/formula/component/table-form-write.vue

@@ -0,0 +1,19 @@
+<template>
+  <div>66666</div>
+</template>
+
+<script>
+export default {
+  name: "table-form-write",
+  props: {
+  
+  },
+  methods: {
+
+  }
+}
+</script>
+
+<style scoped lang="scss">
+</style>
+    

+ 370 - 80
src/views/formula/edit-old.vue → src/views/formula/edit-new.vue

@@ -39,7 +39,7 @@
       </div>
     </div>
     <div class="box-dashed">
-      <div class="mg-b-20">函数公式..</div>
+      <div class="mg-b-20">函数公式..(节点公式)</div>
       <div class="edit-text">
         <span>
           <formula-item
@@ -48,7 +48,7 @@
           >
           </formula-item>
         </span>
-        <span>=</span>
+        <span style="margin-left: 5px;margin-right: 5px;">=</span>
         <span   v-for="(item,index) in processFormula"     :key="index">
           <el-tooltip class="item" effect="light" placement="top-start" :disabled="item.type!=='Element'">
             <div slot="content">{{item.tableName }}</div>
@@ -66,24 +66,16 @@
       </div>
     </div>
     <div v-show="operationVisible" class="operation-box flex1 flex flex-d-c ov-hidden">
-      <div>选择参数设置</div>
+      <div class="flex ">
+        <div>选择参数设置</div>
+        <div style="margin-left: 29%;font-weight: 700;">公式配置</div>
+      </div>
       <div class="flex flex-d-c flex1 ov-hidden">
         <el-row :gutter="20" class="flex1 ov-hidden">
           <el-col :span="8" class="h-100p">
             <el-card shadow="never" v-loading="treeLoad" class="h-100p ov-auto">
               <el-scrollbar style="height: 100%">
-                <!-- <el-tree
-                  class="filter-tree"
-                  lazy
-                  :load="loadNode"
-                  @node-click="getNodeDetail"
-                  :props="defaultProps"
-                  :expand-on-click-node="false"
-                  highlight-current
-                  node-key="id"
-                  ref="tree"
-                >
-                </el-tree> -->
+              
                 <el-tree
                   class="filter-tree"
                   :data="treeData"
@@ -100,70 +92,78 @@
             </el-card>
           </el-col>
           <el-col :span="16" class="h-100p flex flex-d-c ov-hidden">
-            <div class="flex" style="justify-content: space-between;width:100%">
-               <el-select v-model="eleTableId" @change="getTableEle" placeholder="请选择元素表1" style="width:45%">
-                <el-option v-if="paramDataList.length" label="选择节点参数2" value="选择节点参数"></el-option>
-                <el-option  v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="(item.pkeyId!==null&&item.pkeyId!==-1)?item.pkeyId:item.id"></el-option>
-              </el-select>
-              <!-- 搜索元素下拉框 -->
-              <el-select v-model="input3" filterable clearable placeholder="搜索元素字段"  @change="getInput" style="width:45%">
-              <el-option
-                v-for="item in eleList1"
-                :key="item.id"
-                :label="item.eName"
-                :value="item.eName">
-              </el-option>
-              </el-select>
-            </div>
-           
-            <div class="mg-t-10 no-mb-col flex1 ov-hidden">
-              <el-scrollbar style="height: 100%">
-                <el-row v-loading="eleListable"  v-if="eleList.length>0">
-                  <el-col :span="6" v-for="item in eleList" :key="item.id" >
-                    <div class="ele-box">
-                      <span v-if="item.k">{{item.name}}</span>
-                      <span v-else>{{item.eName}}</span>
-                      <el-checkbox v-model="item.checked" @change="value => eleChang(value,item)"></el-checkbox>
-                    </div>
+            <div class="operation-box">
+              <!-- 运算符选择区域 -->
+                  <div class="flex jc-sb operation-symbol-box">
                     
-                  </el-col>
-                </el-row>
-                <el-row v-else style="text-align: center;line-height: 328px;border:1px solid #bbb">暂无数据</el-row>
-              </el-scrollbar>
-            </div>
-            <div class="flex jc-sb">
-              <!-- <div>定位数据位置:</div> -->
-              <div class="icon-box">
-                <el-link :underline="false" icon="el-icon-delete" type="danger" @click="removeSelect"></el-link>
-                <el-link :underline="false" type="primary" @click="addOperator('+')" icon="el-icon-circle-plus-outline"></el-link>
-                <el-link :underline="false" type="primary" @click="addOperator('-')" icon="el-icon-remove-outline"></el-link>
-                <el-link :underline="false" type="primary" @click="addOperator('*')" icon="el-icon-circle-close"></el-link>
-                <el-link :underline="false" type="primary" @click="addOperator('%')">÷</el-link>
-              </div>
-              <div>
-                <!-- <el-link :underline="false" type="primary" class="mg-r-20" @click="eleAddFormula">元素添加到公式</el-link> -->
-                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('(',false)">(</el-link>
-                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(')',true)">)</el-link>
-                <!-- <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('[',false)">【</el-link>
-                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(']',true)">】</el-link> -->
-                <el-link :underline="false" type="primary" @click="addText">输入值</el-link>
-              </div>
-            </div>
-            <div class="border-grey sele-ele-box" style="height:50px">
-              <draggable v-model="selectEleFormula">
-                <formula-item
-                  v-for="(item,index) in selectEleFormula" :key="index"
-                  :item="item" @click="obj => eleFormulaClick(obj,index)"
-                >
-                </formula-item>
-              </draggable>
+                    <div class="icon-box ">
+                        <span class="text-sm" >插入运算符:</span>
+                    
+                      <el-link :underline="false" type="primary" @click="addOperator('+')" icon="el-icon-circle-plus-outline"></el-link>
+                      <el-link :underline="false" type="primary" @click="addOperator('-')" icon="el-icon-remove-outline"></el-link>
+                      <el-link :underline="false" type="primary" @click="addOperator('*')" icon="el-icon-circle-close"></el-link>
+                      <el-link :underline="false" type="primary" @click="addOperator('%')">÷</el-link>
+                       <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('(',false)">(</el-link>
+                      <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(')',true)">)</el-link>
+                        <el-link :underline="false" type="primary" @click="addText">固定值</el-link>
+                    </div>
+                    <div>
+                      操作
+                    <el-link :underline="false" icon="el-icon-delete" type="danger" @click="removeSelect"></el-link>
+                    </div>
+                  </div>
+      
+                  
+                <div class="border-grey sele-ele-box1" >
+                    <draggable v-model="selectEleFormula">
+                      <formula-item
+                        v-for="(item,index) in selectEleFormula" :key="index"
+                        :item="item" @click="obj => eleFormulaClick(obj,index)"
+                      >
+                      </formula-item>
+                    </draggable>
+                  </div>
+                  <div class="flex mg-t-10" style="justify-content: space-between;width:100%;">
+                    <el-select v-model="eleTableId" @change="getTableEle" placeholder="请选择元素表1" style="width:45%">
+                      <el-option v-if="paramDataList.length" label="选择节点参数2" value="选择节点参数"></el-option>
+                      <el-option  v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="(item.pkeyId!==null&&item.pkeyId!==-1)?item.pkeyId:item.id"></el-option>
+                    </el-select>
+                    <!-- 搜索元素下拉框 -->
+                    <!-- <el-select v-model="input3" filterable clearable placeholder="搜索元素字段"  @change="getInput" style="width:45%">
+                      <el-option
+                        v-for="item in eleList1"
+                        :key="item.id"
+                        :label="item.eName"
+                        :value="item.eName">
+                      </el-option>
+                    </el-select> -->
+                     <div class="text-align-c">
+                      <el-button size="small" @click="canceloperationVisible ">取消</el-button>
+                      <el-button size="small" @click="operationHandle" type="primary">保存</el-button>
+                    </div>
+                  </div>
+           
+                <div class="mg-t-10 no-mb-col flex1" >
+                  <el-scrollbar style="height: 350px">
+                    <!-- <el-row v-loading="eleListable"  v-if="eleList.length>0">
+                      <el-col :span="6" v-for="item in eleList" :key="item.id" >
+                        <div class="ele-box">
+                          <span v-if="item.k">{{item.name}}</span>
+                          <span v-else>{{item.eName}}</span>
+                          <el-checkbox v-model="item.checked" @change="value => eleChang(value,item)"></el-checkbox>
+                        </div>
+                        
+                      </el-col>
+                    </el-row> -->
+                    <!-- <el-row v-else style="text-align: center;line-height: 328px;border:1px solid #bbb">暂无数据</el-row> -->
+                     777
+                  </el-scrollbar>
+                </div>
+         
             </div>
           </el-col>
         </el-row>
-        <div class="text-align-c">
-          <el-button size="small" @click="operationHandle" type="primary">保存</el-button>
-          <el-button size="small" @click="canceloperationVisible ">取消</el-button>
-        </div>
+       
       </div>
     </div>
     <div v-show="!operationVisible && !showFunDetail && !deviationRange.show">
@@ -205,7 +205,23 @@
           <template v-else>
             <div class="flex" >
               <div class=" flex-d-c"  style="width:40%">
-                <component ref="dynamiccomponent" v-bind:is="componentMap[item.name]" :formulainfo="item" :curele="equationSelectEle" :formulamap="formulaMap" @uncheck="unCheckEleComp" class="flex1"></component>
+                <component ref="dynamiccomponent" 
+                v-bind:is="componentMap[item.name]" 
+                :formulainfo="item" 
+                :curele="equationSelectEle" 
+                :formulamap="formulaMap"
+                :map="formulaDetailMap"
+                 @uncheck="unCheckEleComp" 
+                 class="flex1" 
+                 :moreConditions="moreConditions" 
+                :isMore="isMore"
+                :isGetData="isGetData"
+                :dataListGet="dataListGet"
+                :isDataChange="isDataChange"
+                :dataForm="dataForm"
+                :remark="remark"
+                >
+              </component>
                 <div class="flex1" v-show="item.showSelectEle" style="margin-top:10px;margin-bottom:30px">
                   <el-scrollbar style="height: 400px">
                     <el-tree
@@ -439,7 +455,6 @@ import datasReme from "./component/funComponent/datasReme"
 import datasGetlist from "./component/funComponent/datasGetlist"
 import datasJoin from "./component/funComponent/datasJoin"
 import ifelse from "./component/funComponent/ifelse"
-import dataChange from "./component/funComponent/dataChange"
 
 import deviationRange from "./component/deviationRange/deviationRange"
 import {rangeToString} from "./component/deviationRange/rangeToString"
@@ -448,6 +463,9 @@ import {formulaArrayToString} from "./formulaArrayToString"
 import {formulaStringToArray} from "./formulaStringToArray"
 
 import draggable from 'vuedraggable'
+import {formatArrayMore,restoreArrayMore,generateResult} from './component/funComponent/multiIfElseTools'
+import dataChange from "./component/funComponent/dataChange"
+import tableFormWrite from "./component/table-form-write.vue";
 
 export default {
   components: {
@@ -467,7 +485,8 @@ export default {
     ifelse,
  
     deviationRange,
-    dataChange
+    dataChange,
+    tableFormWrite
   },
   props: {
     wbsid:{
@@ -591,6 +610,16 @@ export default {
       version:1,//版本号,以后可能会有不兼容旧公式的改动,留作以后可能用来判断
       input3:'',//搜索元素字段
       eleListable:false,
+      isMore:false,//是否是多条件判断
+      moreConditions:[],//多条件判断数组
+      formulaDetailMap:{},//公式详情map
+      dataListGet:'',
+      isGetData:false,//是否获取数据
+      isDataChange:false,//是否数据自变
+      dataForm:'',
+      remark:'',//备注
+
+
     };
   },
   computed: {
@@ -1167,6 +1196,8 @@ export default {
     },
         //获取当前元素的表名
      getItemTableName(item){
+
+      
       if(item.type==="Element"){
         this.rightDict.forEach((ele)=>{
           if(ele.ekey===item.tableElementKey){
@@ -1360,10 +1391,198 @@ export default {
       return true;
     },
 
+
+
+
+
     //保存公式
     saveFormula(){
       console.log('保存',this.pid);
       console.log(this.processFormula,'this.processFormula1111111112333');
+      console.log(this.resultFormula,'this.resultFormula1111111112333');
+      console.log(this.$refs.dynamiccomponent,'this.$refs.dynamiccomponent');
+      
+      if(this.$refs.dynamiccomponent&&this.$refs.dynamiccomponent.length>0&&this.$refs.dynamiccomponent[0]&& this.$refs.dynamiccomponent[0].symbol=='more'){
+        //多条件保存公式
+
+        console.log('this.$refs.conditionList[0]',this.$refs.dynamiccomponent[0].conditionList);
+        let resMore=formatArrayMore(this.$refs.dynamiccomponent[0].conditionList);
+        const resJson=generateResult(this.$refs.dynamiccomponent[0].conditionList);
+        let remark=this.$refs.dynamiccomponent[0].remark;
+console.log(remark,'remark');
+
+        console.log(resJson,'resJson');
+        
+     
+            if(this.formulaid){
+              updateFormula({
+                id:this.formulaid,
+                formula:'',
+                formulas:resMore,
+                remark:remark,
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:JSON.stringify(resJson),
+                scope:this.globaltype,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                dev:deviationRangeText
+              }).then(()=>{
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "修改成功"
+                });
+              })
+            }else{
+              saveFormula({
+                formula:'',
+                formulas:resMore,
+                remark:remark,
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:JSON.stringify(resJson),
+                scope:this.globaltype,
+                dev:deviationRangeText,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                ver:this.version
+              }).then((res)=>{
+                if(res.data.data){
+                  this.formulaid = res.data.data;
+                }
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "保存成功"
+                });
+              })
+            }
+            
+            return;
+        
+        
+      }else if(this.$refs.dynamiccomponent&&this.$refs.dynamiccomponent.length>0&&this.$refs.dynamiccomponent[0]&& this.$refs.dynamiccomponent[0].symbol=='getData'){
+       //数据获取保存公式
+        const dataRes = this.$refs.dynamiccomponent[0].getDataConditionData();
+       console.log(dataRes,'dataRes');
+       const result =dataRes.result;
+       const mapEle = JSON.stringify(dataRes.mapEle);
+       console.log(mapEle,'mapEle');
+       
+
+            if(this.formulaid){
+              updateFormula({
+                id:this.formulaid,
+               formula:"FC.switchCase"+'('+result+')',
+             
+                remark:'',
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:mapEle,
+                scope:this.globaltype,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                dev:deviationRangeText
+              }).then(()=>{
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "修改成功"
+                });
+              })
+            }else{
+              saveFormula({
+                  formula:"FC.switchCase" +'('+result+')',
+          
+                remark:'',
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:mapEle,
+                scope:this.globaltype,
+                dev:deviationRangeText,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                ver:this.version
+              }).then((res)=>{
+                if(res.data.data){
+                  this.formulaid = res.data.data;
+                }
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "保存成功"
+                });
+              })
+            }
+            
+            return;
+       
+      }else if(this.$refs.dynamiccomponent&&this.$refs.dynamiccomponent.length>0&&this.$refs.dynamiccomponent[0]&& this.$refs.dynamiccomponent[0].formData){
+        console.log(this.$refs.dynamiccomponent[0],'this.$refs.dynamiccomponent[0');
+        const resForm=this.$refs.dynamiccomponent[0].getDataChangeList();
+        console.log(resForm,'resForm');
+        
+        //数据自变保存
+
+             if(this.formulaid){
+              updateFormula({
+                id:this.formulaid,
+                formula:resForm.test,
+                remark:'',
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:JSON.stringify(resForm.map),
+                scope:this.globaltype,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                dev:deviationRangeText
+              }).then(()=>{
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "修改成功"
+                });
+              })
+            }else{
+              saveFormula({
+                formula:resForm.test,
+                remark:'',
+                nodeId:this.nodeid,
+                elementId:this.eleid,
+                scale:this.isRetain?this.retainNum:'',
+                number:number,
+                map:JSON.stringify(resForm.map),
+                scope:this.globaltype,
+                dev:deviationRangeText,
+                // projectId:this.curProjiect.id||this.projectId,
+                projectId:this.curProjiect.id||this.pid,
+                ver:this.version
+              }).then((res)=>{
+                if(res.data.data){
+                  this.formulaid = res.data.data;
+                }
+                this.formulaStringToArray();
+                this.$message({
+                  type: "success",
+                  message: "保存成功"
+                });
+              })
+            }
+            return
+      }
+      
+      
       let arr=JSON.parse(JSON.stringify(this.processFormula));
       let filteredArr = arr.filter(item => item.id ===this.checkGsId);
       let obj
@@ -1371,7 +1590,7 @@ export default {
       obj = formulaArrayToString(this.processFormula,this.resultFormula);
       obj2 = formulaArrayToString(filteredArr,this.resultFormula);
         // 判断 obj2.text 是否包含 FC.ifelse
-      if (obj2.text && obj2.text.includes('FC.ifelse')) {
+      if (obj2.text && (obj2.text.includes('FC.ifelse'))|| obj2.text.includes("''")) {
         obj = obj2; // 如果包含 FC.ifelse,使用 obj2
       }
       let deviationRangeText = rangeToString(this.deviationRange.datas,obj.eleMap);
@@ -1465,6 +1684,43 @@ export default {
     async formulaStringToArray(){
       let detail = (await formulaDetail({elementId:this.eleid,scope:this.globaltype,nodeId:this.nodeid,projectId:this.curProjiect.id||this.pid})).data.data;
       console.log(detail,'detail');
+      this.remark = detail.remark;
+
+      if(detail&&detail.formula.includes('FC.ifelseMulti')){
+        detail.formula = detail.formula.replace('FC.ifelseMulti','FC.ifelse');
+        this.isMore = true;
+            this.formulaDetailMap = detail.map;
+        this.moreConditions =  restoreArrayMore(detail.formulas,this.formulaDetailMap)
+    
+      }else if(detail&&detail.formula.includes('FC.switchCase')){
+        //数据获取
+        this.formulaDetailMap = detail.map;
+         detail.formula = detail.formula.replace('FC.switchCase','FC.ifelse');
+         this.isGetData = true;
+         this.dataListGet=detail.formula
+         console.log( this.dataListGet,' this.dataListGet');
+         
+      }else if(detail&&detail.formula.includes('FC.dataChange')){
+        //数据自变
+        this.formulaDetailMap = detail.map;
+      
+         this.isDataChange = true;
+         this.dataForm=detail.formula
+         console.log( this.dataForm,' this.dataListGet');
+         
+      }
+      else{
+        this.isMore = false;
+        this.moreConditions = []
+        this.formulaDetailMap ={}
+        this.isGetData = false;
+        this.dataListGet=''
+        this.isDataChange = false;
+        this.dataForm='';
+
+      }
+
+    
       if(detail&&detail.id){
           //获取右边元素的字典
           let dictMap=detail.dict
@@ -1475,9 +1731,16 @@ export default {
 
         }
         this.rightDict=dictArr
+        console.log( this.rightDict,' this.rightDict');
+        
         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);
+      
+        
+        
         let formula = formulaStringToArray(detail.formula,detail.map,this.formulaMap);
+        console.log(formula,'formula');
+        
         this.processFormula = formula.processFormula;
         formula.resultFormula[0].id = this.resultFormula[0].id;
         formula.resultFormula[0].name = this.resultFormula[0].name;
@@ -1834,7 +2097,7 @@ export default {
 }
 
 .icon-box .el-link{
-  font-size: 24px;
+  font-size: 14px;
   margin-right: 10px;
 }
 </style>
@@ -1847,4 +2110,31 @@ export default {
     height: 100%;
   }
 }
+.operation-box-inset{
+  display: flex;
+  flex-direction: column;
+}
 </style>
+<style scoped>
+.operation-symbol-box{
+  display: flex;
+  align-items: center;
+  border: 1px solid rgb(229, 231, 235);
+  background-color: #F9FAFB;
+  padding: 10px 10px;
+  border-radius:  5px 5px 0px 0px;
+  margin-top: 10px;
+  
+}
+.sele-ele-box1{
+  padding: 10px;
+  border: 1px solid rgb(229, 231, 235);
+  border-radius: 0px 0px 5px 5px;
+
+  height: 50px;
+}
+.text-sm{
+  font-size: 14px;
+  margin-right: 10px;
+}
+</style>

+ 75 - 74
src/views/formula/edit.vue

@@ -66,16 +66,24 @@
       </div>
     </div>
     <div v-show="operationVisible" class="operation-box flex1 flex flex-d-c ov-hidden">
-      <div class="flex ">
-        <div>选择参数设置</div>
-        <div style="margin-left: 29%;font-weight: 700;">公式配置</div>
-      </div>
+      <div>选择参数设置</div>
       <div class="flex flex-d-c flex1 ov-hidden">
         <el-row :gutter="20" class="flex1 ov-hidden">
           <el-col :span="8" class="h-100p">
             <el-card shadow="never" v-loading="treeLoad" class="h-100p ov-auto">
               <el-scrollbar style="height: 100%">
-              
+                <!-- <el-tree
+                  class="filter-tree"
+                  lazy
+                  :load="loadNode"
+                  @node-click="getNodeDetail"
+                  :props="defaultProps"
+                  :expand-on-click-node="false"
+                  highlight-current
+                  node-key="id"
+                  ref="tree"
+                >
+                </el-tree> -->
                 <el-tree
                   class="filter-tree"
                   :data="treeData"
@@ -92,77 +100,70 @@
             </el-card>
           </el-col>
           <el-col :span="16" class="h-100p flex flex-d-c ov-hidden">
-            <div class="operation-box">
-              <!-- 运算符选择区域 -->
-                  <div class="flex jc-sb operation-symbol-box">
-                    
-                    <div class="icon-box ">
-                        <span class="text-sm" >插入运算符:</span>
-                    
-                      <el-link :underline="false" type="primary" @click="addOperator('+')" icon="el-icon-circle-plus-outline"></el-link>
-                      <el-link :underline="false" type="primary" @click="addOperator('-')" icon="el-icon-remove-outline"></el-link>
-                      <el-link :underline="false" type="primary" @click="addOperator('*')" icon="el-icon-circle-close"></el-link>
-                      <el-link :underline="false" type="primary" @click="addOperator('%')">÷</el-link>
-                       <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('(',false)">(</el-link>
-                      <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(')',true)">)</el-link>
-                        <el-link :underline="false" type="primary" @click="addText">固定值</el-link>
-                    </div>
-                    <div>
-                      操作
-                    <el-link :underline="false" icon="el-icon-delete" type="danger" @click="removeSelect"></el-link>
-                    </div>
-                  </div>
-      
-                  
-                <div class="border-grey sele-ele-box1" >
-                    <draggable v-model="selectEleFormula">
-                      <formula-item
-                        v-for="(item,index) in selectEleFormula" :key="index"
-                        :item="item" @click="obj => eleFormulaClick(obj,index)"
-                      >
-                      </formula-item>
-                    </draggable>
-                  </div>
-                  <div class="flex mg-t-10" style="justify-content: space-between;width:100%;">
-                    <el-select v-model="eleTableId" @change="getTableEle" placeholder="请选择元素表1" style="width:45%">
-                      <el-option v-if="paramDataList.length" label="选择节点参数2" value="选择节点参数"></el-option>
-                      <el-option  v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="(item.pkeyId!==null&&item.pkeyId!==-1)?item.pkeyId:item.id"></el-option>
-                    </el-select>
-                    <!-- 搜索元素下拉框 -->
-                    <!-- <el-select v-model="input3" filterable clearable placeholder="搜索元素字段"  @change="getInput" style="width:45%">
-                      <el-option
-                        v-for="item in eleList1"
-                        :key="item.id"
-                        :label="item.eName"
-                        :value="item.eName">
-                      </el-option>
-                    </el-select> -->
-                     <div class="text-align-c">
-                      <el-button size="small" @click="canceloperationVisible ">取消</el-button>
-                      <el-button size="small" @click="operationHandle" type="primary">保存</el-button>
-                    </div>
-                  </div>
+            <div class="flex" style="justify-content: space-between;width:100%">
+               <el-select v-model="eleTableId" @change="getTableEle" placeholder="请选择元素表1" style="width:45%">
+                <el-option v-if="paramDataList.length" label="选择节点参数2" value="选择节点参数"></el-option>
+                <el-option  v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="(item.pkeyId!==null&&item.pkeyId!==-1)?item.pkeyId:item.id"></el-option>
+              </el-select>
+              <!-- 搜索元素下拉框 -->
+              <el-select v-model="input3" filterable clearable placeholder="搜索元素字段"  @change="getInput" style="width:45%">
+              <el-option
+                v-for="item in eleList1"
+                :key="item.id"
+                :label="item.eName"
+                :value="item.eName">
+              </el-option>
+              </el-select>
+            </div>
            
-                <div class="mg-t-10 no-mb-col flex1" >
-                  <el-scrollbar style="height: 350px">
-                    <el-row v-loading="eleListable"  v-if="eleList.length>0">
-                      <el-col :span="6" v-for="item in eleList" :key="item.id" >
-                        <div class="ele-box">
-                          <span v-if="item.k">{{item.name}}</span>
-                          <span v-else>{{item.eName}}</span>
-                          <el-checkbox v-model="item.checked" @change="value => eleChang(value,item)"></el-checkbox>
-                        </div>
-                        
-                      </el-col>
-                    </el-row>
-                    <el-row v-else style="text-align: center;line-height: 328px;border:1px solid #bbb">暂无数据</el-row>
-                  </el-scrollbar>
-                </div>
-         
+            <div class="mg-t-10 no-mb-col flex1 ov-hidden">
+              <el-scrollbar style="height: 100%">
+                <el-row v-loading="eleListable"  v-if="eleList.length>0">
+                  <el-col :span="6" v-for="item in eleList" :key="item.id" >
+                    <div class="ele-box">
+                      <span v-if="item.k">{{item.name}}</span>
+                      <span v-else>{{item.eName}}</span>
+                      <el-checkbox v-model="item.checked" @change="value => eleChang(value,item)"></el-checkbox>
+                    </div>
+                    
+                  </el-col>
+                </el-row>
+                <el-row v-else style="text-align: center;line-height: 328px;border:1px solid #bbb">暂无数据</el-row>
+              </el-scrollbar>
+            </div>
+            <div class="flex jc-sb">
+              <!-- <div>定位数据位置:</div> -->
+              <div class="icon-box">
+                <el-link :underline="false" icon="el-icon-delete" type="danger" @click="removeSelect"></el-link>
+                <el-link :underline="false" type="primary" @click="addOperator('+')" icon="el-icon-circle-plus-outline"></el-link>
+                <el-link :underline="false" type="primary" @click="addOperator('-')" icon="el-icon-remove-outline"></el-link>
+                <el-link :underline="false" type="primary" @click="addOperator('*')" icon="el-icon-circle-close"></el-link>
+                <el-link :underline="false" type="primary" @click="addOperator('%')">÷</el-link>
+              </div>
+              <div>
+                <!-- <el-link :underline="false" type="primary" class="mg-r-20" @click="eleAddFormula">元素添加到公式</el-link> -->
+                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('(',false)">(</el-link>
+                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(')',true)">)</el-link>
+                <!-- <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets('[',false)">【</el-link>
+                <el-link :underline="false" type="primary" class="mg-r-10" @click="addBrackets(']',true)">】</el-link> -->
+                <el-link :underline="false" type="primary" @click="addText">输入值</el-link>
+              </div>
+            </div>
+            <div class="border-grey sele-ele-box" style="height:50px">
+              <draggable v-model="selectEleFormula">
+                <formula-item
+                  v-for="(item,index) in selectEleFormula" :key="index"
+                  :item="item" @click="obj => eleFormulaClick(obj,index)"
+                >
+                </formula-item>
+              </draggable>
             </div>
           </el-col>
         </el-row>
-       
+        <div class="text-align-c">
+          <el-button size="small" @click="operationHandle" type="primary">保存</el-button>
+          <el-button size="small" @click="canceloperationVisible ">取消</el-button>
+        </div>
       </div>
     </div>
     <div v-show="!operationVisible && !showFunDetail && !deviationRange.show">
@@ -1405,7 +1406,7 @@ export default {
         console.log('this.$refs.conditionList[0]',this.$refs.dynamiccomponent[0].conditionList);
         let resMore=formatArrayMore(this.$refs.dynamiccomponent[0].conditionList);
         const resJson=generateResult(this.$refs.dynamiccomponent[0].conditionList);
-        let remark=this.$refs.dynamiccomponent[0].remark;
+        let remark=this.$refs.dynamiccomponent[0].result;
 console.log(remark,'remark');
 
         console.log(resJson,'resJson');
@@ -1687,7 +1688,7 @@ console.log(remark,'remark');
         detail.formula = detail.formula.replace('FC.ifelseMulti','FC.ifelse');
         this.isMore = true;
             this.formulaDetailMap = detail.map;
-        this.moreConditions =  restoreArrayMore(detail.formulas,this.formulaDetailMap)
+        this.moreConditions =  restoreArrayMore(detail.formulas,this.formulaDetailMap,detail.remark||'1')
     
       }else if(detail&&detail.formula.includes('FC.switchCase')){
         //数据获取

+ 15 - 7
src/views/manager/projectinfo/editElement/editElement.vue

@@ -30,7 +30,7 @@
             <div class="martop20">
               <div style="font-weight: bold;">选中的元素</div>
               <div class="check_box">
-                <span v-for="(item,index) in checkList" :key="index" style="margin-right: 4px;">{{ '【'+item.name+'】' }}</span>
+                <span v-for="(item,index) in checkList" :key="index" style="margin-right: 4px;">{{ item.name }}</span>
               </div>
             </div>
       
@@ -85,7 +85,7 @@
           ref="cascader"></el-cascader-panel>
       </el-dialog>
 
-      <el-dialog title="添加新元素字段" :visible="AddNewElementField == '新增元素'" width="60%" :before-close="handleClose"
+      <el-dialog title="添加新元素字段" :visible="AddNewElementField == '新增元素'" width="60%" :before-close="handleClose" :close-on-click-modal="false"
         :modal-append-to-body="false" style="z-index: 999999;">
         <div>
           <i @click="addyuansu" class="el-icon-circle-plus marbottom10"
@@ -806,7 +806,7 @@ export default {
     //excel父节点点击检测
     parentClick(e) {
 
-
+      let isNameEmpty = false;
       const { metaKey, ctrlKey } = e
       let target = e.target;
   
@@ -816,16 +816,24 @@ export default {
         bgs[i].classList.remove("oldlace-bg");
       }
       let tdEle = this.getParentTD(target);
-      console.log(tdEle, 'tdEle');
+
       let target1
       if (tdEle) {
         let mydiv = tdEle.getElementsByTagName('div')
         target1 = mydiv[0]
+        if(target1.classList.contains('warnstyle')){
+       
+          isNameEmpty = true
+
+          
+        }else{
+          isNameEmpty = false
+        }
       } else {
         tdEle = target
         let mydiv = tdEle.getElementsByTagName('div')
         target = mydiv[0]
-
+         isNameEmpty = false
       }
 
       let curTdEle = this.getTd(target);
@@ -846,14 +854,14 @@ export default {
               this.checkList.push({
                 tr: target.getAttribute('trindex') || target1.getAttribute('trindex'),
                 td: target.getAttribute('tdindex') || target1.getAttribute('tdindex'),
-                name: curTdEle.getAttribute("title")
+                name: !isNameEmpty?curTdEle.getAttribute("title")||'暂未匹配元素':'暂未匹配元素'
 
               })
             }else{
                this.checkList=[{
                 tr: target.getAttribute('trindex') || target1.getAttribute('trindex'),
                 td: target.getAttribute('tdindex') || target1.getAttribute('tdindex'),
-                name: curTdEle.getAttribute("title")
+                name: !isNameEmpty?curTdEle.getAttribute("title")||'暂未匹配元素':'暂未匹配元素'
 
                }]
             }

+ 38 - 17
src/views/manager/projectinfo/tree.vue

@@ -105,10 +105,10 @@
                  <el-button type="primary" @click="searchTreeClick1"  v-else size="mini" 
                 >搜索</el-button
               >
-              <el-tooltip content="查询工序节点无内业资料类型" placement="top">
+              
                 <el-button type="success" @click="filterSearchClick"  v-if="isNodeType&&!filterByType" size="mini">筛选</el-button>
                 <el-button type="success" @click="filterSearchClickCancel" v-if="isNodeType&&filterByType" size="mini">取消筛选</el-button>
-              </el-tooltip>
+             
               <el-button
                 v-if="isNodeType"
                 style="margin-right: 10px"
@@ -3910,7 +3910,7 @@ closeOtherExpandedNodes(tree, keepOpenPath) {
        
        
           if(this.isNodeType){
-              removeTableById(row.id, this.projectid, this.id).then(() => {
+              removeTableById(row.id, this.projectid, this.id,row.pKeyId).then(() => {
                 this.formData.splice(index, 1);
                 this.$message({
                   type: "success",
@@ -4073,20 +4073,41 @@ closeOtherExpandedNodes(tree, keepOpenPath) {
       if (this.filterText.length > 0) {
         this.isSearch = true;
         this.searchtreeLoad = true;
-        getQueryValueByType({
-          queryValue: this.filterText,
-          type: this.searchType,
-          wbsId: this.id,
-          projectId: this.projectid,
-        }).then((res) => {
-          let arr = [];
-          if (Array.isArray(res.data.data)) {
-            arr = res.data.data;
-            this.searchTreeData = arr;
-          } else {
-            this.searchTreeData = [];
-          }
-        });
+
+        if(!this.filterByType){
+                getQueryValueByType({
+                  queryValue: this.filterText,
+                  type: this.searchType,
+                  wbsId: this.id,
+                  projectId: this.projectid,
+                }).then((res) => {
+                  let arr = [];
+                  if (Array.isArray(res.data.data)) {
+                    arr = res.data.data;
+                    this.searchTreeData = arr;
+                  } else {
+                    this.searchTreeData = [];
+                  }
+                });
+        }else{
+                    getQueryValueByNodeType({
+                      ...this.filterForm,
+                      queryValue: this.filterText,
+                      wbsId: this.id,
+                      projectId: this.projectid,
+                      
+                    }).then((res) => {
+                        this.filterByType=true
+                      let arr = [];
+                      if (Array.isArray(res.data.data)) {
+                        arr = res.data.data;
+                        this.searchTreeData = arr;
+                      
+                      } else {
+                        this.searchTreeData = [];
+                      }
+                    });
+        }
       } else {
         this.isSearch = false;
       }

+ 68 - 48
src/views/manager/wbsinfo/TreeCopyModal.vue

@@ -32,7 +32,7 @@
           @check="handleSourceCheck"
           check-strictly
           :default-expanded-keys="defaultExpandedKeys" 
-           :default-checked-keys="[checkId]"
+           
 
         ></el-tree>
       </div>
@@ -58,6 +58,7 @@
           :expand-on-click-node="false"
           @check="handleTargetCheck"
           :default-expanded-keys="defaultExpandedKeys" 
+        
            
         ></el-tree>
       </div>
@@ -66,8 +67,8 @@
     <!-- 底部按钮 -->
     <div slot="footer" class="dialog-footer">
       <el-button @click="handleClose">取消</el-button>
-      <el-button type="primary" @click="handleLinkAndExit" :loading="linkLoading">关联并退出</el-button>
-      <el-button type="success" @click="handleLinkAndContinue" :loading="linkLoading">关联并继续</el-button>
+      <el-button type="primary" @click="handleLinkAndExit" :loading="linkLoading">复制并退出</el-button>
+      <el-button type="success" @click="handleLinkAndContinue" :loading="linkLoading">复制并继续</el-button>
     </div>
   </el-dialog>
 </template>
@@ -164,27 +165,43 @@ export default {
   methods: {
     // 显示弹窗
     show() {
-    this.isShowTree = true;
-    this.isShowRight = true;
+      this.isShowTree = true;
+      this.isShowRight = true;
       this.visible = true;
+      
       // 重置选中状态
       this.selectedSourceNodes = [];
       this.selectedTargetNodes = [];
-      // 重置树
-      if (this.$refs.sourceTree) {
-        this.$refs.sourceTree.setCheckedKeys([]);
-      }
-      if (this.$refs.targetTree) {
-        this.$refs.targetTree.setCheckedKeys([]);
-      }
+      
+      // 使用 $nextTick 确保 DOM 已更新
+      this.$nextTick(() => {
+        // 设置默认选中的源节点
+        if (this.checkId && this.$refs.sourceTree) {
+          this.$refs.sourceTree.setCheckedKeys([this.checkId]);
+        
+           setTimeout(() => {
+              const checkedNodes = this.$refs.sourceTree.getCheckedNodes();
+              this.selectedSourceNodes = checkedNodes;
+              console.log('选中的节点:', this.selectedSourceNodes);
+            }, 3000);
+        }
+        
+        // 重置目标树
+        if (this.$refs.targetTree) {
+          this.$refs.targetTree.setCheckedKeys([]);
+        }
+      });
     },
 
+
     // 关闭弹窗
     handleClose() {
       this.visible = false;
       this.$emit('close');
       this.isShowTree=false
       this.isShowRight=false
+      this.checkId = ''
+
     },
 
     // 加载源树节点
@@ -276,43 +293,44 @@ export default {
     },
 
     // 处理关联操作
-    handleLink(exitAfterLink) {
-      if (this.selectedSourceNodes.length === 0 || this.selectedTargetNodes.length === 0) {
-        this.$message.warning('请至少选择一个源节点和一个目标节点');
-        return;
-      }
-
-      // 准备关联数据
-      const linkData = {
-        sourceNodes: this.selectedSourceNodes.map(node => node.id),
-        targetNodes: this.selectedTargetNodes.map(node => node.id)
-      };
-
-      // 触发父组件的关联事件
-      this.$emit('link', linkData, () => {
-        this.$message.success('关联成功');
-        if (exitAfterLink) {
-          this.handleClose();
-        } else {
-          // 清空选择但不关闭弹窗
-          this.clearSelections(); // 清空选择但不关闭弹窗
-         
+   handleLink(exitAfterLink) {
+  if (this.selectedSourceNodes.length === 0 || this.selectedTargetNodes.length === 0) {
+    this.$message.warning('请至少选择一个源节点和一个目标节点');
+    return;
+  }
 
-        }
-      });
-       this.isShowTree=false
-          
-          setTimeout(() => {
-            this.isShowTree=true
-         
-          }, 1000);
-            this.isShowRight=false
-          
-          setTimeout(() => {
-            this.isShowRight=true
-         
-          }, 1000);
-    },
+  // 准备关联数据
+  const linkData = {
+    sourceNodes: this.selectedSourceNodes.map(node => node.id),
+    targetNodes: this.selectedTargetNodes.map(node => node.id)
+  };
+
+  // 触发父组件的关联事件,将刷新操作移到回调中
+  this.$emit('link', linkData, () => {
+    this.$message.success('复制成功');
+    
+    // 接口调用成功后执行的操作
+    this.isShowTree = false;
+    setTimeout(() => {
+      this.isShowTree = true;
+    }, 1000);
+    
+    this.isShowRight = false;
+    setTimeout(() => {
+      this.isShowRight = true;
+      this.selectedSourceNodes = [];
+      this.selectedTargetNodes = [];
+      this.checkId = '';
+    }, 1000);
+
+    if (exitAfterLink) {
+      this.handleClose();
+    } else {
+      // 清空选择但不关闭弹窗
+      this.clearSelections();
+    }
+  });
+},
     // 新增清空选择的方法
     clearSelections() {
       // 确保组件已加载
@@ -335,6 +353,8 @@ export default {
       // 手动清空数据
       this.selectedSourceNodes = [];
       this.selectedTargetNodes = [];
+
+       this.checkId = ''
     }
   }
 };