Преглед изворни кода

二次加工管理:
1在登录工时状态时,也显示编辑按钮,在该状态进入编辑时,将除了成品单添加区和提交按钮以外的,都变为不可编辑(可使用浮动半透明黑色块100%宽高盖住);
2再在操作区增加一个“回滚”按钮(黑色框0.65opacity),该按钮在除了待接单和已完成时都存在,添加“回滚”权限限制该操作,操作后状态倒退一格,数据不变。
3列表的“加工类型”字段下的字段显示加粗变红(text-danger)
4BUG调整

dream пре 5 година
родитељ
комит
4ce546eb4e

+ 27 - 7
app/Http/Controllers/ProcessController.php

@@ -629,12 +629,15 @@ class ProcessController extends Controller
         }
         if (count($errors)>0)return ['error'=>$errors];
         $process=Process::find($id);
-        $process->owner_id=$request->input('owner_id');
-        $process->process_method_id=$request->input('process_method_id');
-        $process->unit_price=$request->input('unit_price');
-        $process->remark=$request->input('remark');
-        $process->amount=$request->input('amount');
-        $process->update();
+        if (!$request->is_hide){
+            $process->owner_id=$request->input('owner_id');
+            $process->process_method_id=$request->input('process_method_id');
+            $process->unit_price=$request->input('unit_price');
+            $process->remark=$request->input('remark');
+            $process->amount=$request->input('amount');
+            if ($process->status=='驳回')$process->status='待加工';
+            $process->update();
+        }
         $this->log(__METHOD__,"编辑二次加工单".__FUNCTION__,json_encode($process),Auth::user()['id']);
         $processContents=[];
         foreach ($request->input('processContents') as $processContent){
@@ -658,7 +661,6 @@ class ProcessController extends Controller
                 if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
                 $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
-
             }
         }
         return;
@@ -672,6 +674,24 @@ class ProcessController extends Controller
         return ['success'=>true];
     }
 
+    //回滚二次加工单状态
+    function rollback(Request $request){
+        if (!$request->id)return ['success'=>false];
+        $process=Process::find($request->id);
+        switch ($process->status){
+            case '待加工':
+                $process->status='待接单';break;
+            case '驳回':
+                $process->status='待接单';break;
+            case '加工中':
+                $process->status='待加工';break;
+            case '待验收':
+                $process->status='加工中';break;
+        }
+        $process->save();
+        return ['success'=>true,'data'=>$process->status];
+    }
+
     /**
      * Remove the specified resource from storage.
      *

+ 2 - 1
app/Http/Controllers/RejectedBillController.php

@@ -263,7 +263,8 @@ class RejectedBillController extends Controller
     }
 
     function seekOrder(Request $request){
-        $order=OracleDOCOrderHeader::select('orderno','customerid','c_contact','c_tel2','carrierid')->where('soreference5',$request->soreference5)->first();
+        if (!$request->soreference5)return ['success'=>false];
+        $order=OracleDOCOrderHeader::select('soreference1','customerid','c_contact','c_tel2','carrierid')->where('soreference5',$request->soreference5)->first();
         if ($order)return ['success'=>true,'data'=>$order];
     }
 }

+ 1 - 6
app/Http/Controllers/TestController.php

@@ -198,12 +198,7 @@ class TestController extends Controller
     }
     /*1*/
     function test(){
-        $a=Unit::all();
-        dd($a);
-        $a=new Unit([
-            "created_at"=>date('Y-m-d H:i:s')
-        ]);
-        $a->name='58448484';
+
     }
 
 }

+ 12 - 1
resources/views/process/create.blade.php

@@ -324,16 +324,27 @@
                     }
                     let _this=this;
                     let sign=true;
+                    let is_return=false;
                     let processContentTemp={};
                     _this.processContents.some(function (processContent) {
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
+                            processContent.commodities.every(function (commodity) {
+                                if (commodity.id===commodity_id && commodity.amount<amount){
+                                    tempTip.setDuration(2000);
+                                    tempTip.show("数量不得超出原有数量!");
+                                    is_return=true;
+                                    return false;
+                                }
+                                return true;
+                            });
+                            if (is_return)return true;
                             _this.commodityIds.push(processContent.commodity_id+"_"+type);
                             processContent.addBtnShow=false;
                             processContentTemp=Object.assign({},processContent);
                         }
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==!type)sign=false;
                     });
-
+                    if (is_return)return;
                     if (bill_type==='入库单' && !type && sign){
                         _this.commodityIds.push(processContentTemp.commodity_id+"_"+!type);
                         processContentTemp['type']=true;

+ 23 - 11
resources/views/process/edit.blade.php

@@ -12,13 +12,13 @@
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
                 <div class="row">
-                    <div class="col-6  rounded mb-2 border" style="background: #efe3d9;">
+                    <div class="col-6  rounded mb-2 border" style="background: #efe3d9;" v-if="!is_hide">
                         <div class="form-group row mt-2">
                             <label class="col-2 text-right mt-2">原料单据</label>
                             <input class="form-control col-7" v-model="process.wms_code">&nbsp;&nbsp;&nbsp;
                             <button class="btn btn-info btn-sm col-2"  type="button" @click="addProcessContent(false)"> 新增库单据</button>
                         </div>
-                        <div class="form-group row">
+                        <div class="form-group row" v-if="!is_hide">
                             <div class="col-10 offset-1 pl-0 pt-2 border rounded bg-light">
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
                                     <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
@@ -89,7 +89,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="col-6 rounded mb-2 border" style="background: #ccd7dc;">
+                    <div class="col-6 rounded mb-2 border" style="background: #ccd7dc;" :class="is_hide ? 'm-auto':''">
                         <div class="form-group row mt-2">
                             <label class="col-2 text-right mt-2">成品单据</label>
                             <input class="form-control col-7" v-model="process.wms_code_full">&nbsp;&nbsp;&nbsp;
@@ -180,27 +180,27 @@
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >加工类型</label>
-                    <select v-model="process.process_method_id" class="form-control col-8" :class="error.process_method_id && error.process_method_id.length>0 ? 'is-invalid' :''">
+                    <select :disabled="is_hide" v-model="process.process_method_id" class="form-control col-8" :class="error.process_method_id && error.process_method_id.length>0 ? 'is-invalid' :''">
                         <option  v-for="processMethod in processMethods" :value="processMethod.id">@{{ processMethod.name }}</option>
                     </select>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >加工数量</label>
-                    <input v-model="process.amount" type="text" class="form-control col-8" :class="error.amount && error.amount.length>0 ? 'is-invalid' :''">
+                    <input :readonly="is_hide" v-model="process.amount" type="text" class="form-control col-8" :class="error.amount && error.amount.length>0 ? 'is-invalid' :''">
                     <span v-if="error.amount && error.amount.length>0" class="invalid-feedback col-8 offset-3 mt-0" role="alert">
                         <strong >@{{ error.amount[0] }}</strong>
                     </span>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >单价</label>
-                    <input v-model="process.unit_price" type="text" class="form-control col-8" :class="error.unit_price && error.unit_price.length>0 ? 'is-invalid' :''">
+                    <input :readonly="is_hide" v-model="process.unit_price" type="text" class="form-control col-8" :class="error.unit_price && error.unit_price.length>0 ? 'is-invalid' :''">
                     <span v-if="error.unit_price && error.unit_price.length>0" class="invalid-feedback col-8 offset-3 mt-0" role="alert">
                         <strong>@{{ error.unit_price[0] }}</strong>
                     </span>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >备注(选填)</label>
-                    <textarea v-model="process.remark" type="text" class="form-control col-8"></textarea>
+                    <textarea :readonly="is_hide" v-model="process.remark" type="text" class="form-control col-8"></textarea>
                 </div>
                 <div class="form-group row">
                     <div class="col-8 offset-3">
@@ -218,7 +218,7 @@
             el:'#list',
             data:{
                 process:{id:'{{$process->id}}',code:'{{$process->code}}',wms_code:'',owner_id:'{{$process->owner_id}}',amount:'{{$process->amount}}',owner_name:'{{$process->owner_name}}',
-                    process_method_id:'{{$process->process_method_id}}',unit_price:'{{$process->unit_price}}',remark:'{{$process->remark}}',wms_code_full:''},
+                    process_method_id:'{{$process->process_method_id}}',unit_price:'{{$process->unit_price}}',remark:'{{$process->remark}}',wms_code_full:'',status:'{{$process->status}}'},
                 error:{wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]},
                 processContentError:[],
                 processContents:[
@@ -237,8 +237,10 @@
                 selectedTutorials:[],
                 commodityIds:[],
                 is_delBtn:[],
+                is_hide:false,
             },
             mounted:function(){
+                if (this.process.status==='加工中' || this.process.status==='待加工')this.is_hide=true;
                 let _this=this;
                 _this.processContents.some(function (processContent) {
                     processContent.type=processContent.type==='成品单'?true:false;
@@ -246,7 +248,6 @@
                         _this.commodityIds.push(processContent.commodity_id+'_'+processContent.type);
                     }
                 });
-                console.log(this.process);
             },
             watch:{
                 processContents:{
@@ -315,16 +316,27 @@
                     }
                     let _this=this;
                     let sign=true;
+                    let is_return=false;
                     let processContentTemp={};
                     _this.processContents.some(function (processContent) {
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
-
+                            processContent.commodities.every(function (commodity) {
+                                if (commodity.id===commodity_id && commodity.amount<amount){
+                                    tempTip.setDuration(2000);
+                                    tempTip.show("数量不得超出原有数量!");
+                                    is_return=true;
+                                    return false;
+                                }
+                                return true;
+                            });
+                            if (is_return)return true;
                             _this.commodityIds.push(processContent.commodity_id+"_"+type);
                             processContent.addBtnShow=false;
                             processContentTemp=Object.assign({},processContent);
                         }
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==!type)sign=false;
                     });
+                    if (is_return)return;
                     if (bill_type==='入库单' && !type && sign){
                         _this.commodityIds.push(processContentTemp.commodity_id+"_"+!type);
                         processContentTemp['type']=true;
@@ -391,7 +403,7 @@
                     _this.processContentError=[];
                     axios.put('{{url("process")}}/'+_this.process.id,{
                         owner_id:owner_id,process_method_id:process_method_id,unit_price:unit_price,
-                        remark:remark,amount:amount,processContents:_this.processContents
+                        remark:remark,amount:amount,processContents:_this.processContents,is_hide:_this.is_hide
                     }).then(function (response) {
                         if (response.data.error && response.data.data=="process"){
                             _this.error=response.data.error;

+ 29 - 3
resources/views/process/index.blade.php

@@ -257,8 +257,9 @@
                     <td v-if="processOne.id" style="min-width:150px" :rowspan="processOne.is_multi_row?2:''">
                         <p v-if="!processOne.openProcessHour && processOne.status=='驳回'" class="text-muted">已驳回</p>
                         <p v-if="!processOne.openProcessHour && processOne.status=='已完成'" class="text-success">已完成</p>
+                        <button v-if="!processOne.openProcessHour && processOne.status!='已完成' && processOne.status!='待接单'" class="btn btn-sm btn-outline-dark" style="opacity: 0.65" @click="rollback(processOne.id)">回滚</button>
                         @can("二次加工管理-接单与驳回")
-                        <button v-if="!processOne.openProcessHour && processOne.status=='待接单'" @click="processEdit(processOne.id)" class="btn btn-sm btn-outline-info pull-left">编辑</button>
+                        <button v-if="!processOne.openProcessHour && (processOne.status=='待接单' || processOne.status=='驳回' || processOne.status=='加工中' || processOne.status=='待加工')" @click="processEdit(processOne.id)" class="btn btn-sm btn-outline-info pull-left">编辑</button>
                         <button v-if="!processOne.openProcessHour && processOne.status=='待接单'" @click="processReject(processOne.id)" class="btn btn-sm btn-outline-dark pull-left">驳回</button>
                         <button v-if="!processOne.openProcessHour && processOne.status=='待接单'"  @click="processReceive(processOne.id)" class="btn btn-sm btn-outline-primary pull-left">接单</button>@endcan
                         @can("二次加工管理-登记工时")<button v-if="(processOne.status=='加工中' || processOne.status=='待加工') && !processOne.openProcessHour"
@@ -268,7 +269,7 @@
                     </td>
                     <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.code }}</td>
                     <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.owner_name }}</td>
-                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.process_method_name }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''" class="font-weight-bold text-danger">@{{ processOne.process_method_name }}</td>
                     <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.amount }}</td>
                     <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">
                         <div class="" v-if="processOne.tutorials" {{--style="width: 200px;overflow:auto;"--}}>
@@ -303,7 +304,8 @@
                     <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.status }}</td>
                     <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.remark }}</td>
                     <td colspan="5">
-                        <table class="table table-sm table-striped" v-if="processUnfold[processOne.code+processOne.id] || processOne.processesContents.length==1 || ((processOne.processesContents.length)-(processFullSum[processOne.code])==1 &&  processFullSum[processOne.code]==1)">
+                        <table class="table table-sm table-striped" v-if="processUnfold[processOne.code+processOne.id] || processOne.processesContents.length==1 ||
+                        (processOne.is_multi_row &&  (processOne.processesContents.length)-(processFullSum[processOne.code])==1) || (!processOne.id &&  processFullSum[processOne.code]==1)">
                             <tr v-for="processesContent in processOne.processesContents"
                                 v-if="processOne.is_multi_row || !processOne.id ? !processOne.id  ? processesContent.type=='成品单' :processesContent.type=='原料单' : true">
                                 <td style="width: 180px" class="text-muted" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.bill_type }}</td>
@@ -1199,6 +1201,30 @@
                 close(code,id){
                     this.$delete(this.processUnfold,code+id);
                 },
+                rollback(id){
+                    if(!id)return;
+                    let _this=this;
+                    axios.post('{{url('process/rollback')}}',{id:id})
+                        .then(function (response) {
+                            if(response.data.success){
+                                _this.processes.every(function (process) {
+                                    if (process.id===id){
+                                        process.status=response.data.data;
+                                        return false
+                                    }
+                                    return  true;
+                                });
+                                tempTip.setDuration(2000);
+                                tempTip.showSuccess('回滚成功!' );
+                                return;
+                            }
+                            tempTip.setDuration(3000);
+                            tempTip.show('回滚失败!未知错误!');
+                        }).catch(function (err) {
+                        tempTip.setDuration(3000);
+                        tempTip.show('回滚失败!网络错误:' + err);
+                        })
+                }
             },
         });
     </script>

+ 2 - 1
resources/views/rejected/create.blade.php

@@ -978,6 +978,7 @@
                 seek_order(){
                     let _this=this;
                     let soreference5=this.billInputting.logistic_number_return;
+                    if (!soreference5) return;
                     axios.post('{{url('apiLocal/rejectedBill/seekOrder')}}',{soreference5:soreference5})
                         .then(function (response) {
                             if (response.data.success){
@@ -998,7 +999,7 @@
                                 if (id_owner) _this.billInputting.id_owner=id_owner;
                                 _this.billInputting.sender=response.data.data.c_contact;
                                 if (id_logistic_return) _this.billInputting.id_logistic_return=id_logistic_return;
-                                _this.billInputting.order_number=response.data.data.orderno;
+                                _this.billInputting.order_number=response.data.data.soreference1;
                                 _this.billInputting.mobile_sender=response.data.data.c_tel2;
                             }
                         })

+ 2 - 1
routes/web.php

@@ -201,9 +201,10 @@ Route::group(['prefix'=>'process'],function(){
     Route::post('deleteTutorial','ProcessController@deleteTutorial');
     //根据货主获取教程
     Route::post('ownerGetTutorials/{owner_id}','ProcessController@ownerGetTutorials');
-
     //删除二次加工内容单
     Route::post('deleteProcessContent/{id}','ProcessController@deleteProcessContent');
+    //回滚状态
+    Route::post('rollback','ProcessController@rollback');
 });
 //process主方法 restful
 Route::resource('process','ProcessController');