Explorar el Código

计算日期间隔时分

jbb hace 2 años
padre
commit
2a591498bf
Se han modificado 1 ficheros con 111 adiciones y 53 borrados
  1. 111 53
      src/views/activiti/form/demoForm2.vue

+ 111 - 53
src/views/activiti/form/demoForm2.vue

@@ -185,6 +185,8 @@ export default {
                                 this.dynamicData.add = this.add // 新增按钮
                                 // 获取json
                                 this.jsonData = res.result.jsonContent
+                                // this.jsonData.list[8].columns[0].list[0].help = "input_1627377270350,input_1627377316607,-"
+                                // this.jsonData.list[3].help = 'date_1626143660261,-,date_1626143662152'
                                 this.cvarr = []
                                 this.cvarr = []
                                 this.fArr =[]
@@ -209,6 +211,7 @@ export default {
             } else {
                 // 获取json
                 this.jsonData = res.result.jsonContent
+                // this.jsonData.list[2].columns[0].list[0].help = 'date_1663752082983,date_1663753163575'
                  this.cvarr = []
                  this.fArr =[]
                  //遍历help(计算)
@@ -331,7 +334,7 @@ export default {
                 if (typeof(obj[a]) == "object"){
                     if(obj[a].help !=='' && obj[a].help){
                         //保存每一项的label和key
-                        this.cvarr.push({model:obj[a].model,key:obj[a].key})
+                        this.cvarr.push({model:obj[a].model,key:obj[a].key,type:obj[a].type})
                         obj[a].help = obj[a].help.split(',')
                         //保存含有help的item中的label和help里的信息
                         this.fArr=[
@@ -344,24 +347,22 @@ export default {
                                   value:'',
                                  },
                                 {
-                                  label: obj[a].help[2],
+                                  label: obj[a].help[1],
                                   value:'',
                                  },
                                 {
-                                   label: obj[a].help[1],
-                                   value:''
-                                }
+                                   label: obj[a].help[2],
+                                   value:'',
+                                },
                             ]
                         //保存多各含有help的数据
                         this.bv.push({bn:this.fArr})
                     }else if(obj[a].help ==''){
-                        this.cvarr.push({model:obj[a].model,key:obj[a].key})
+                        this.cvarr.push({model:obj[a].model,key:obj[a].key,type:obj[a].type})
                     }
                     this.forHelp(obj[a])
                 }
-                
-                }
-               
+                }               
         },
         // 获取申请人信息
         getApplicant () {
@@ -376,55 +377,87 @@ export default {
         // 表单字段数值发生改变事件
         handleChange (value, key) {  
             //保存发生改变字段名对应的key 
-            var cc =''
-            this.cvarr.map(item=>{
-                if(item.model ==key){
-                    cc=item.key
-                }
-            })
+            var cc ='',
+                type = ''
+                this.cvarr.map(k =>{
+                     if(k.model ==key){
+                        cc=k.key
+                        type = k.type
+                      }})
             //根据数值改变计算
             this.bv.map(event =>{
                 event.bn.map((item,index) =>{
                  if(item.label == cc && index!==0){
                     item.value = value
-                    if(event.bn[3].label =="+"){
-                      event.bn[0].value = Number(event.bn[1].value)+Number(event.bn[2].value)  
-                    }else if(event.bn[3].label =="-"){
-                      event.bn[0].value = Number(event.bn[1].value)-Number(event.bn[2].value)  
+                    //保存计算的字段
+                    var gg =[]
+                    gg.push(event.bn[1])
+                    gg.push(event.bn[2])
+                    //判断未改变的是哪个字段                            
+                    var arr = gg.filter(item => item.label !== cc)
+                    //寻找未改变字段的model值
+                    var keyLabel = ''
+                    this.cvarr.map(k =>{  
+                      if(k.key ==arr[0].label){
+                         keyLabel = k.model
+                     }})
+                     //复制给对应字段
+                    event.bn.map(i =>{
+                      if(i.label == arr[0].label){
+                        i.value = this.$refs.KFB.form.getFieldValue(keyLabel)
+                      }
+                    })  
+                    if(type == 'date'){
+                        if(event.bn[1].value!=='' && event.bn[2].value!==''){
+                            var state = ''
+                            if(event.bn[3].label == ''|| !event.bn[3].label){
+                                state ='hour'
+                            }else{
+                                state = event.bn[3].label
+                            }
+                            event.bn[0].value = this.timeDifference(event.bn[1].value,event.bn[2].value,state)
+                        }
+                    }else{
+                        if(event.bn[3].label =="+"){
+                           event.bn[0].value = Number(event.bn[1].value)+Number(event.bn[2].value)  
+                        }else if(event.bn[3].label =="-"){
+                           event.bn[0].value = Number(event.bn[1].value)-Number(event.bn[2].value)  
+                        }
                     }
+                   
                     this.$refs.KFB.setData({[event.bn[0].label]:event.bn[0].value})
                 }
                 })
-            })       
-            // 数据变化时触发
-            // 如果开始时间发生变化
-            if (key == 'start_time') {
-                // 判断结束时间是否存在
-                if (this.$refs.KFB.form.getFieldValue('end_time')) {
-                    // 获取时间差
-                    let duration = startEndFun(value, this.$refs.KFB.form.getFieldValue('end_time'))
-                    if (duration) {
-                        // 使用k-form-design组件的form属性修改表单数据
-                        this.$refs.KFB.setData({
-                            duration: duration
-                        })
-                    }
-                }
-            }
-            // 如果结束时间发生变化
-            if (key == 'end_time') {
-                // 判断结束时间是否存在
-                if (this.$refs.KFB.form.getFieldValue('start_time')) {
-                    // 获取时间差
-                    let duration = startEndFun(this.$refs.KFB.form.getFieldValue('start_time'), value)
-                    if (duration) {
-                        // 使用k-form-design组件的form属性修改表单数据
-                        this.$refs.KFB.setData({
-                            duration: duration
-                        })
-                    }
-                }
-            }
+            })     
+            // // 数据变化时触发
+            // // 如果开始时间发生变化
+            // if (key == 'start_time') {
+            //     // 判断结束时间是否存在
+            //     if (this.$refs.KFB.form.getFieldValue('end_time')) {
+            //         // 获取时间差
+            //         let duration = startEndFun(value, this.$refs.KFB.form.getFieldValue('end_time'))
+            //         if (duration) {
+            //             // 使用k-form-design组件的form属性修改表单数据
+            //             this.$refs.KFB.setData({
+            //                 duration: duration
+            //             })
+            //         }
+            //     }
+            // }
+            // // 如果结束时间发生变化
+            // if (key == 'end_time') {
+            //     // 判断结束时间是否存在
+            //     if (this.$refs.KFB.form.getFieldValue('start_time')) {
+            //         // 获取时间差
+            //         let duration = startEndFun(this.$refs.KFB.form.getFieldValue('start_time'), value)
+            //         if (duration) {
+            //             // 使用k-form-design组件的form属性修改表单数据
+            //             this.$refs.KFB.setData({
+            //                 duration: duration
+            //             })
+            //         }
+            //     }
+            // }
         },
         // handler
         handleSubmit (e) {
@@ -790,7 +823,32 @@ export default {
                     updateModel(element, modelIndex)
                 }
             })
-        }
+        },
+        //计算时间差
+        timeDifference(start, end,state){
+            if(start>end){
+               this.$message.error('起始时间不可大于结束时间');
+            }else{
+              let beginTime = (new Date(start).getTime()) / 1000;
+              let endTime = (new Date(end).getTime()) / 1000;
+               //计算天数
+              var timediff = endTime - beginTime;
+              var days = parseInt(timediff / 86400);
+             //计算小时数
+             var remain = timediff % 86400;
+             var hours = parseInt(remain / 3600);
+             //计算分钟数
+             var remain = remain % 3600;
+             var mins = parseInt(remain / 60);
+             var res = days + '天' + hours + '小时' + mins + '分';
+             if(state == 'min'){
+                return days*24*60+hours*60+mins
+             }else if(state == 'hour'){
+                 return days*24+hours+mins/60
+             }  
+            }
+             
+      }
     }
 }
 
@@ -812,12 +870,13 @@ function getFiledNames (formData) {
     })
     return filedNames
 }
-
 // 根据开始时间 结束时间计算天数
 function startEndFun (start, end) {
     let startTime = new Date(start)
     let endTime = new Date(end)
-    if (startTime >= endTime) return 0
+    if (startTime >= endTime) {
+        return 0
+        }
     // 1,分钟取整
     startTime = carryTime(startTime)
     endTime = carryTime(endTime)
@@ -880,7 +939,6 @@ function startEndFun (start, end) {
     var days = Math.floor(totalTime)
     var hours = Math.round((totalTime - days) * 100) / 10
     console.log(days + '天', hours + '小时')
-
     return days * 8 + hours
 
     // if (start && end) {