Jelajahi Sumber

公式 日期偏移 页面

gangyj 3 tahun lalu
induk
melakukan
23423c1183

+ 149 - 0
src/views/formula/component/funComponent/dateDeviation.vue

@@ -0,0 +1,149 @@
+<template>
+  <div>
+    <div>
+      <span class="mg-r-10">日期增减</span>
+      <el-button size="small" type="info" @click="showSelectEle">选择参数</el-button>
+    </div>
+    <div class="text-warning">
+      输入某个固定日期/选择引用某个日期参数+/-固定天数(可选择引用某个参数值,也可输入固定值)
+    </div>
+    <div class="mg-t-10 flex">
+      <template>
+        <el-tag closable v-if="arg0Name" @close="deleteEle('0')">{{arg0Name}}</el-tag>
+        <el-input v-else :value="''" @focus="curFocusIndex = 1" placeholder="引用参数名称" size="medium" style="width:100px"></el-input>
+      </template>
+      
+      <span style="font-size:35px" class="mg-l-20 mg-r-20">/</span>
+      <el-date-picker v-model="dateValue" type="date" size="medium" placeholder="选择日期" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd" @change="dateChange"></el-date-picker>
+      <el-select v-model="operator" @change="operChange" placeholder="请选择" size="medium" style="width:100px" class="mg-l-20 mg-r-20">
+        <el-option label="+" value="+"></el-option>
+        <el-option label="-" value="-"></el-option>
+      </el-select>
+
+      <template>
+        <el-tag closable v-if="arg1Name" @close="deleteEle('1')">{{arg1Name}}</el-tag>
+        <el-input v-else :value="''" @focus="curFocusIndex = 2" size="medium" placeholder="参数名称" style="width:100px"></el-input>
+      </template>
+
+      <span style="font-size:35px" class="mg-l-20 mg-r-20">/</span>
+      <el-input v-model="input" placeholder="输入值" size="medium" @change="inputChange" style="width:100px"></el-input>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "dateDeviation",
+  props: {
+    formulainfo: {
+      type: Object,
+      default: function () {
+        return {};
+      }
+    },
+    curele: {
+      type: Object,
+      default: function () {
+        return {};
+      }
+    },
+  },
+  data(){
+    return{
+      dateValue:'',
+      operator:'+',
+      input:'',
+      arg0Name:"",
+      arg1Name:"",
+
+      curFocusIndex:0,
+    }
+  },
+  mounted(){
+    //console.log(this.formulainfo.arguments[0])
+    //console.log(this.formulainfo.arguments[1])
+    let arg0 = this.formulainfo.arguments[0];
+    let arg1 = this.formulainfo.arguments[1];
+    if(this.isELe(arg0)){
+      this.arg0Name = arg0.name;
+    }else{
+      this.dateValue = arg0;
+    }
+
+    if(this.isELe(arg1)){
+      this.arg1Name = arg1.name;
+    }else{
+      this.input = arg1;
+    }
+  },
+  methods:{
+    showSelectEle(){
+      this.$set(this.formulainfo,'showSelectEle',!this.formulainfo.showSelectEle);
+    },
+
+    deleteEle(type){
+      if(type == '0'){
+        this.arg0Name = '';
+        this.formulainfo.arguments[0] = undefined;
+      }else if(type == '1'){
+        this.arg1Name = '';
+        this.formulainfo.arguments[1] = undefined;
+      }
+    },
+
+    isELe(ele){
+      if(typeof ele == 'object' && ele != null){
+        return true;
+      }
+      return false;
+    },
+
+    dateChange(value){
+      this.arg0Name = '';
+      this.formulainfo.arguments[0] = value;
+    },
+
+    inputChange(value){
+      this.arg1Name = '';
+      this.formulainfo.arguments[1] = value;
+    },
+
+    operChange(value){
+      if(!this.isELe(this.formulainfo.arguments[1])){
+        if(value == '-'){
+          this.formulainfo.arguments[1] = value + this.input;
+        }else{
+          this.formulainfo.arguments[1] = this.input;
+        }
+      }
+    },
+
+    setELe(ele){
+      if(this.curFocusIndex){
+        let obj = {
+          type:'Element',
+          name:ele.eName,
+          id:ele.id,
+          selected:false,
+          tableElementKey:ele.tableElementKey,
+          children:[],
+        }
+        if(this.curFocusIndex == 1){
+          this.formulainfo.arguments[0] = obj;
+          this.arg0Name = obj.name;
+          this.dateValue = '';
+        }else if(this.curFocusIndex == 2){
+          this.formulainfo.arguments[1] = obj;
+          this.arg1Name = obj.name;
+          this.input = '';
+        }
+
+        this.curFocusIndex = 0;
+      }
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+  
+</style>

+ 68 - 4
src/views/formula/edit.vue

@@ -161,9 +161,50 @@
     <div v-if="!operationVisible && showFunDetail">
       <el-tabs v-model="actiFunIndex" closable @tab-remove="removeFun" :before-leave="funLeave">
         <el-tab-pane v-for="(item,index) in equationSelectEle.children" :key="index" :label="item.name" :name="index.toString()">
-          <formula-template :formulainfo="item" :curele="equationSelectEle" @sele-ele-handle="showChooseEle">
-            
-          </formula-template>
+          <template v-if="!componentMap[item.name]">
+            <formula-template ref="dynamiccomponent" :formulainfo="item" :curele="equationSelectEle" @sele-ele-handle="showChooseEle">
+            </formula-template>
+          </template>
+          <template v-else>
+            <div class="flex">
+              <div class="flex flex-d-c">
+                <component ref="dynamiccomponent" v-bind:is="componentMap[item.name]" :formulainfo="item" :curele="equationSelectEle" class="flex1"></component>
+                <div v-show="item.showSelectEle">
+                  <el-select v-model="eleTableId" @change="getTableEleComp" placeholder="请选择元素表" style="width:100%">
+                    <el-option  v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="item.id"></el-option>
+                  </el-select>
+                  <div class="mg-t-10 mg-b-10 no-mb-col" style="width:900px">
+                    <el-scrollbar style="max-height: 210px;min-height:100px">
+                      <el-row>
+                        <el-col :span="6" v-for="item in eleListComp" :key="item.id">
+                          <div class="ele-box">
+                            <span>{{item.eName}}</span>
+                            <el-checkbox @change="value => setComponentEle(value,item,index)"></el-checkbox>
+                          </div>
+                        </el-col>
+                      </el-row>
+                    </el-scrollbar>
+                  </div>
+                </div>
+              </div>
+              <div class="flex1" v-show="item.showSelectEle">
+                <el-scrollbar style="height: 460px">
+                  <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-scrollbar>
+              </div>
+            </div>
+          </template>
         </el-tab-pane>
       </el-tabs>
     </div>
@@ -235,12 +276,16 @@ import {mapGetters} from "vuex";
 import formulaItem from "./component/formulaItem"
 import formulaTemplate from "./component/formulaTemplate"
 
+import dateDeviation from "./component/funComponent/dateDeviation"
+
 import {formulaArrayToString} from "./formulaArrayToString"
 import {formulaStringToArray} from "./formulaStringToArray"
 export default {
   components: {
     formulaItem,
-    formulaTemplate
+    formulaTemplate,
+
+    dateDeviation
   },
   data() {
     return {
@@ -287,6 +332,11 @@ export default {
       symbolReg:/(\+|-|\*|\/)(.+)/,
       operatorReg : /^\+|-|\*|%/,//加减乘除
       startFCRegExp : /^FC\.([a-zA-Z]+)\(/,// 匹配开始的FC.xxx(
+
+      componentMap:{
+        '日期偏移':'date-deviation',
+      },
+      eleListComp:[],
     };
   },
   computed: {
@@ -700,6 +750,14 @@ export default {
       }
     },
 
+
+    //设置动态组件里面的元素
+    setComponentEle(value,item,index){
+      if(value){
+        this.$refs.dynamiccomponent[index].setELe(item);
+      }
+    },
+
     getNodeDetail(data) {
       selectByNodeTable(data.id).then((res)=>{
         if(res.data.data.length){
@@ -730,6 +788,12 @@ export default {
       })
     },
 
+    getTableEleComp(tableId){
+      selectFormElements(tableId).then((res)=>{
+        this.eleListComp = res.data.data;
+      })
+    },
+
     getTypeMap(){
       return new Promise((resolve)=>{
         getTypeMap().then((res)=>{