Zhouzhendong 5 gadi atpakaļ
vecāks
revīzija
c782e17457

+ 39 - 0
app/Http/Controllers/PriceModelController.php

@@ -634,6 +634,45 @@ class PriceModelController extends Controller
         return ["success"=>false,"data"=>"导入发生错误,数据无响应"];
     }
 
+    public function logisticUpdateDetail(Request $request)
+    {
+        if(!Gate::allows('计费模型-物流-编辑')){ return ["success"=>false,"data"=>"无权操作"];  }
+        $detail = $request->input("detail");
+        if ($detail["id"]){
+            app('OwnerPriceLogisticService')->updateDetail(["id"=>$detail["id"]],[
+                "unit_price" => $detail["unit_price"],
+                "delivery_fee" => $detail["delivery_fee"],
+                "initial_fee" => $detail["initial_fee"],
+                "initial_amount" => $detail["initial_amount"],
+                "rate" => $detail["rate"],
+            ]);
+        }else{
+            $row = app('OwnerPriceLogisticService')->isExistDetail([
+                "owner_price_logistic_id"=>$request->input("id"),
+                "unit_id"=>$detail["unit_id"],
+                "range"=>$detail["range"],
+                "province_id"=>$detail["province_id"],
+                "city_id"=>$detail["city_id"],
+            ]);
+            if ($row>0)return ["success"=>false,"data"=>"已存在该计费模型"];
+            /** @var OwnerPriceExpressProvince $detail */
+            $detail = app('OwnerPriceLogisticService')->createDetail([
+                "owner_price_logistic_id"=>$request->input("id"),
+                "unit_id"=>$detail["unit_id"],
+                "range"=>$detail["range"],
+                "province_id"=>$detail["province_id"],
+                "city_id"=>$detail["city_id"],
+                "unit_price" => $detail["unit_price"],
+                "delivery_fee" => $detail["delivery_fee"],
+                "initial_fee" => $detail["initial_fee"],
+                "initial_amount" => $detail["initial_amount"],
+                "rate" => $detail["rate"],
+            ]);
+            $detail->load("province","unit","city");
+        }
+        return ["success"=>true,"data"=>$detail];
+    }
+
     private function logisticValidator(array $params,$id = null)
     {
         return Validator::make($params,[

+ 24 - 0
app/Services/OwnerPriceLogisticService.php

@@ -3,6 +3,7 @@
 namespace App\Services; 
 
 use App\OwnerPriceLogistic;
+use App\OwnerPriceLogisticDetail;
 
 Class OwnerPriceLogisticService
 { 
@@ -30,6 +31,29 @@ Class OwnerPriceLogisticService
         return $query->update($values);
     }
 
+    public function updateDetail(array $params, array $values)
+    {
+        $query = OwnerPriceLogisticDetail::query();
+        foreach ($params as $column => $param){
+            $query->where($column,$param);
+        }
+        return $query->update($values);
+    }
+
+    public function isExistDetail(array $params)
+    {
+        $query = OwnerPriceLogisticDetail::query();
+        foreach ($params as $column => $param){
+            $query->where($column,$param);
+        }
+        return $query->count();
+    }
+
+    public function createDetail(array $params)
+    {
+        return OwnerPriceLogisticDetail::query()->create($params);
+    }
+
     public function checkRange($range):bool
     {
         $arrRanges = explode(",",$range);

+ 12 - 12
resources/views/maintenance/priceModel/logistic/_detailModal.blade.php

@@ -49,7 +49,7 @@
                         </td>
                         <td>
                             <label v-if="detail.edit && !detail.id">
-                                <select id="unit_id" class="form-control form-control-sm col-6" style="min-width: 80px" v-model="detail.unit_id" @change="$forceUpdate()">
+                                <select class="form-control form-control-sm col-6" style="min-width: 80px" v-model="detail.unit_id" @change="$forceUpdate()">
                                     <option v-for="unit in units" :value="unit.id" v-if="unit.id == models[index].unitId || unit.id == models[index].otherUnitId">@{{ unit.name }}</option>
                                 </select>
                             </label>
@@ -57,7 +57,7 @@
                         </td>
                         <td>
                             <label v-if="detail.edit && !detail.id">
-                                <select id="range" class="form-control form-control-sm col-6" style="min-width: 80px" v-model="detail.range" :id="'range-'+detail.id" :data="detail.range">
+                                <select class="form-control form-control-sm col-6" style="min-width: 80px" v-model="detail.range">
                                     <option v-for="range in (detail.unit_id == models[index].unitId ? models[index].unitRange : models[index].otherUnitRange)" :value="range">@{{ range }}</option>
                                 </select>
                             </label>
@@ -80,28 +80,28 @@
                             <label v-else>@{{ detail.city ? detail.city.name : '' }}</label>
                         </td>
                         <td>
-                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm" :id="'unit_price-'+detail.id"
-                                                             v-model="detail.unit_price" :data="detail.unit_price"></label>
+                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm"
+                                         :id="'unit_price-'+detail.id" v-model="detail.unit_price" :data="detail.unit_price"></label>
                             <label v-else>@{{ detail.unit_price }}</label>
                         </td>
                         <td>
-                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm" :id="'delivery_fee-'+detail.id"
-                                                             v-model="detail.delivery_fee" :data="detail.delivery_fee"></label>
+                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm"
+                                     :id="'delivery_fee-'+detail.id" v-model="detail.delivery_fee" :data="detail.delivery_fee"></label>
                             <label v-else>@{{ detail.delivery_fee }}</label>
                         </td>
                         <td>
-                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm" :id="'initial_fee-'+detail.id"
-                                                             v-model="detail.initial_fee" :data="detail.initial_fee"></label>
+                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm"
+                                     :id="'initial_fee-'+detail.id"  v-model="detail.initial_fee" :data="detail.initial_fee"></label>
                             <label v-else>@{{ detail.initial_fee }}</label>
                         </td>
                         <td>
-                            <label v-if="detail.edit"><input type="number" min="0" class="form-control form-control-sm" :id="'initial_amount-'+detail.id"
-                                                             v-model="detail.initial_amount" :data="detail.initial_amount"></label>
+                            <label v-if="detail.edit"><input type="number" min="0" class="form-control form-control-sm"
+                                     :id="'initial_amount-'+detail.id" v-model="detail.initial_amount" :data="detail.initial_amount"></label>
                             <label v-else>@{{ detail.initial_amount }}</label>
                         </td>
                         <td>
-                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm" :id="'rate-'+detail.id"
-                                                             v-model="detail.rate" :data="detail.rate"></label>
+                            <label v-if="detail.edit"><input type="number" min="0" step="0.001" class="form-control form-control-sm"
+                                     :id="'rate-'+detail.id"  v-model="detail.rate" :data="detail.rate"></label>
                             <label v-else>@{{ detail.rate }}</label>
                         </td>
                         <td>

+ 44 - 0
resources/views/maintenance/priceModel/logistic/index.blade.php

@@ -233,6 +233,50 @@
                     });
                     this.$forceUpdate();
                 },
+                delDetail(detail,index){
+                    if (detail.id){
+                        detail.unit_price = $("#unit_price-"+detail.id).attr('data');
+                        detail.delivery_fee = $("#delivery_fee-"+detail.id).attr('data');
+                        detail.initial_fee = $("#initial_fee-"+detail.id).attr('data');
+                        detail.initial_amount = $("#initial_amount-"+detail.id).attr('data');
+                        detail.rate = $("#rate-"+detail.id).attr('data');
+                        detail.edit = false;
+                    }else{
+                        this.$delete(this.details[this.id],index);
+                    }
+                    this.$forceUpdate();
+                },
+                updateDetail(detail){
+                    detail["edit"] = true;
+                    this.$forceUpdate();
+                },
+                submitDetail(detail){
+                    tempTip.setIndex(1099);
+                    window.axios.post('{{url('maintenance/priceModel/logistic/updateDetail')}}',{id:this.models[this.index].id,detail:detail})
+                        .then(res=>{
+                            if (res.data.success) {
+                                tempTip.setDuration(2000);
+                                if (detail.id){
+                                    tempTip.showSuccess("修改成功");
+                                }else{
+                                    detail.id = res.data.data.id;
+                                    detail.province = res.data.data.province;
+                                    detail.city = res.data.data.city;
+                                    detail.unit = res.data.data.unit;
+                                    tempTip.showSuccess("新增成功");
+                                }
+                                detail.edit = false;
+                                this.$forceUpdate();
+                                return;
+                            }
+                            tempTip.setDuration(3000);
+                            tempTip.show(res.data.data);
+                        }).catch(err=> {
+                        tempTip.setDuration(3000);
+                        tempTip.setIndex(1099);
+                        tempTip.show("网络错误:"+err);
+                    })
+                },
             },
         });
     </script>

+ 1 - 0
routes/web.php

@@ -126,6 +126,7 @@ Route::group(['prefix'=>'maintenance'],function(){
             Route::post('{id}/edit','PriceModelController@logisticUpdate');
             Route::post('getDetail','PriceModelController@logisticGetDetail');
             Route::post('import','PriceModelController@logisticImport');
+            Route::post('updateDetail','PriceModelController@logisticUpdateDetail');
         });
         Route::get('logistic','PriceModelController@logisticIndex');
         Route::post('logistic','PriceModelController@logisticStore');