Просмотр исходного кода

前端表头控件之间规则:时间关联-父子级关联

Zhouzhendong 5 лет назад
Родитель
Сommit
dfb944d61a

+ 7 - 0
app/Http/Controllers/OrderController.php

@@ -31,10 +31,17 @@ class OrderController extends Controller
         $waveno=$request->input('waveno');
         $edisendflag2=$request->edisendflag2;
         $edisendflag=$request->edisendflag;
+        if ($orderdate_start && $orderdate_end && $addtime){
+            $request->offsetUnset('orderdate_start');$request->offsetUnset('orderdate_end');
+            $orderdate_start=null;
+            $orderdate_end=null;
+        }
         if ($orderdate_start){
+            if (strlen($orderdate_start)<11)$orderdate_start .= ' 00:00';
             $sql.=" and addtime>='".$orderdate_start.":00'";
         }
         if ($orderdate_end){
+            if (strlen($orderdate_end)<11)$orderdate_end .= ' 23:59 ';
             $sql.=" and addtime<='".$orderdate_end.":59' ";
         }
         if ($customerid){

+ 103 - 5
resources/js/queryForm/queryForm.js

@@ -671,7 +671,7 @@ const query = function getQueryForm(data) {
             label.show();
         }
     }
-
+    
     // modify _data
     function modifyData(dom) {
         _data[dom.name].mold = dom.mold;
@@ -684,8 +684,101 @@ const query = function getQueryForm(data) {
                 redenerSearchFormOnData(_data[targetName].name, '', _data[targetName].mold);
             })
         }
+
+        /* rules 规则
+        *  son 子级元素 对象形式多传递 子级元素不存在时且 required_without_all_if 忽略列表内元素皆无值时使子级元素设置默认值
+        *       {son:{key:{required_without_all_if:[],default:''}}}
+        * date_relevance 时间关联 对象形式传递 date为起终时间 relevance为关联元素name
+        *   killing为标记干掉哪种类型元素(enum('date','relevance')) default为relevance列表值,时间差存在于该值中才会去选中
+        *   {date_relevance:{date:['',''],relevance:'',killing:'',default:[]}}
+        * */
+        let rules = _data[dom.name].rules;
+        if (JSON.stringify(rules) !== '{}'){
+            if (rules['son']){
+                for (let key in rules['son']){
+                    if (!dom.value){
+                        redenerSearchFormOnData(_data[key].name, '', _data[key].mold);
+                        continue;
+                    }
+                    if (!_data[key].value){
+                        if (rules['son'][key].required_without_all_if && Array.isArray(rules['son'][key].required_without_all_if)){
+                            let sign = true;
+                            rules['son'][key].required_without_all_if.forEach(function (name) {
+                                if (_data[name].value) sign=false;
+                            });
+                            if (sign) redenerSearchFormOnData(_data[key].name, rules['son'][key].default, _data[key].mold);
+                        }
+                    }
+                }
+            }
+            if (rules['date_relevance']){
+                if (!rules['date_relevance']['date']
+                    || !Array.isArray(rules['date_relevance']['date'])
+                    || rules['date_relevance']['date'].length !== 2
+                    || !rules['date_relevance']['relevance']) return;
+                let start = _data[rules['date_relevance']['date'][0]];
+                let end = _data[rules['date_relevance']['date'][1]];
+                let relevance = _data[rules['date_relevance']['relevance']];
+                if (dom.name === rules['date_relevance']['relevance']){
+                    if (relevance.value){
+                        let today = getToday();
+                        let tarDate = getSubDate(getToday(),relevance.value);
+                        _data[end.name].value = today;
+                        _data[start.name].value = tarDate;
+                        redenerSearchFormOnData(end.name, tarDate, end.mold);
+                        redenerSearchFormOnData(start.name, tarDate, start.mold);
+                    }
+                    return;
+                }
+                if (!start.value || !end.value){
+                    if (rules['date_relevance']['killing'] === 'date'){
+                        _data[start.name].value = '';
+                        redenerSearchFormOnData(start.name, '', start.mold);
+                        _data[start.name].value = '';
+                        redenerSearchFormOnData(end.name, '', end.mold);
+                    }else{
+                        _data[relevance.name].value = '';
+                        redenerSearchFormOnData(relevance.name, '', relevance.mold);
+                    }
+                }
+                if (start.value && end.value){
+                    start.value = start.value.replace('+',' ');
+                    end.value = end.value.replace('+',' ');
+                    let diff = getDiffDay(start.value,end.value);
+                    if (rules['date_relevance']['default'] && rules['date_relevance']['default'].includes(diff)){
+                        _data[relevance.name].value = diff;
+                        redenerSearchFormOnData(relevance.name, diff, relevance.mold);}
+                    else {
+                        _data[relevance.name].value = '';
+                        redenerSearchFormOnData(relevance.name, '', relevance.mold);
+                    }
+                }
+            }
+        }
+    }
+    function getDiffDay(startDate,endDate) {
+        startDate = new Date(startDate);
+        endDate = new Date(endDate);
+        return Math.floor((endDate.getTime() - startDate.getTime())/(24*3600*1000));
+    }
+    
+    function getSubDate(date,value) {
+        date = new Date(date);
+        date.setDate(date.getDate() - value);
+        return dateFormat(date);
+    }
+
+    function getToday() {
+        let myDate = new Date();
+        return dateFormat(myDate);
     }
 
+    function dateFormat(date) {
+        let year=date.getFullYear();
+        let month=(date.getMonth()+1)<10 ? '0'+(date.getMonth()+1) : date.getMonth()+1;
+        let day=date.getDate()<10 ? '0'+date.getDate() : date.getDate();
+        return  year+"-"+month+"-"+day;
+    }
 
     // save search on cookie
     function saveSearchOnCookie() {
@@ -861,13 +954,13 @@ const query = function getQueryForm(data) {
     }
 
     function rendererSearchFormOnTime(key, value, mold) {
-        if ([undefined, null, ''].includes(value)) {
-            $(_form).find("input[name='+key+']").val(value.substring(0, 10)).addClass('bg-warning');
+        if (![undefined, null, ''].includes(value)) {
+            $(_form).find("input[name="+key+"]").val(value.substring(0, 10)).addClass('bg-warning');
             if (value.length > 11 + 5) {
                 $(_form).find("input[name='" + key + "_tim']").val(value.substring(11, 5));
             }
         } else {
-            $(_form).find("input[name='+key+']").val("").removeClass('bg-warning');
+            $(_form).find("input[name="+key+"]").val("").removeClass('bg-warning');
             $(_form).find("input[name='" + key + "_tim']").val("");
         }
     }
@@ -954,6 +1047,7 @@ const query = function getQueryForm(data) {
                         mold: ['input', 'dateTime'].includes(condition.type) ? 'input' : condition.type,
                         data:condition.data,
                         killings:condition.killings,
+                        rules:condition.rules,
                     }
                     if (condition.type === 'search_select') {
                         data.mold = 'select';
@@ -978,10 +1072,14 @@ const query = function getQueryForm(data) {
                             select: condition.select[index],
                             mold: ['input', 'dateTime'].includes(types[index]) ? 'input' : types[index],
                             killings:condition.killings,
+                            rules:condition.rules,
                         }
                         if(condition.killings&&Array.isArray(condition.killings)){
                             data.killings=condition.killings[index];
                         }
+                        if(condition.rules&&Array.isArray(condition.rules)){
+                            data.rules=condition.rules[index];
+                        }
                         _data[_name] = data;
                     })
                 }
@@ -1040,7 +1138,7 @@ const query = function getQueryForm(data) {
                     rendererSearchFormOnMultipleSelect(key, value, mold);
                 }
             } else if (['time'].includes(type) && value !== undefined) {
-                $(_form).find("input[name='" + key + "']").val(value.substr(0, 10));
+                $(_form).find("input[name='" + key + "']").val(value.substr(0, 10)).addClass('bg-warning');
                 $(_form).find("input[id='" + key + "_min']").val(value.substr(11, value.length));
             }
         }

+ 2 - 2
resources/views/inventory/statement/changeInventory.blade.php

@@ -54,8 +54,8 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue=new Vue({
             el:"#list",

+ 1 - 1
resources/views/maintenance/role/index.blade.php

@@ -49,7 +49,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         new Vue({
             el:"#list",

+ 1 - 1
resources/views/maintenance/user/index.blade.php

@@ -49,7 +49,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         new Vue({
             el:"#list",

+ 10 - 6
resources/views/order/index/delivering.blade.php

@@ -138,8 +138,8 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue=new Vue({
             el:"#list",
@@ -174,18 +174,22 @@
                 }
                 let data=[
                     [   {name:'codename_c',type:'select',placeholder:'订单状态',data:this.codes},
-                        {name:'orderdate_start',type:'time',tip:['选择显示日期的起始时间','选择显示日期的起始时间']},
+                        {name:'orderdate_start',type:'time',tip:['选择显示日期的起始时间','选择显示日期的起始时间'],
+                            rules:{date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'relevance',default:[31,92,183,366]}}},
                         {name:'orderno',type:'input',tip:'编号,糊模查找需要在左边打上%符号',placeholder: '编号'},
                         {name:'carriername',type:'input',tip:'',placeholder:'承运人'},
-                        {name:['notes','addtime'],type:'input_select',tip:['右侧选择查询范围,默认为一天内','查询范围,范围越短搜索越快'],placeholder: ['客户',''],
-                            data:[{name:'31',value:'近一月'},{name:'92',value:'近三月'},{name:'183',value:'近半年'},{name:'366',value:'近一年'},{name:'0',value:'不限'},]},
+                        {name:['notes','addtime'],type:'input_select',tip:['右侧选择查询范围,默认为一天内','查询范围,范围越短搜索越快'],placeholder: ['备注',''],
+                            data:[{name:'31',value:'近一月'},{name:'92',value:'近三月'},{name:'183',value:'近半年'},{name:'366',value:'近一年'},{name:'0',value:'不限'},],
+                            rules:[{son:{addtime:{default:'31',required_without_all_if:['orderdate_start','orderdate_end']}}},
+                                {date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'relevance',default:[31,92,183,366]}}]},
                         {name:'issuepartyname',type:'input',tip:'',placeholder: '店铺名称'},
                         {name:'edisendflag2',type:'select',tip:'快递获取标记',placeholder: '快递获取标记',data:[{name:'Y',value:'是'},{name:'N',value:'否'},{name:'W',value:'错误'},]},
                         {name:'edisendflag',type:'select',tip:'接口回传标记',placeholder: '接口回传标记',data:[{name:'Y',value:'Y'},{name:'N',value:'N'},{name:'W',value:'W'},{name:'R',value:'R'},]}
                     ],
                     [
                         {name:'codename_c_end',type:'select',placeholder:'订单状态范围',data:this.codes},
-                        {name:'orderdate_end',type:'time',tip:['选择显示指定日期的结束时间','选择显示指定日期的结束时间']},
+                        {name:'orderdate_end',type:'time',tip:['选择显示指定日期的结束时间','选择显示指定日期的结束时间'],
+                            rules:{date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'date',default:[31,92,183,366]}}},
                         {name:'customerid',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的客户'],
                             placeholder:['货主','定位或多选货主'],data:this.owners},
                         {name:'soreference5',type:'input',tip:'可支持多快递单号,糊模查找需要在左边打上%符号',placeholder: '多快递单号'},

+ 1 - 1
resources/views/order/wave/search.blade.php

@@ -82,7 +82,7 @@
 @endsection
 
 @section("lastScript")
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
     <script>
         let vueList = new Vue({
             el: "#wave_div",

+ 2 - 2
resources/views/personnel/laborReport/index.blade.php

@@ -211,8 +211,8 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let today=(new Date());
         function isTomorrow(){

+ 2 - 2
resources/views/process/index.blade.php

@@ -457,8 +457,8 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#process",

+ 2 - 2
resources/views/rejected/search/analyze.blade.php

@@ -61,8 +61,8 @@
 
 @section('lastScript')
     <script src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",

+ 2 - 2
resources/views/rejected/search/general.blade.php

@@ -177,8 +177,8 @@
         let csrfInput='@csrf';
     </script>
     <script src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",

+ 1 - 1
resources/views/store/index.blade.php

@@ -34,7 +34,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#fast',

+ 1 - 1
resources/views/store/storeItem/index.blade.php

@@ -38,7 +38,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#item',

+ 1 - 1
resources/views/waybill/delivering.blade.php

@@ -187,7 +187,7 @@
     .color1{background-color: #FFA07A}
     .color2{background-color: cornflowerblue}
 </style>
-<script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+<script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
 <script>
     new Vue({
         el:"#list",

+ 2 - 2
resources/views/waybill/index.blade.php

@@ -334,8 +334,8 @@
         }
     </style>
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#list',

+ 2 - 2
resources/views/waybill/waybillFinancialSnapshot/index.blade.php

@@ -44,7 +44,7 @@
     <div class="card-header">
     <label>操作选定记录:</label>
         <span class="dropdown">
-            <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark':'btn-outline-dark']"
+            <button class="btn btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark':'btn-outline-dark']"
                     data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
                 导出Excel
             </button>
@@ -133,7 +133,7 @@
 @stop
 
 @section('lastScript')
-<script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+<script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
 <script>
     let vue = new Vue({
         el:'#editingPanel',

+ 2 - 2
resources/views/weight/package/index.blade.php

@@ -58,8 +58,8 @@
 
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200806.js')}}"></script>
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
             @if(isset($request))
         let request={!! json_encode($request) !!};

+ 1 - 1
resources/views/weight/weightExcepted/index.blade.php

@@ -86,7 +86,7 @@
 @endsection
 
 @section('lastScript')
-    <script type="text/javascript" src="{{asset('js/queryForm/header200814.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200818.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#list",

+ 2 - 2
webpack.mix.js

@@ -19,7 +19,7 @@ mix.copy('resources/images','public/images');
 mix.copy('resources/icon/faviconc.ico','public/faviconc.ico');
 mix.js('resources/js/trix.js','public/js/trix.js');
 mix.copy('resources/sass/trix.css','public/css/trix.css');
-mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm200806.js');
+mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm200818.js');
 mix.copy('resources/js/queryForm/export.js','public/js/queryForm/export200804.js');
-mix.js('resources/js/queryForm/header.js','public/js/queryForm/header200814.js');
+mix.js('resources/js/queryForm/header.js','public/js/queryForm/header200818.js');