فهرست منبع

修改关联关系

ajun 4 سال پیش
والد
کامیت
6fd16da5d7

+ 16 - 7
app/Http/Controllers/PrintTemplateController.php

@@ -19,14 +19,12 @@ class PrintTemplateController extends Controller
     {
         $templates = PrintTemplate::query()->with(['ownerLogisticPrintTemplate' => function ($query) {
             $query->with(['owner', 'logistic']);
-        }])->get();
+        }])->paginate($request['paginate'] ?? 50);
         $owners = Owner::query()->get();
         $logistics = Logistic::query()->get();
-
         $delivery_interface = OwnerLogisticPrintTemplate::$enums['delivery_interface'];
         $delivery_interfaces = array_chunk($delivery_interface,count($delivery_interface) / 2)  ;
         $delivery_interfaces = array_values($delivery_interfaces[1]);
-
         return view('/maintenance/expressPrinting/template/index', compact('templates','owners','logistics','delivery_interfaces'));
     }
 
@@ -73,12 +71,23 @@ class PrintTemplateController extends Controller
 
     public function saveRelationApi(Request $request,PrintTemplateService $service): array
     {
-        $saveRelation = $request['data'];
-        $relations = OwnerLogisticPrintTemplate::query()->where('print_template_id',$request['id'])->get();
-        $service->saveRelation($saveRelation,$relations,$request['id']);
+        $data = $request->only(['owner_id','logistic_id','print_template_id','delivery_interface']);
+
+        if(array_key_exists('delivery_interface',$data)) OwnerLogisticPrintTemplate::$enums['delivery_interface'][$data['delivery_interface']];
+
+        if ($request['is_save']) {
+            if(OwnerLogisticPrintTemplate::query()->where($data)->exists()){
+                return ['success' => false,'message' => '关联关系已存在'];
+            }
+            OwnerLogisticPrintTemplate::query()->firstOrCreate($data);
+        } else{
+            OwnerLogisticPrintTemplate::query()->where($data)->delete();
+        }
+
         $printTemplate = PrintTemplate::query()->with(['ownerLogisticPrintTemplate' => function($query){
             $query->with(['owner', 'logistic']);
-        }])->find($request['id']);
+        }])->where('id',$data['print_template_id'])->first();
+
         return ['success' => true,'data' => $printTemplate];
     }
 

+ 45 - 11
resources/views/maintenance/expressPrinting/template/_edit.blade.php

@@ -16,14 +16,17 @@
                                 <template v-for="model in editTemplate.data">
                                     <li v-if="model.isActivation" class="list-group-item" :class="{active : model.selected}" @click="selectOwner(model,editTemplate.data)" >
                                         <span>@{{ model.name }}</span>
-                                        <button type="button" class="btn btn-sm btn-outline-primary float-right" @click="cancelOwnerRelation(model)">取消关联</button>
+                                        <button type="button" class="btn btn-sm btn-outline-primary float-right" @click="cancelOwnerRelation(model)">取消</button>
                                     </li>
                                     {{--承运商--}}
                                     <li class="list-group-item" v-if="model.selected && model.isActivation">
                                         <ul class="list-group ml-1">
                                             <template v-for="logistic in model.logistics">
-                                                {{--货主关联取消--}}
-                                                <li class="list-group-item" v-if="logistic.isActivation" @dblclick="logistic.isActivation = false">@{{ logistic.name }}</li>
+                                                {{--承运商关联货主取消--}}
+                                                <li class="list-group-item" v-if="logistic.isActivation" @click="selectOwnerLogistic(logistic,model)" :class="{active : logistic.selected }">
+                                                    @{{ logistic.name }}
+                                                    <button type="button" class="btn btn-sm btn-outline-primary float-right" @click="cancelOwnerLogisticRelation(logistic,model)">取消</button>
+                                                </li>
                                             </template>
                                         </ul>
                                     </li>
@@ -42,15 +45,17 @@
                             <div class="card-body p-0" v-if="editTemplate">
                                 <ul class="list-group" v-for="model in editTemplate.data">
                                     {{--关联货主--}}
-                                    <li class="list-group-item" v-if="model.isActivation===false" @dblclick="linkOwnerRelation(model)">@{{ model.name }}</li>
+                                    <li class="list-group-item" v-if="model.isActivation===false" @dblclick="linkOwnerRelation(model)">
+                                        @{{ model.name }}
+                                        <button type="button" class="btn btn-sm btn-outline-success float-right" @click="linkOwnerRelation(model)">关联</button>
+                                    </li>
                                 </ul>
                             </div>
                         </div>
                     </div>
                 </div>
 
-
-                <div class="col p-0" :class="{'d-flex justify-content-center align-items-center': !editTemplateOwner}">
+                <div class="col" :class="{'d-flex justify-content-center align-items-center': !editTemplateOwner}">
                     <div class="card" v-if="editTemplateOwner">
                         <div class="card-header">
                             @{{ editTemplateOwner.name }} -- 承运商
@@ -59,7 +64,10 @@
                             <ul class="list-group">
                                 <template v-for="logistic in editTemplateOwner.logistics">
                                     {{--关联承运商--}}
-                                    <li class="list-group-item" v-if="logistic.isActivation === false" @dblclick="logistic.isActivation = true">@{{ logistic.name }}</li>
+                                    <li class="list-group-item" v-if="logistic.isActivation === false">
+                                        @{{ logistic.name }}
+                                        <button type="button" class="btn btn-sm btn-outline-success float-right" @click="logistic.isActivation = true">关联</button>
+                                    </li>
                                 </template>
                             </ul>
                         </div>
@@ -72,10 +80,36 @@
                         </div>
                     </div>
                 </div>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" @click="save">保存</button>
+
+                <div class="col" :class="{'d-flex justify-content-center align-items-center': !editTemplateLogistic}">
+                    <div class="card" v-if="editTemplateLogistic !==null">
+                        <div class="card-header">
+                            @{{ editTemplateOwner.name }}-@{{ editTemplateLogistic.name }}-接口
+                        </div>
+                        <div class="card-body">
+                            <ul class="list-group">
+                                <li class="list-group-item" v-for="item in editTemplateLogistic.interfaces">
+                                    @{{  item.interface }}
+                                    <template v-if="item.isActivation === true">
+{{--                                        <button type="button" class="btn btn-sm btn-outline-primary float-right"  @click="item.isActivation = false" @click="saveOwnerLogisticPrinteTempRelation(item,false)" >取消</button>--}}
+                                        <button type="button" class="btn btn-sm btn-outline-primary float-right"   @click="saveOwnerLogisticPrinterTempRelation(item,false)" >取消</button>
+                                    </template>
+                                    <template v-else>
+{{--                                        <button type="button" class="btn btn-sm btn-outline-success float-right"  @click="item.isActivation = true">关联</button>--}}
+                                        <button type="button" class="btn btn-sm btn-outline-success float-right"   @click="saveOwnerLogisticPrinterTempRelation(item,true)">关联</button>
+                                    </template>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
+                    <div v-else>
+                        <div class="container" >
+                            <div class="alert alert-light">
+                                选中承运商之后进行关联
+                            </div>
+                        </div>
+                    </div>
+                </div>
             </div>
         </div>
     </div>

+ 97 - 25
resources/views/maintenance/expressPrinting/template/index.blade.php

@@ -17,7 +17,7 @@
                 <td>@{{ template.name }}</td>
                 <td></td>
                 <td>
-                    <button type="button" class="btn-outline-primary" @click="edit(template,i)">编辑</button>
+                    <button type="button" class="btn btn-outline-primary" @click="edit(template,i)">编辑关联</button>
                 </td>
                 <td>
                     <button type="button" class="btn btn-danger" @click="destroy(template.id,i)">删除</button>
@@ -26,6 +26,7 @@
             </tr>
             @include('maintenance.expressPrinting.template._edit')
         </table>
+        {{ $templates->links() }}
     </div>
 @endsection
 
@@ -34,13 +35,14 @@
         let vue = new Vue({
             el:'#part-template',
             data:{
-                templates:{!! $templates !!},
-                logistics:{!! $logistics !!},
-                owners:{!! $owners !!},
-                deliveryInterfaces:{!! $delivery_interfaces !!},
+                templates:{!! $templates->toJson() !!}['data'],
+                logistics:[@foreach($logistics as $logistic ){!! $logistic !!},@endforeach],
+                owners:[@foreach($owners as $owner ){!! $owner !!},@endforeach],
+                deliveryInterfaces:[@foreach($delivery_interfaces as $key=>$delivery_interface)'{!! $delivery_interface !!}',@endforeach],
                 editTemplate:null,
                 templateMode:null,
                 editTemplateOwner:null,
+                editTemplateLogistic:null,
             },
             mounted() {
                 this.init();
@@ -55,16 +57,15 @@
                     this.owners.forEach(function(owner){
                         // isActivation 是否激活
                         // selected 是否选中
-                        data[owner.id] = {isActivation:false,logistics:{},name:owner.name,selected:false};
+                        data[owner.id] = {isActivation:false,logistics:{},name:owner.name,selected:false,id:owner.id};
                         self.logistics.forEach(function(logistic){
                             let interfaces = {}
-                            self['deliveryInterfaces'].forEach(function(i){
+                            self['deliveryInterfaces'].forEach(function(i,index){
                                 interfaces[i] ={isActivation:false,interface:i}
                             })
                             data[owner.id].logistics[logistic.id] = {isActivation:false,id:logistic.id,name:logistic.name,selected:false,interfaces:interfaces}
                         })
                     });
-                    console.log(data);
                     this.templateMode = data;
                 },
                 destroy(id,i){
@@ -87,17 +88,21 @@
                     template['owner_logistic_print_template'].forEach(function(item){
                         data[item.owner_id].isActivation = true;
                         data[item.owner_id].logistics[item.logistic_id].isActivation = true;
+                        data[item.owner_id].logistics[item.logistic_id].interfaces[item.delivery_interface].isActivation = true;
                     });
 
                     this.editTemplate = JSON.parse(JSON.stringify(template));
                     this.editTemplate.index = index
                     this.editTemplate.data = data;
+
                     $("#edit-template").modal('show');
+                    console.log(123);
                 },
                 selectOwner(data,owners){
                     if(data.selected === true){
                         data.selected = false;
                         this.editTemplateOwner = null
+                        this.editTemplateLogistic = null;
                         return ;
                     }
                     for (const dataKey in owners) {
@@ -113,13 +118,73 @@
                     model.isActivation = true;
                     this.$forceUpdate();
                 },
-                // 取消货主关联
+                // 取消 货主关联
                 cancelOwnerRelation(model){
-                    model.isActivation = false;
-                    for (const key in model.logistics) {
-                        if(model.logistics[key].isActivation) model.logistics[key].isActivation = false
+                    if (!confirm("是否取消模板和货主的关联")){return ;}
+                    let url = "{{url("apiLocal/maintenance/expressPrinting/template/saveRelation")}}";
+                    let data = {
+                        'owner_id' : model.id,
+                        'print_template_id' : this.editTemplate.id,
+                    };
+                    window.tempTip.setIndex(1999)
+                    window.axios.post(url,data).then(res=>{
+                        if (res.data.success){
+                            window.tempTip.showSuccess("保存成功");
+                            model.isActivation = false;
+                            for (const key in model.logistics) {
+                                if(model.logistics[key].isActivation) model.logistics[key].isActivation = false
+                            }
+                            this.$set(this.templates,this.editTemplate.index,res.data);
+                            this.$forceUpdate();
+                            return
+                        }
+                        window.tempTip.show("保存异常")
+                    }).catch(err=>{
+                        window.tempTip.show(err)
+                    })
+                },
+                // 取消  货主和承运商的关联
+                cancelOwnerLogisticRelation(logistic,model){
+                    if (!confirm("是否取消模板,货主和承运商的关联")){return ;}
+                    let url = "{{url("apiLocal/maintenance/expressPrinting/template/saveRelation")}}";
+                    let data = {
+                        'owner_id' : this.editTemplateOwner.id,
+                        'logistic_id' : logistic.id,
+                        'print_template_id' : this.editTemplate.id,
+                    };
+                    window.tempTip.setIndex(1999)
+                    window.axios.post(url,data).then(res=>{
+                        if (res.data.success){
+                            logistic.isActivation = false
+                            this.editTemplateLogistic = null;
+                            for (const dataKey in logistic.interfaces) {
+                                logistic.interfaces[dataKey].selected  = false;
+                                logistic.interfaces[dataKey].isActivation = false
+                            }
+                            this.$set(this.templates,this.editTemplate.index,res.data);
+                            this.$forceUpdate()
+                            return
+                        }
+                        window.tempTip.show("保存异常")
+                    }).catch(err=>{
+                        window.tempTip.show(err)
+                    })
+
+
+                },
+                selectOwnerLogistic(logistic,model){
+                    if (logistic.selected === true){
+                        logistic.selected = false;
+                        this.editTemplateLogistic = null;
+                        return ;
                     }
-                    this.$forceUpdate();
+                    for (const dataKey in model.logistics) {
+                        if (dataKey!==logistic.id){
+                            model.logistics[dataKey].selected  = false;
+                        }
+                    }
+                    logistic.selected = true;
+                    this.editTemplateLogistic = logistic;
                 },
                 isChecking(){
                     if(this.editTemplate === null)return false;
@@ -131,24 +196,31 @@
                     }
                     return false;
                 },
-                save(){
-                    let url = "{{url('apiLocal/maintenance/expressPrinting/template/saveRelation')}}"
-                    let data = this.editTemplate;
-                    window.tempTip.setIndex(1999);
+                saveOwnerLogisticPrinterTempRelation(item,islink){
+                    if (!islink && !confirm("是否取消当前关联关系")){
+                        return ;
+                    }
+                    let url = "{{url("apiLocal/maintenance/expressPrinting/template/saveRelation")}}";
+                    let data = {
+                        'owner_id' : this.editTemplateOwner.id,
+                        'logistic_id' : this.editTemplateLogistic.id,
+                        'print_template_id' : this.editTemplate.id,
+                        'delivery_interface' : item.interface,
+                        'is_save':islink
+                    }
+                    window.tempTip.setIndex(1999)
                     window.axios.post(url,data).then(res=>{
                         if (res.data.success){
-                            this.$set(this.templates,this.editTemplate.index,res.data);
-                            window.tempTip.showSuccess('修改成功');
-                            $("#edit-template").modal('hide');
-                            this.editTemplate = null;
-                            this.editTemplateOwner = null;
-                            return ;
+                            this.$set(this.templates,this.editTemplate.index,res.data.data);
+                            window.tempTip.showSuccess("保存成功");
+                            item.isActivation = islink;
+                            return
                         }
-                        window.tempTip.show('修改失败,刷新后重试');
+                        window.tempTip.show("保存异常")
                     }).catch(err=>{
                         window.tempTip.show(err)
                     })
-                },
+                }
             }
         });
     </script>