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

Merge branch 'master' into Haozi

haozi 5 лет назад
Родитель
Сommit
8b53587092
53 измененных файлов с 1635 добавлено и 62617 удалено
  1. 1 1
      app/Http/Controllers/OrderController.php
  2. 27 21
      app/Http/Controllers/PackageController.php
  3. 177 44
      app/Http/Controllers/ProcessController.php
  4. 5 2
      app/Http/Controllers/TestController.php
  5. 2 1
      app/Http/Controllers/TutorialController.php
  6. 10 15
      app/Http/Controllers/WaybillFinancialExceptedController.php
  7. 10 18
      app/Http/Controllers/WaybillFinancialSnapshotsController.php
  8. 7 1
      app/Http/Controllers/WaybillsController.php
  9. 14 19
      app/Http/Controllers/api/thirdPart/flux/PackageController.php
  10. 1 1
      app/Http/Controllers/api/thirdPart/flux/ReceiveController.php
  11. 1 1
      app/Http/Controllers/api/thirdPart/weight/PackageController.php
  12. 29 0
      app/OperatorLog.php
  13. 5 1
      app/OracleDOCWaveHeader.php
  14. 32 0
      app/Process.php
  15. 9 0
      app/ProcessesContent.php
  16. 15 9
      app/RejectedAnalyzeOwner.php
  17. 13 0
      app/Sign.php
  18. 37 0
      app/Traits/HasCompsitePrimaryKey.php
  19. 1 1
      database/migrations/2020_06_04_162259_add_order_authority.php
  20. 1 1
      database/migrations/2020_07_02_135957_add_authority_table_process_rollback.php
  21. 47 0
      database/migrations/2020_07_06_111337_change_auth_order_index.php
  22. 35 0
      database/migrations/2020_07_06_145857_create_signs_table.php
  23. 71 0
      database/migrations/2020_07_06_160500_create_operator_logs_table_and_add_authority_and_change_processes_column_status.php
  24. BIN
      public/images/QRCodeIMG/1.png
  25. BIN
      public/images/QRCodeIMG/2.png
  26. 0 61965
      public/js/app.js
  27. 0 0
      resources/js/trix.js
  28. 1 1
      resources/js/utilities/tempTip.js
  29. 5 0
      resources/sass/layout.scss
  30. 36 0
      resources/sass/text.scss
  31. 3 3
      resources/views/auth/login.blade.php
  32. 2 2
      resources/views/layouts/app.blade.php
  33. 1 1
      resources/views/layouts/menu.blade.php
  34. 130 0
      resources/views/maintenance/tutorial/create.blade.php
  35. 131 1
      resources/views/maintenance/tutorial/edit.blade.php
  36. 30 0
      resources/views/maintenance/tutorial/show.blade.php
  37. 2 2
      resources/views/order/index/menu.blade.php
  38. 2 2
      resources/views/order/menu.blade.php
  39. 2 2
      resources/views/personnel/checking-in/importAndExportQRCode.blade.php
  40. 17 11
      resources/views/process/create.blade.php
  41. 4 1
      resources/views/process/edit.blade.php
  42. 524 416
      resources/views/process/index.blade.php
  43. 2 1
      resources/views/process/menu.blade.php
  44. 126 0
      resources/views/process/show.blade.php
  45. 1 1
      resources/views/process/statistic.blade.php
  46. 9 31
      resources/views/rejected/search/analyze.blade.php
  47. 27 25
      resources/views/waybill/edit.blade.php
  48. 4 2
      resources/views/waybill/index.blade.php
  49. 8 10
      resources/views/waybill/waybillFinancialSnapshot/index.blade.php
  50. 13 1
      routes/web.php
  51. 3 0
      tests/wcsBatchSeeds.http
  52. 1 2
      tests/webApi/test.http
  53. 1 1
      webpack.mix.js

+ 1 - 1
app/Http/Controllers/OrderController.php

@@ -82,7 +82,7 @@ class OrderController extends Controller
     }
 
     public function delivering(Request $request){
-        if(!Gate::allows('订单管理-发运')){ return redirect(url('/'));  }
+        if(!Gate::allows('订单管理-查询')){ return redirect(url('/'));  }
         $paginate=$request->input('paginate')??50;
         $page=$request->input('page')??1;
         $checkData=$request->input('checkData');

+ 27 - 21
app/Http/Controllers/PackageController.php

@@ -13,7 +13,11 @@ use Box\Spout\Common\Type;
 use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
 use Box\Spout\Writer\Common\Creator\WriterFactory;
 use Carbon\Carbon;
+use Illuminate\Contracts\Foundation\Application;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
@@ -65,7 +69,7 @@ class PackageController extends Controller
     /**
      * Display a listing of the resource.
      *
-     * @return \Illuminate\Http\Response
+     * @return Response
      */
     public function index(Request $request)
     {
@@ -85,7 +89,7 @@ class PackageController extends Controller
     /**
      * Show the form for creating a new resource.
      *
-     * @return \Illuminate\Http\Response
+     * @return Response
      */
     public function create()
     {
@@ -97,8 +101,8 @@ class PackageController extends Controller
     /**
      * Store a newly created resource in storage.
      *
-     * @param  \Illuminate\Http\Request  $request
-     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
+     * @param Request $request
+     * @return Application|RedirectResponse|Redirector
      */
     public function store(Request $request)
     {
@@ -121,7 +125,7 @@ class PackageController extends Controller
         if (!$package && !$logistic_number)return redirect('package/create')->with('successError','录入失败!系统内没有对应波次的包裹!');
         $successTip = '操作成功';
         if ($package){
-            $accomplishToWMS=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
+            $accomplishToWMS=new Api\thirdPart\flux\PackageController();
             if ($isSamePackBatch||($package->batch_rule&&strstr($package->batch_rule,'组合'))){
                 $this->log(__METHOD__,'活动波次开始同步_'.__FUNCTION__,json_encode($package),Auth::user()['name']);
                 $this->syncBatch($package->batch_number,$weight,null,null,null,Carbon::now(),$paper_box_id);
@@ -134,7 +138,7 @@ class PackageController extends Controller
                 $package->batch_number=$batch_number;
                 $package->order_code=$order_code;
                 $result=$accomplishToWMS->accomplishToWMS($package);
-                if ($result['result']=='success'){
+                if ($result['result']){
                     if ($package->status=="记录异常")$package->status="已上传异常";
                     else $package->status="已上传";
                 }else{
@@ -218,8 +222,8 @@ class PackageController extends Controller
     /**
      * Display the specified resource.
      *
-     * @param  \App\Package  $packages
-     * @return \Illuminate\Http\Response
+     * @param Package $packages
+     * @return Response
      */
     public function show(Package $packages)
     {
@@ -229,8 +233,8 @@ class PackageController extends Controller
     /**
      * Show the form for editing the specified resource.
      *
-     * @param  \App\Package  $packages
-     * @return \Illuminate\Http\Response
+     * @param Package $packages
+     * @return Response
      */
     public function edit(Package $packages)
     {
@@ -240,9 +244,9 @@ class PackageController extends Controller
     /**
      * Update the specified resource in storage.
      *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \App\Package  $packages
-     * @return \Illuminate\Http\Response
+     * @param Request $request
+     * @param Package $packages
+     * @return Response
      */
     public function update(Request $request, Package $packages)
     {
@@ -252,8 +256,8 @@ class PackageController extends Controller
     /**
      * Remove the specified resource from storage.
      *
-     * @param  \App\Package  $packages
-     * @return \Illuminate\Http\Response
+     * @param Package $packages
+     * @return Response
      */
     public function destroy(Package $packages)
     {
@@ -262,8 +266,8 @@ class PackageController extends Controller
 
     public function export($id,Request $request){
         if(!Gate::allows('称重管理-查询')){ return '没有权限';  }
-        ini_set('max_execution_time',3500);
-        ini_set('memory_limit','3526M');
+        ini_set('max_execution_time',5500);
+        ini_set('memory_limit','5526M');
         if ($id==-1){
             $id=[];
             $packages=Package::select('id');
@@ -347,7 +351,7 @@ class PackageController extends Controller
     }
 
     public function syncBatch($batch_number,$weight,$max,$centre,$min,$date,$paperBox_id){
-        $accomplishToWMS=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
+        $accomplishToWMS=new Api\thirdPart\flux\PackageController();
         $packageBatch=Package::where('batch_number',$batch_number)->first();
         if(!$packageBatch)return;
         $newValues = ['weight' => $weight];
@@ -363,13 +367,13 @@ class PackageController extends Controller
         Package::where('batch_number',$batch_number)->update($newValues);
         $packageBatch['forceUpload']=$weightChanged;
         Controller::logS(__METHOD__,__FUNCTION__,"批量更新时批次号传入:{$batch_number},模型中:{$packageBatch['batch_number']}".json_encode($packageBatch));
-        $result=$accomplishToWMS->accomplishToWMS($packageBatch);
-        if ($result['result']=='success'){
+        $result=$accomplishToWMS->markWMSOnBatch($packageBatch['batch_number']);
+        if ($result['result']){
             $newValues['status']='已上传';
             Controller::logS(__METHOD__,'SUCCESS_'.__FUNCTION__,'批量更改波次上传成功'.json_encode($packageBatch));
         }else{
             $newValues['status']='上传异常';
-            Controller::logS(__METHOD__,'error_'.__FUNCTION__,'批量更改波次上传异常:'.json_encode($packageBatch));
+            Controller::logS(__METHOD__,'error_'.__FUNCTION__,'批量更改波次上传异常:'.$result['message'].json_encode($packageBatch));
         }
         Package::where('batch_number',$batch_number)->update($newValues);
 
@@ -377,6 +381,8 @@ class PackageController extends Controller
 
     public function statisticExport($packages,$owners,$logistics){
         if (!$packages||!$owners||!$logistics) return;
+        ini_set('max_execution_time',3500);
+        ini_set('memory_limit','2726M');
         $row=[[]];
         $row[0]['owner']='货主';
         $row[0]['sum']='总计';

+ 177 - 44
app/Http/Controllers/ProcessController.php

@@ -10,6 +10,7 @@ use App\ProcessDailyParticipant;
 use App\ProcessesContent;
 use App\ProcessMethod;
 use App\ProcessStatistic;
+use App\Sign;
 use App\Tutorial;
 use App\UserDetail;
 use App\UserDutyCheck;
@@ -26,7 +27,7 @@ use Ramsey\Uuid\Uuid;
 
 class ProcessController extends Controller
 {
-    public function conditionQuery(Request $request,$processes){
+    private function conditionQuery(Request $request,$processes){
         if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/'));  }
         $today=Carbon::now()->subDays(15)->format('Y-m-d');;
         if ($request->input('commodity_barcode')){
@@ -89,7 +90,7 @@ class ProcessController extends Controller
     public function index(Request $request)
     {
         if(!Gate::allows('二次加工管理-查询')){ return redirect(url('/'));  }
-        $processes=Process::with(['tutorials','processesContents'=>function($query){
+        $processes=Process::with(['tutorials','signs','processesContents'=>function($query){
             return $query->with(['commodity'=>function($query){
                 return $query->with('barcodes');
             }]);
@@ -150,7 +151,7 @@ class ProcessController extends Controller
     }
 
     //计算单参与人工时信息
-    public function countParticipantManHour($processDailyParticipant,$date){
+    protected function countParticipantManHour($processDailyParticipant,$date){
         $user=$processDailyParticipant->user_id;
         $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',$user)
             ->where('checked_at','like',$date.'%')->where('type','登入')->orderBy('id')->first();
@@ -191,7 +192,7 @@ class ProcessController extends Controller
     }
 
     //打卡工时减休息时间
-    public function isHour($userDutyCheckStart,$hour){
+    private function isHour($userDutyCheckStart,$hour){
 
         $date=$userDutyCheckStart->checked_at;
         $date=Carbon::parse($date)->format('H');
@@ -201,7 +202,7 @@ class ProcessController extends Controller
         return $hour;
     }
     //生成二次加工单缺失时间记录及本日记录
-    public function createDeficiencyData($processDailies,$today){
+    private function createDeficiencyData($processDailies,$today){
         $processDailiesArr=[];
         foreach ($processDailies as $processDaily){
             $processDailiesArr[$processDaily->date]=$processDaily;
@@ -226,6 +227,7 @@ class ProcessController extends Controller
                 $remain=$remain-($processDailiesArr[$date]->output);
             }
         }
+        $this->log(__METHOD__,"生成加工单每日记录".__FUNCTION__,json_encode($processDailies),Auth::user()['id']);
         return true;
     }
 
@@ -233,8 +235,9 @@ class ProcessController extends Controller
     public function reject($id){
         if(!Gate::allows('二次加工管理-接单与驳回')){ return redirect(url('/'));  }
         $process=Process::select('id','status')->find($id);
-        $process->status="驳回";
+        $process->status="驳回";
         $process->update();
+        $process->createOperatorLog('驳回');
         $this->log(__METHOD__,"驳回二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']);
         return $process;
     }
@@ -256,13 +259,24 @@ class ProcessController extends Controller
         }
         $process->status="待加工";
         $process->update();
+        $process->createOperatorLog('接单');
         $this->log(__METHOD__,"接单二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']);
         return $process;
     }
     //完成
-    public function accomplish($id){
-        if(!Gate::allows('二次加工管理-验收完成')){ return redirect(url('/'));  }
-        $process=Process::with('processDailies')->find($id);
+    public function accomplish(Request $request){
+        if(!Gate::allows('二次加工管理-交接完成')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+        $process=Process::with('processDailies')->find($request->id);
+        if (!$process)return ['success'=>false];
+        $process->update(['status'=>'交接完成']);
+        $process->createOperatorLog('交接完成');
+        $result=$this->statistic($process);
+        if (!$result['success'])return $result;
+        $processStatistic=$result['data'];
+        $this->log(__METHOD__,"完成二次加工单_".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
+        return ['success'=>true,'data'=>'交接完成'];
+    }
+    private function statistic(Process $process){
         if (count($process->processDailies)>0){
             $completed_amount=0;
             foreach ($process->processDailies as $processDaily){
@@ -270,12 +284,9 @@ class ProcessController extends Controller
             }
             $process->completed_amount=$completed_amount;
         }
-        $process->status="已完成";
-        $process->update();
-
         //统计:
         $revenue=($process->unit_price)*($process->completed_amount);   //收入合计
-        $processDailies=ProcessDaily::with('processDailyParticipants')->where('process_id',$id)->where('output','>',0)->get();
+        $processDailies=ProcessDaily::with('processDailyParticipants')->where('process_id',$process->id)->where('output','>',0)->get();
         $duration_days=count($processDailies);      //完成天数
         $duration_man_hours=0;      //总工时
         $total_cost=0;              //合计成本
@@ -291,8 +302,9 @@ class ProcessController extends Controller
             }
         };
         $gross_profit=$revenue-$total_cost; //毛利润
+        if ($gross_profit<=0)return ['success'=>false,'data'=>'该单未产生费用,无法计算毛利率!'];
         $gross_profit_rate=$gross_profit/$revenue;  //毛利率
-        $processStatistic=ProcessStatistic::find($id);
+        $processStatistic=ProcessStatistic::find($process->id);
         $processStatistic->revenue=$revenue;
         $processStatistic->duration_days=$duration_days;
         $processStatistic->duration_man_hours=$duration_man_hours;
@@ -300,8 +312,8 @@ class ProcessController extends Controller
         $processStatistic->gross_profit=$gross_profit;
         $processStatistic->gross_profit_rate=$gross_profit_rate;
         $processStatistic->update();
-        $this->log(__METHOD__,"完成二次加工单_".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
-        return $process;
+        $this->log(__METHOD__,"修改二次加工单统计单_".__FUNCTION__,json_encode($processStatistic),Auth::user()['id']);
+        return ['success'=>true,'data'=>$processStatistic];
     }
 
     //修改当日产量
@@ -324,7 +336,7 @@ class ProcessController extends Controller
         return $response;
     }
     //每次修改,去查询该单下全部日期,逐个替换,前一天剩余减当天产量为当天剩余,无前天记录去拿单子预期产量
-    public function countRemains($processDaily){
+    private function countRemains($processDaily){
         if (!$processDaily || !$processDaily->process) return;
         $processDailies=ProcessDaily::where('process_id',$processDaily->process_id)->orderBy('date')->get();
         for ($i=0;$i<count($processDailies);$i++){
@@ -347,15 +359,15 @@ class ProcessController extends Controller
         $processStatistic->update();
         //修改二次加工单状态
         $result=[];
-        if (count($processDailies)>0 && ($processDailies[(count($processDailies)-1)]->remain)<=0){
-            $result['process']=$this->changeProcessCheck($processDaily->process_id);
-        }
+        /*if (count($processDailies)>0 && ($processDailies[(count($processDailies)-1)]->remain)<=0){
+            $result['process']=$this->changeProcessCheck($processDaily->process_id);  //保留 目前小于0后等待人工确认再进入待验收
+        }*/
         $result['processDailies']=$processDailies;
         return $result;
     }
 
     //剩余小于等于0,状态待验收
-    public function changeProcessCheck($process_id){
+    private function changeProcessCheck($process_id){
         $process=Process::select('id','status')->find($process_id);
         if ($process->status=="加工中"){
             $process->status="待验收";
@@ -493,6 +505,7 @@ class ProcessController extends Controller
     }
     //添加教程关联
     public function selectedTutorial(Request $request){
+        if(!Gate::allows('二次加工管理-教程管理')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
         $process_id=$request->input('process_id');
         $tutorial_id=$request->input('tutorial_id');
         if (!$process_id || !$tutorial_id) return ['success'=>false,'data'=>'二次加工或教程传递错误!'];
@@ -504,6 +517,7 @@ class ProcessController extends Controller
     }
     //删除教程关联
     public function deleteTutorial(Request $request){
+        if(!Gate::allows('二次加工管理-教程管理')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
         $process_id=$request->input('process_id');
         $tutorial_id=$request->input('tutorial_id');
         if (!$process_id || !$tutorial_id) return ['success'=>false,'data'=>'二次加工或教程传递错误!'];
@@ -518,6 +532,7 @@ class ProcessController extends Controller
      */
     public function create()
     {
+        if(!Gate::allows('二次加工管理-录入')){ return redirect(url('/'));  }
         $processMethods=ProcessMethod::get();
         return view('process/create',['processMethods'=>$processMethods]);
     }
@@ -547,8 +562,10 @@ class ProcessController extends Controller
             'unit_price'=>$request->input('unit_price'),
             'remark'=>$request->input('remark'),
             'amount'=>$request->input('amount'),
+            'status'=>'待审核',
         ]);
         $process->save();
+        $process->createOperatorLog('创建');
         $processContents=[];
         foreach ($request->input('processContents') as $processContent){
             $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'].'_'.$processContent['type'];
@@ -569,7 +586,14 @@ class ProcessController extends Controller
                 ]);
                 if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
-                $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
+                if (isset($processContent['is_update_commodity_name'])){
+                    Sign::create([
+                        'signable_type'=>'processes_contents',
+                        'signable_id'=>$processContentOne->id,
+                        'field'=>'commodity_name',
+                        'mark'=>$processContent['commodity_name'],
+                    ]);
+                }
             }
         }
         $process->code='P'.date ("Ymd").str_pad($process->id,3,"0",STR_PAD_LEFT);
@@ -578,20 +602,73 @@ class ProcessController extends Controller
             'process_id'=>$process->id,
         ]);
         $processStatistic->save();
-        $this->log(__METHOD__,"录入二次加工单".__FUNCTION__,json_encode($process)." || ".json_encode($processStatistic),Auth::user()['id']);
+        $this->log(__METHOD__,"录入二次加工单".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
         if ($request->input('tutorials'))$process->tutorials()->sync($request->input('tutorials'));
         return;
     }
-
-    /**
-     * Display the specified resource.
-     *
-     * @param  int  $id
-     * @return \Illuminate\Http\Response
-     */
-    public function show($id)
-    {
-        //
+    //修改价格
+    function updateUnitPrice(Request $request){
+        if(!Gate::allows('二次加工管理-修改价格')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+        $errors=Validator::make($request->input(),[
+            'id' => 'required',
+            'unit_price'=>['required','numeric'],
+        ])->errors();
+        if (count($errors)>0)return ['success'=>false,'data'=>'非法参数!'];
+        $process=Process::with('signs')->find($request->id);
+        if (!$process || $process->status!='交接完成' || count($process->signs)>0)return ['success'=>false,'data'=>'无法操作该二次加工单!'];
+        $process->update(['unit_price'=>$request->unit_price]);
+        $sign=$process->createSign('发起修改');
+        $this->log(__METHOD__,"修改二次加工单价格_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+        return ['success'=>true,'data'=>$process->unit_price,'sign'=>$sign];
+    }
+
+    //二次加工组审核   两个方法大体相同 拆分原因是为了精确区分权限
+    function workGroupVerify(Request $request){
+        if(!Gate::allows('二次加工管理-组长确认')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+        $this->log(__METHOD__,"修改二次加工单价格二次加工组确认_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+        return $this->verify($request->id,'二次加工组确认');
+    }
+    //二次加工组审核
+    function accountantVerify(Request $request){
+        if(!Gate::allows('二次加工管理-财务确认')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+        $this->log(__METHOD__,"修改二次加工单价格财务确认_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+        return $this->verify($request->id,'财务确认');
+    }
+    private function verify($id,$msg){
+        $process=Process::with(['signs','processDailies'])->find($id);
+        if (!$process || count($process->signs)<1)return false;
+        $signMap=[];
+        foreach ($process->signs as $sign){
+            $signMap[$sign->mark]=true;
+        }
+        if (isset($signMap[$msg]))return ['success'=>false,'data'=>'该单已被确认过!'];
+        if (isset($signMap['二次加工组确认'])){
+            $result=$this->statistic($process);
+            //if (!$result['success'])return $result;
+            $process->createSign('财务确认');
+            $process->destroySign();
+            return ['success'=>true,'data'=>false];
+        }
+        if (isset($signMap['财务确认'])){
+            $result=$this->statistic($process);
+            //if (!$result['success'])return $result;
+            $process->createSign('二次加工组确认');
+            $process->destroySign();
+            return ['success'=>true,'data'=>false];
+        }
+        $sign = $process->createSign($msg);
+        return ['success'=>true,'data'=>$sign];
+    }
+
+    //审核
+    function audit(Request $request){
+        if(!Gate::allows('二次加工管理-审核')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+        $process=Process::find($request->id);
+        if (!$process)return ['success'=>false];
+        $process->update(['status'=>'待接单']);
+        $process->createOperatorLog('审核');
+        $this->log(__METHOD__,"二次加工单审核_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+        return ['success'=>true];
     }
 
     /**
@@ -602,6 +679,7 @@ class ProcessController extends Controller
      */
     public function edit($id)
     {
+        if(!Gate::allows('二次加工管理-编辑')){ return redirect(url('/'));  }
         $process=Process::with(['processesContents'=>function($query){
             return $query->with(['commodity'=>function($query){
                 return $query->with('barcodes');
@@ -611,6 +689,15 @@ class ProcessController extends Controller
         return view('process.edit',['process'=>$process,'processMethods'=>$processMethods]);
     }
 
+    public function show($id){
+        $process=Process::with(['processesContents'=>function($query){
+            $query->with(['commodity'=>function($query){
+                $query->with('barcodes');
+            }]);
+        },'tutorials'])->find($id);
+        return view('process.show',compact('process'));
+    }
+
     /**
      * Update the specified resource in storage.
      *
@@ -620,7 +707,7 @@ class ProcessController extends Controller
      */
     public function update(Request $request, $id)
     {
-        if(!Gate::allows('二次加工管理-编辑')){ return redirect(url('/'));  }
+        if(!Gate::allows('二次加工管理-编辑')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
         $errors=$this->validatorProcess($request)->errors();
         if (count($errors)>0)return ['error'=>$errors,'data'=>"process"];
         $errors=[];
@@ -637,10 +724,10 @@ class ProcessController extends Controller
             $process->unit_price=$request->input('unit_price');
             $process->remark=$request->input('remark');
             $process->amount=$request->input('amount');
-            if ($process->status=='驳回')$process->status='待加工';
+            if ($process->status=='已驳回')$process->status='待接单';
             $process->update();
+            $process->createOperatorLog('编辑');
         }
-        $this->log(__METHOD__,"编辑二次加工单".__FUNCTION__,json_encode($process),Auth::user()['id']);
         $processContents=[];
         foreach ($request->input('processContents') as $processContent){
             $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'].'_'.$processContent['type'];
@@ -650,6 +737,9 @@ class ProcessController extends Controller
         if (count($processContents)>count($removeDuplicateProcessContents)){
             return ['success'=>false,'data'=>'录入商品不可重复!'];
         }else{
+            $ProcessesContents=ProcessesContent::where('process_id',$process->id)->get();
+            $ids=array_column($ProcessesContents->toArray(),'id');
+            Sign::where('signable_type','processes_contents')->whereIn('signable_id',$ids)->delete();
             ProcessesContent::where('process_id',$process->id)->delete();
             foreach ($request->input('processContents') as $processContent){
                 if ($processContent['addBtnShow'])continue;
@@ -662,13 +752,21 @@ class ProcessController extends Controller
                 ]);
                 if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
-                $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
+                if (isset($processContent['is_update_commodity_name'])){
+                    Sign::create([
+                        'signable_type'=>'processes_contents',
+                        'signable_id'=>$processContentOne->id,
+                        'field'=>'commodity_name',
+                        'mark'=>$processContent['commodity_name'],
+                    ]);
+                }
             }
         }
+        $this->log(__METHOD__,"编辑二次加工单_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
         return;
     }
 
-    //删除二次加工内容单
+    //删除二次加工内容单            弃用,保留,改为全部提交后一次性验证,不在操作时就允许删除
     public function deleteProcessContent($id){
         if(!Gate::allows('二次加工管理-删除')){ return redirect(url('/'));  }
         $processContent=ProcessesContent::find($id);
@@ -679,42 +777,77 @@ class ProcessController extends Controller
 
     //回滚二次加工单状态
     function rollback(Request $request){
-        if(!Gate::allows('二次加工管理-回滚')){ return redirect(url('/'));  }
+        if(!Gate::allows('二次加工管理-回滚')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
         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;
             case '加工中':
                 $process->status='待接单';break;
             case '待验收':
                 $process->status='加工中';break;
+            case '待交接':
+                $process->status='待验收';break;
         }
         $process->save();
+        $process->createOperatorLog('回滚');
+        $this->log(__METHOD__,"回滚二次加工单_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
         return ['success'=>true,'data'=>$process->status];
     }
+    //加工完成
+    function processAccomplish(Request $request){
+       if(!Gate::allows('二次加工管理-登记工时')){ return ['success'=>false,'data'=>'您无权进行该操作!'];  }
+       $process= Process::find($request->id);
+       if (!$process)return ['success'=>false];
+       $process->update([
+           'status'=>'待验收'
+       ]);
+       $process->createOperatorLog('加工完成');
+        $this->log(__METHOD__,"标记加工完成_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+       return ['success'=>true,'data'=>'待验收'];
+    }
+
+    //质量验收
+    function checkAndAccept(Request $request){
+
+        $process= Process::find($request->id);
+        if (!$process)return ['success'=>false];
+        $process->update([
+            'status'=>'待交接'
+        ]);
+        $process->createOperatorLog('质量验收');
+        $this->log(__METHOD__,"质量验收二次加工单_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
+        return ['success'=>true,'data'=>'待交接'];
+    }
 
     //回收站
     function recycle(Request $request){
+        if(!Gate::allows('二次加工管理-删除')){ return redirect('/');  }
         $processes=Process::onlyTrashed()->paginate($request->paginate??50);
         return view('process.recycle',compact('processes'));
     }
 
     //回收站恢复
     function recover(Request $request){
+        if(!Gate::allows('二次加工管理-删除')){ return redirect('/');  }
         $checkData=$request->checkData;
+        $this->log(__METHOD__,"回收站恢复二次加工单_".__FUNCTION__,json_encode($request->input()),Auth::user()['id']);
         return ['success'=>Process::withTrashed()->whereIn('id',$checkData)->restore()];
     }
     /**
      * Remove the specified resource from storage.
-     *
-     * @param  int  $id
-     * @return \Illuminate\Http\Response
+     * @param int $id
+     * @return array
      */
     public function destroy($id)
     {
+        if(!Gate::allows('二次加工管理-删除')){ return redirect('/');  }
+        $this->log(__METHOD__,"删除二次加工单进回收站_".__FUNCTION__,json_encode($id),Auth::user()['id']);
         return ['success'=>Process::destroy($id)];
     }
 

+ 5 - 2
app/Http/Controllers/TestController.php

@@ -10,6 +10,9 @@ use App\Events\CancelOrder;
 use App\Events\WmsReceiveNewEvent;
 use App\Http\Controllers\Api\thirdPart\flux\WaybillController;
 use App\Logistic;
+use App\OracleDOCOrderHeader;
+use App\OracleDOCWaveDetails;
+use App\OracleDOCWaveHeader;
 use App\Order;
 use App\Package;
 use App\Rejected;
@@ -105,8 +108,8 @@ class TestController extends Controller
 
     function t1(Request $request)
     {
-        $test=new TestController();
-        dump(method_exists($test,'t1'));
+
+
     }
 
 

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

@@ -71,7 +71,8 @@ class TutorialController extends Controller
      */
     public function show($id)
     {
-
+        $tutorial=Tutorial::with('trixRichText')->find($id);
+        return view('maintenance.tutorial.show',compact('tutorial'));
     }
 
     /**

+ 10 - 15
app/Http/Controllers/WaybillFinancialExceptedController.php

@@ -27,21 +27,16 @@ class WaybillFinancialExceptedController extends Controller
     {
         if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
         $waybillFinancialSnapshots=WaybillFinancialExcepted::orderBy('id', 'DESC');
+        $type='';
+        if ($request->type=='ZF'){
+            $waybillFinancialSnapshots=$waybillFinancialSnapshots->where('json_content','like','%直发车%');
+            $type='ZF';
+        }
+        if ($request->type=='ZX'){
+            $waybillFinancialSnapshots=$waybillFinancialSnapshots->where('json_content','like','%专线%');
+            $type='ZX';
+        }
         $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'','excepted'=>true]);
-    }
-    public function indexZF(Request $request)
-    {
-        if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
-        $waybillFinancialSnapshots=WaybillFinancialExcepted::orderBy('id', 'DESC')->where('json_content','like','%直发车%');
-        $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'ZF','excepted'=>true]);
-    }
-    public function indexZX(Request $request)
-    {
-        if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
-        $waybillFinancialSnapshots=WaybillFinancialExcepted::orderBy('id', 'DESC')->where('json_content','like','%专线%');
-        $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'ZX','excepted'=>true]);
+        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>$type,'excepted'=>true]);
     }
 }

+ 10 - 18
app/Http/Controllers/WaybillFinancialSnapshotsController.php

@@ -28,26 +28,18 @@ class WaybillFinancialSnapshotsController extends Controller
     {
         if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
         $waybillFinancialSnapshots=WaybillFinancialSnapshot::orderBy('id', 'DESC');
+        $type='';
+        if ($request->type=='ZF'){
+            $waybillFinancialSnapshots=$waybillFinancialSnapshots->where('json_content','like','%直发车%');
+            $type='ZF';
+        }
+        if ($request->type=='ZX'){
+            $waybillFinancialSnapshots=$waybillFinancialSnapshots->where('json_content','like','%专线%');
+            $type='ZX';
+        }
         $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'']);
-    }
-
-    public function indexZF(Request $request)
-    {
-        if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
-        $waybillFinancialSnapshots=WaybillFinancialSnapshot::orderBy('id', 'DESC')->where('json_content','like','%直发车%');
-        $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'ZF']);
-    }
-
-    public function indexZX(Request $request)
-    {
-        if(!Gate::allows('财务报表-查询')){ return redirect(url('/'));  }
-        $waybillFinancialSnapshots=WaybillFinancialSnapshot::orderBy('id', 'DESC')->where('json_content','like','%专线%');
-        $waybillFinancialSnapshots=$this->conditionQuery($request,$waybillFinancialSnapshots);
-        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>'ZX']);
+        return view('waybill.waybillFinancialSnapshot.index',['waybillFinancialSnapshots'=>$waybillFinancialSnapshots,'filterData'=>$request->input(),'type'=>$type]);
     }
-
     public function export($id,Request $request){
         if(!Gate::allows('财务报表-查询')){ return '没有权限';  }
         if ($id==-1){

+ 7 - 1
app/Http/Controllers/WaybillsController.php

@@ -210,7 +210,7 @@ class WaybillsController extends Controller
 
         $data=$request->input();
         if (!isset($data['destination']))$data['destination']=$waybill->destination;
-        if ($data['destination_city_id'] && $waybill->destination_city_id != $data['destination_city_id']){
+        if (isset($data['destination_city_id']) && $waybill->destination_city_id != $data['destination_city_id']){
             $city=City::find($data['destination_city_id']);
             if ($city && (mb_strpos($data['destination'],$city->name)===false || mb_strpos($data['destination'],$city->province_name)===false)){
                 if (mb_strpos($data['destination'],$city->name)===false && mb_strpos($data['destination'],$city->province_name)===false){
@@ -667,6 +667,9 @@ class WaybillsController extends Controller
             'source_bill'=>'上游单号',
             'wms_bill_number'=>'wms订单号',
             'waybill_number'=>'运单号',
+            'charge'=>'运输收费',
+            'other_charge'=>'其他收费',
+            'other_charge_remark'=>'其他收费备注',
             'origination'=>'始发地',
             'destination'=>'目的地',
             'carrier'=>'承运商',
@@ -710,6 +713,9 @@ class WaybillsController extends Controller
                 'owner'=>isset($waybill->owner->name)?$waybill->owner->name:'',
                 'source_bill'=>isset($waybill->source_bill)?$waybill->source_bill:'',
                 'wms_bill_number'=>isset($waybill->wms_bill_number)?$waybill->wms_bill_number:'',
+                'charge'=>isset($waybill->charge)?$waybill->charge:'',
+                'other_charge'=>isset($waybill->other_charge)?$waybill->other_charge:'',
+                'other_charge_remark'=>isset($waybill->other_charge_remark)?$waybill->other_charge_remark:'',
                 'origination'=>isset($waybill->origination)?$waybill->origination:'',
                 'destination'=>isset($waybill->destination)?$waybill->destination:'',
                 'recipient'=>isset($waybill->recipient)?$waybill->recipient:'',

+ 14 - 19
app/Http/Controllers/api/thirdPart/flux/PackageController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api\thirdPart\flux;
 use App\Http\Controllers\Controller;
 use App\Jobs\MarkPackageExcepted;
 use App\Logistic;
+use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
 use App\OracleDOCWaveHeader;
 use App\Owner;
@@ -172,15 +173,9 @@ class PackageController extends Controller
     public function accomplishToWMS(Package $package)
     {
         try{
-            if($package['status']=='已上传'&&strstr($package['batch_rule'],'组合')){
-                if(isset($package['forceUpload'])&&$package['forceUpload']!=true){
-                    $this->log(__METHOD__,'跳过1_'.__FUNCTION__,'未实际上传,之前有上传成功且无变动:'.json_encode($package),null);
-//                    return ['result'=>'success']; //不写WMS接口则不需要中断
-                }
-            }
-            $this->log(__METHOD__,'common_'.__FUNCTION__,'标记WMS波次:'.$package['batch_number'].'进入中',null);
-            $this->markWMS($package['batch_number']);
-            return ['result'=>'success'];
+//            OracleDOCOrderDetail::where('SOREFERENCE5',$package->logistic_number)->update(['grossweight'=>'Y']);
+//            return ['result'=>$success];
+            return ['result'=>true];
             //对WMS接口请求不需要了,直接写其数据库
 //            $json=["request"=>['TASKID'=>$package->WMSReflectPackage_name,
 //                'SOReference5'=>$package->logistic_number,
@@ -212,18 +207,18 @@ class PackageController extends Controller
             return ['result'=>'false'];
         }
     }
-    private function markWMS($batchNumber){
+    public function markWMSOnBatch($batchNumber){
         $docWaveHeader=OracleDOCWaveHeader::where('waveno',$batchNumber)->first();
-        if($docWaveHeader){
-            $docWaveHeader['userdefine3'] = 'Y';
-            OracleDOCWaveHeader::select('waveno','userdefine3')->where('waveno',$batchNumber)
-                ->update(['userdefine3'=>'Y']);
-//            $docWaveHeader->update();
-            $docWaveHeader=OracleDOCWaveHeader::where('waveno',$batchNumber)->first();
-            $this->log(__METHOD__,'SUCCESS_'.__FUNCTION__,'标记WMS波次:'.$batchNumber.',userdefine3='.$docWaveHeader['userdefine3'],null);
-        }else{
-            $this->log(__METHOD__,'ERROR'.__FUNCTION__,'标记WMS波次:'.$batchNumber.'未取到',null);
+        if(!$docWaveHeader){
+            {return ['result'=>false,'message'=>'波次不存在'];}
         }
+        $unpackedOrders = OracleDOCOrderHeader::where('waveno', $batchNumber)->where(function ($query){
+            $query->where('SOSTATUS','<>','99')->where('SOSTATUS','<>','63');
+        })->get();
+        if($unpackedOrders->isNotEmpty()){return ['result'=>false,'message'=>'有未装箱或完成的订单在该波次,不能批量记录重量'];}
+        OracleDOCWaveHeader::where('waveno',$batchNumber)->update(['userdefine3'=>'Y']);
+        Controller::logS(__METHOD__,'SUCCESS_'.__FUNCTION__,'标记WMS波次:'.$batchNumber.',userdefine3="Y"',auth()->user()['id']);
+        return ['result'=>true];
     }
 
 

+ 1 - 1
app/Http/Controllers/api/thirdPart/flux/ReceiveController.php

@@ -53,7 +53,7 @@ class ReceiveController extends Controller
                 $receive->skus()->save($sku);
             }
             if(isset($receive['ASNREFERENCE3'])){
-                if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"接收到WMS下发退货单号:{$receive['ASNREFERENCE3']},准备进入事件WmsReceiveNewEvent",null);
+                if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"接收到WMS下发退货单号:{$receive['ASNREFERENCE3']}||".json_encode($request->all()).",准备进入事件WmsReceiveNewEvent",null);
                 event(new WmsReceiveNewEvent($receive['ASNREFERENCE3'],$receive));
             }
         }

+ 1 - 1
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -92,7 +92,7 @@ class PackageController extends Controller
                 $this->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
                 $package->save();
                 $result=$accomplishToWMS->accomplishToWMS($package);
-                if ($result['result']=='success'){
+                if ($result['result']){
                     if ($package->status=="记录异常")$package->status="已上传异常";
                     else $package->status="已上传";
                 }else{

+ 29 - 0
app/OperatorLog.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App;
+
+use DateTimeInterface;
+use Illuminate\Database\Eloquent\Model;
+
+class OperatorLog extends Model
+{
+    const UPDATED_AT = null;
+    protected $fillable=[
+        'operator_logable_type','operator_logable_id','user_id','operation'
+    ];
+    protected $appends=[
+        'user_name'
+    ];
+
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i');
+    }
+    public function user(){
+        return $this->hasOne('App\User','id','user_id');
+    }
+    public function getUserNameAttribute()
+    {
+        return $this['user'] ? $this['user']['name'] : null;
+    }
+}

+ 5 - 1
app/OracleDOCWaveHeader.php

@@ -8,8 +8,12 @@ use App\Traits\ModelTimeFormat;
 class OracleDOCWaveHeader extends Model
 {
     use ModelTimeFormat;
+    protected $fillable=[
+        'WAVENO','ROUTE','TRANSPORTATION','ORDERTYPE','PRIORITY','WCSSENDFLAG','WCSSENDTIME','WCSSENDDESCR','DESCR','USERDEFINE1','USERDEFINE2','USERDEFINE3','USERDEFINE4','USERDEFINE5','RELEASESTATUS','WAVESTATUS','ADDTIME','ADDWHO','EDITTIME','EDITWHO','EDISENDTIME','WAREHOUSEID','CUSTOMERID','CUBIC','GROSSWEIGHT','TASKDISPATCH','CROSSAREA','TASKSTATUS','WAVERULE','CARRIERID','GROUPNUMBER','SORTATIONTYPE','UDFPRINTFLAG1','UDFPRINTFLAG2','UDFPRINTFLAG3','WORKINGAREA','WAVEDISPATCHID','WAVEGROUPNO','WAVEGROUPPRINTFLAG','WAV_TSK_MGM','ASSORTINGID'
+    ];
+    protected $primaryKey = 'WAVENO';
     protected $connection="oracle";
     protected $table="DOC_WAVE_HEADER";
-//    protected $primaryKey="WAVENO";
     public $timestamps=false;
+    public function getIncrementing(){ return false;}
 }

+ 32 - 0
app/Process.php

@@ -5,6 +5,7 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\SoftDeletes;
+use Illuminate\Support\Facades\Auth;
 
 class Process extends Model
 {
@@ -32,6 +33,14 @@ class Process extends Model
     public function processDailies(){
         return $this->hasMany('App\ProcessDaily','process_id','id');
     }
+    public function operatorLogs(){
+        return $this->hasMany('App\OperatorLog','operator_logable_id','id')
+            ->where('operator_logable_type','processes')->orderBy('id','DESC');
+    }
+    public function signs(){
+        return $this->hasMany('App\Sign','signable_id','id')
+            ->where('signable_type','processes');
+    }
 
 
     public function getOwnerNameAttribute()
@@ -42,4 +51,27 @@ class Process extends Model
     {
         return $this['processMethod']? $this['processMethod']['name']:null;
     }
+
+
+    public function createOperatorLog($operation){
+        OperatorLog::create([
+            'operator_logable_type'=>'processes',
+            'operator_logable_id'=>$this->id,
+            'user_id'=>Auth::id(),
+            'operation'=>$operation
+        ]);
+    }
+
+    public function createSign($mark){
+        return Sign::create([
+            'signable_type'=>'processes',
+            'signable_id'=>$this->id,
+            'field'=>'unit_price',
+            'mark'=>$mark
+        ]);
+    }
+
+    public function destroySign(){
+        Sign::where('signable_type','processes')->where('signable_id',$this->id)->where('field','unit_price')->delete();
+    }
 }

+ 9 - 0
app/ProcessesContent.php

@@ -13,6 +13,7 @@ class ProcessesContent extends Model
     ];
     protected $appends=[
         'commodity_name',
+        'sign_mark',
     ];
 
     public function process(){
@@ -21,9 +22,17 @@ class ProcessesContent extends Model
     public function commodity(){
         return $this->belongsTo('App\Commodity','commodity_id','id');
     }
+    public function sign(){
+        return $this->hasOne('App\Sign','signable_id','id')
+            ->where('signable_type','processes_contents')->where('field','commodity_name');
+    }
 
     public function getCommodityNameAttribute()
     {
         return $this['commodity']? $this['commodity']['name']:null;
     }
+    public function getSignMarkAttribute()
+    {
+        return $this['sign']? $this['sign']['mark']:null;
+    }
 }

+ 15 - 9
app/RejectedAnalyzeOwner.php

@@ -3,6 +3,7 @@
 namespace App;
 
 use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\DB;
@@ -20,7 +21,7 @@ class RejectedAnalyzeOwner extends Model
      * created_at:创建时间
      *
      */
-    protected $appends = ['id_owner', 'owner_name', 'bounce_amount', 'check_amount', 'in_storage_count'];
+//    protected $appends = ['id_owner', 'owner_name', 'bounce_amount', 'check_amount', 'in_storage_count', 'not_in_storage_count'];
 
     // 按条件查询    zengjun
     public static function findBy($array = null)
@@ -36,9 +37,10 @@ class RejectedAnalyzeOwner extends Model
             $rao->bounce_amount = $result->bounce_amount;
             $rao->check_amount = $result->check_amount;
             $rao->in_storage_count = $result->in_storage_count;
+            $rao->not_in_storage_count = $result->not_in_storage_count;
             $collection[] = $rao;
         }
-        return $collection;
+        return (new Collection($collection));
     }
 
     // 按条件查询    zengjun
@@ -54,7 +56,7 @@ class RejectedAnalyzeOwner extends Model
                     'check_amount'=>$result->check_amount,
                     'uncheck_amount'=>$result->bounce_amount-$result->check_amount,
                     'in_storage_count'=>$result->in_storage_count,
-                    'not_in_storage_count'=>$result->bounce_amount-$result->in_storage_count,
+                    'not_in_storage_count'=>$result->not_in_storage_count,
             ];
             $list[] = $rao;
         }
@@ -119,23 +121,27 @@ class RejectedAnalyzeOwner extends Model
     // 返回sql    zengjun
     public static  function getQuerySQL($array= null){
         $condition = RejectedAnalyzeOwner::getCondition($array);// 条件
-        $sql = 'select distinct rao.id_owner,owners.name,sum(bounce_amount) bounce_amount,sum(check_amount) check_amount,sum(in_storage_count) in_storage_count from';
+        $sql = 'select distinct rao.id_owner,owners.name,sum(bounce_amount) bounce_amount,sum(check_amount) check_amount,sum(in_storage_count) in_storage_count,sum(not_in_storage_count) not_in_storage_count from';
         $sql .= '(';
         // 退件单数
-        $sql .= ' select  distinct id_owner,count(1) bounce_amount,0 check_amount,0 in_storage_count from rejected_bills  where 1=1 ';
+        $sql .= ' select  distinct id_owner,count(1) bounce_amount,0 check_amount,0 in_storage_count,0 not_in_storage_count from rejected_bills  where deleted_at is null ';
         $sql .= $condition;
         $sql .= ' UNION ';
         // 审核单数
-        $sql .= ' select  distinct id_owner,0 bounce_amount,count(1) check_amount,0 in_storage_count from rejected_bills where is_checked = 1 ';
+        $sql .= ' select  distinct id_owner,0 bounce_amount,count(1) check_amount,0 in_storage_count,0 not_in_storage_count from rejected_bills where is_checked = 1 and deleted_at is null ';
+        $sql .= $condition;
+        $sql .= ' UNION ';
+        // 未入库数
+        $sql .= ' select  distinct id_owner,0 bounce_amount,0 check_amount,0 in_storage_count,count(1) not_in_storage_count from rejected_bills where is_loaded <> 1 and is_loaded is not null and deleted_at is null ';
         $sql .= $condition;
         $sql .= ' UNION ';
         // 入库单数
-        $sql .= ' select  distinct id_owner,0 bounce_amount,0 check_amount,count(1) in_storage_count from rejected_bills  where is_loaded = 1 ';
+        $sql .= ' select  distinct id_owner,0 bounce_amount,0 check_amount,count(1) in_storage_count,0 not_in_storage_count from rejected_bills  where is_loaded = 1 and deleted_at is null ';
         $sql .= $condition;
         $sql .= ') rao ';
 
-        $sql .= ' left join owners on owners.id = rao.id_owner ';
-        $sql .= ' group by rao.id_owner ';
+        $sql .= ' left join owners on owners.id = rao.id_owner and owners.deleted_at is null';
+        $sql .= ' group by rao.id_owner having owners.name is not null order by bounce_amount desc';
         return  $sql;
     }
 

+ 13 - 0
app/Sign.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Sign extends Model
+{
+    const UPDATED_AT = null;
+    protected $fillable=[
+        'signable_type','signable_id','field','mark'
+    ];
+}

+ 37 - 0
app/Traits/HasCompsitePrimaryKey.php

@@ -0,0 +1,37 @@
+<?php
+
+
+namespace App\Traits;
+
+use Illuminate\Database\Eloquent\Builder;
+
+trait HasCompositePrimaryKey
+{
+    /**
+     * Get the value indicating whether the IDs are incrementing.
+     *
+     * @return bool
+     */
+    public function getIncrementing()
+    {
+        return false;
+    }
+
+    /**
+     * Set the keys for a save update query.
+     *
+     * @param  \Illuminate\Database\Eloquent\Builder $query
+     * @return \Illuminate\Database\Eloquent\Builder
+     */
+    protected function setKeysForSaveQuery(Builder $query)
+    {
+        foreach ($this->getKeyName() as $key) {
+            if ($this->$key)
+                $query->where($key, '=', $this->$key);
+            else
+                throw new Exception(__METHOD__ . 'Missing part of the primary key: ' . $key);
+        }
+
+        return $query;
+    }
+}

+ 1 - 1
database/migrations/2020_06_04_162259_add_order_authority.php

@@ -9,7 +9,7 @@ class AddOrderAuthority extends Migration
 {
     protected $authNames=[
         "订单管理",
-        "订单管理-发运",
+        "订单管理-查询",
         "订单管理-批量备注",
     ];
     /**

+ 1 - 1
database/migrations/2020_07_02_135957_add_authority_table_process_rollback.php

@@ -25,7 +25,7 @@ class AddAuthorityTableProcessRollback extends Migration
         });
         Schema::table('waybills',function (Blueprint $table){
             $table->decimal('other_charge',7,3)->nullable()->comment('其他收费,原其他费用为其他支出');
-            $table->text('other_charge_remark')->nullable()->comment('其他费备注');
+            $table->text('other_charge_remark')->nullable()->comment('其他费备注');
         });
     }
 

+ 47 - 0
database/migrations/2020_07_06_111337_change_auth_order_index.php

@@ -0,0 +1,47 @@
+<?php
+
+use App\Authority;
+use App\Unit;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeAuthOrderIndex extends Migration
+{
+    protected $changeNames=[
+        ['订单管理-发运','订单管理-查询'],
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //修改或没有则添加
+        foreach ($this->changeNames as $namePack){
+            $authority=Authority::where('name',$namePack[0])->orWhere('name',$namePack[1])->first();
+            if(!$authority){
+                (new Authority(['name'=>$namePack[1],'alias_name'=>$namePack[1]]))->save();
+            }elseif($authority['name']==$namePack[0]){
+                $authority['name']=$namePack[1];
+                $authority->save();
+            }
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //改回旧的
+        foreach ($this->changeNames as $namePack){
+            $authority=Authority::where('name',$namePack[1])->first();
+            $authority['name']=$namePack[0];
+            $authority->save();
+        }
+    }
+}

+ 35 - 0
database/migrations/2020_07_06_145857_create_signs_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateSignsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('signs', function (Blueprint $table) {
+            $table->id();
+            $table->string('signable_type')->index()->comment('签名类型(表名)');
+            $table->string('signable_id')->index()->comment('ID');
+            $table->string('field')->nullable()->comment('字段名');
+            $table->string('mark')->nullable()->comment('标记');
+            $table->timestamp('created_at');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('signs');
+    }
+}

+ 71 - 0
database/migrations/2020_07_06_160500_create_operator_logs_table_and_add_authority_and_change_processes_column_status.php

@@ -0,0 +1,71 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateOperatorLogsTableAndAddAuthorityAndChangeProcessesColumnStatus extends Migration
+{
+    protected $authNames=[
+        '教程',
+        '二次加工管理-审核',
+        '二次加工管理-质量验收',
+        '二次加工管理-交接完成',
+        '二次加工管理-修改价格',
+        '二次加工管理-组长确认',
+        '二次加工管理-财务确认',
+    ];
+    protected $authNamesDel=[
+        '二次加工管理-验收完成'
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('operator_logs', function (Blueprint $table) {
+            $table->id();
+            $table->string('operator_logable_type')->index()->comment('类型(表名)');
+            $table->bigInteger('operator_logable_id')->index()->comment('ID');
+            $table->bigInteger('user_id')->index()->comment('用户');
+            $table->string('operation')->nullable()->comment('操作');
+            $table->timestamp('created_at');
+        });
+        foreach ($this->authNames as $name){
+            \App\Authority::create(['name'=>$name,'alias_name'=>$name]);
+        }
+        foreach ($this->authNamesDel as $name){
+            \App\Authority::where(['name'=>$name,'alias_name'=>$name])->delete();
+        }
+        Schema::table('processes',function (Blueprint $table){
+            $table->dropColumn('status');
+        });
+        Schema::table('processes',function (Blueprint $table){
+            $table->enum('status',['待审核','已驳回','待接单','待加工','加工中','待验收','待交接','交接完成'])->comment('状态');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('operator_logs');
+        foreach ($this->authNames as $name){
+            \App\Authority::where(['name'=>$name,'alias_name'=>$name])->delete();
+        }
+        foreach ($this->authNamesDel as $name){
+            \App\Authority::create(['name'=>$name,'alias_name'=>$name]);
+        }
+        Schema::table('processes',function (Blueprint $table){
+            $table->dropColumn('status');
+        });
+        Schema::table('processes',function (Blueprint $table){
+            $table->enum('status',['待接单','待加工','驳回','加工中','待验收','已完成'])->comment('状态');
+        });
+    }
+}

BIN
public/images/QRCodeIMG/1.png


BIN
public/images/QRCodeIMG/2.png


Разница между файлами не показана из-за своего большого размера
+ 0 - 61965
public/js/app.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
resources/js/trix.js


+ 1 - 1
resources/js/utilities/tempTip.js

@@ -3,7 +3,7 @@ const tempTip={
     fadingDuration:4500,
     inputType:'input',
     setDuration:function(milliSec){
-        this.fadingDuration=milliSec;
+        this.fadingDuration=parseInt(milliSec);
     },
     setInputType:function(type){
         this.inputType=type;

+ 5 - 0
resources/sass/layout.scss

@@ -67,6 +67,7 @@ table{
             background: #e7f5ee;
         }
     }
+
     tr:nth-child(even) td{
         &.td-warm{
             background: rgb(248, 244, 241);
@@ -92,3 +93,7 @@ table{
         }
     }
 }
+.row-even{
+   background-color: rgba(0, 0, 0, .05)
+}
+

+ 36 - 0
resources/sass/text.scss

@@ -2,3 +2,39 @@
 .del{
     text-decoration-line: line-through;
 }
+
+.flicker{
+    font-size: 1em;
+    color: red;
+    animation: changeshadow 2s ease-in infinite;
+    -webkit-animation: changeshadow 2s linear infinite;
+    -moz-animation: changeshadow 2s linear infinite;
+    -ms-animation: changeshadow 2s linear infinite;
+    -o-animation: changeshadow 2s linear infinite;
+}
+@keyframes changeshadow {
+    0%{ text-shadow: 0 0 4px red}
+    50%{ text-shadow: 0 0 40px red}
+    100%{ text-shadow: 0 0 4px red}
+}
+/* 添加兼容性前缀 */
+@-webkit-keyframes changeshadow {
+    0%{ text-shadow: 0 0 4px red}
+    50%{ text-shadow: 0 0 40px red}
+    100%{ text-shadow: 0 0 4px red}
+}
+@-moz-keyframes changeshadow {
+    0%{ text-shadow: 0 0 4px red}
+    50%{ text-shadow: 0 0 40px red}
+    100%{ text-shadow: 0 0 4px red}
+}
+@-ms-keyframes changeshadow {
+    0%{ text-shadow: 0 0 4px red}
+    50%{ text-shadow: 0 0 40px red}
+    100%{ text-shadow: 0 0 4px red}
+}
+@-o-keyframes changeshadow {
+    0%{ text-shadow: 0 0 4px red}
+    50%{ text-shadow: 0 0 40px red}
+    100%{ text-shadow: 0 0 4px red}
+}

+ 3 - 3
resources/views/auth/login.blade.php

@@ -98,10 +98,10 @@
             }
         )
         function loginSubmit() {
-            tempTip.setDuration('99999');
+            tempTip.setDuration(99999);
             tempTip.waitingTip('提交中');
             axios.post('{{ route('login') .'?rand='.microtime(true)}}',vue.inputting).then(function (response) {
-                tempTip.setDuration('2000');
+                tempTip.setDuration(2000);
                 tempTip.cancelWaitingTip();
                 if(response.data.success!==true){
                     if(response.data.errors){
@@ -113,7 +113,7 @@
                         return;
                     }
                 }else{
-                    tempTip.setDuration('99999');
+                    tempTip.setDuration(99999);
                     tempTip.waitingTip('页面跳转中');
                     location=response.data.url;
                 }

+ 2 - 2
resources/views/layouts/app.blade.php

@@ -10,11 +10,11 @@
     <title>@yield('title') {{ config('app.name', '宝时WAS') }}</title>
     @yield('head')
     <!-- Styles -->
-    <link href="{{ asset('css/app200630.css') }}" rel="stylesheet">
+    <link href="{{ asset('css/app200708.css') }}" rel="stylesheet">
 </head>
 <body>
 <div id="app">
-    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm" style="padding: 0;max-height: 80px" >
+    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm" style="padding: 0;" >
         <div class="container-fluid">
             <a class="navbar-brand" href="{{ url('/') }}" title="宝时 Warehouse Assistance System" style="vertical-align: text-bottom">
                 <img src="{{asset('icon/logo100b.png')}}" alt="宝时 Warehouse Assistance System" height="30" >

+ 1 - 1
resources/views/layouts/menu.blade.php

@@ -1,4 +1,4 @@
-<div class="collapse navbar-collapse" id="navbarSupportedContent" style="max-height: 80px">
+<div class="collapse navbar-collapse" id="navbarSupportedContent">
     <!-- Left Side Of Navbar -->
     <ul class="navbar-nav mr-auto nav-tabs nav font-weight-bold" id="nav1" style="padding-top: 10px">
         @can('退货管理')

+ 130 - 0
resources/views/maintenance/tutorial/create.blade.php

@@ -3,6 +3,136 @@
 @section('head')
     <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
     <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
+    <script>
+
+        addEventListener("trix-file-accept", function(event) {
+            var config = laravelTrixConfig(event);
+
+            if(
+                config.hideToolbar ||
+                (config.hideTools && config.hideTools.indexOf("file-tools") != -1) ||
+                (config.hideButtonIcons && config.hideButtonIcons.indexOf("attach") != -1)
+            ) {
+                return event.preventDefault();
+            }
+        });
+
+        addEventListener("trix-attachment-remove", function(event) {
+            var config = laravelTrixConfig(event);
+
+            var xhr = new XMLHttpRequest();
+
+            var attachment = event.attachment.attachment.attributes.values.url.split("/").pop();
+
+            xhr.open("DELETE", "{{url('laravel-trix/attachment/:attachment')}}".replace(':attachment',attachment), true);
+
+            setAttachementUrlCollectorValue('attachment-' + config['id'], function(collector){
+                for( var i = 0; i < collector.length; i++){
+                    if ( collector[i] === attachment) {
+                        collector.splice(i, 1);
+                    }
+                }
+
+                return collector;
+            });
+
+            xhr.send();
+        });
+
+        addEventListener("trix-attachment-add", function(event) {
+            var config = laravelTrixConfig(event);
+
+            if (event.attachment.file) {
+                var attachment = event.attachment;
+
+                config['attachment'] = attachment;
+
+                uploadFile(config, setProgress, setAttributes, errorCallback);
+
+                function setProgress(progress) {
+                    attachment.setUploadProgress(progress);
+                }
+
+                function setAttributes(attributes) {
+                    attachment.setAttributes(attributes);
+                }
+
+                function errorCallback(xhr,attachment){
+                    attachment.remove();
+                    alert(xhr.statusText);
+                }
+            }
+        });
+
+
+        function uploadFile(data, progressCallback, successCallback, errorCallback) {
+            var formData = createFormData(data);
+            var xhr = new XMLHttpRequest();
+
+            xhr.open("POST", "{{url('laravel-trix/attachment')}}", true);
+
+            xhr.upload.addEventListener("progress", function(event) {
+                var progress = (event.loaded / event.total) * 100;
+                progressCallback(progress);
+            });
+
+            xhr.addEventListener("load", function(event) {
+                if (xhr.status >= 200 && xhr.status < 300) {
+                    var response = JSON.parse(xhr.response);
+
+                    setAttachementUrlCollectorValue('attachment-' + data['id'], function(collector){
+                        collector.push(response.url.split("/").pop())
+
+                        return collector;
+                    });
+
+                    successCallback({
+                        url : response.url,
+                        href: response.url
+                    })
+                } else {
+                    errorCallback(xhr,data.attachment)
+                }
+            });
+
+            xhr.send(formData);
+        }
+
+        function setAttachementUrlCollectorValue(inputId, callback){
+            var attachmentCollector = document.getElementById(inputId);
+
+            attachmentCollector.value = JSON.stringify(callback(JSON.parse(attachmentCollector.value)));
+        }
+
+        function createFormData(data) {
+            var formData = new FormData();
+            formData.append("Content-Type", data.attachment.file.type);
+            formData.append("file", data.attachment.file);
+            formData.append("field", data.field);
+            formData.append("modelClass", data.modelClass);
+
+            if(data.disk != undefined) {
+                formData.append("disk", data.disk);
+            }
+
+            return formData;
+        }
+        function laravelTrixConfig (event) {
+            return JSON.parse(event.target.getAttribute("data-config"));
+        }
+        window.onload = function() {
+            var laravelTrixInstanceStyles =  document.getElementsByTagName('laravel-trix-instance-style');
+
+            var style = document.createElement('style');
+            style.type = 'text/css';
+
+            for (var tag of laravelTrixInstanceStyles) {
+                style.innerHTML += tag.textContent + ' ';
+            }
+
+            document.getElementsByTagName('head')[0].appendChild(style);
+        }
+    </script>
 @endsection
 @section('content')
     <div id="nav2">

+ 131 - 1
resources/views/maintenance/tutorial/edit.blade.php

@@ -3,11 +3,141 @@
 @section('head')
     <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
     <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
+    <script>
+
+        addEventListener("trix-file-accept", function(event) {
+            var config = laravelTrixConfig(event);
+
+            if(
+                config.hideToolbar ||
+                (config.hideTools && config.hideTools.indexOf("file-tools") != -1) ||
+                (config.hideButtonIcons && config.hideButtonIcons.indexOf("attach") != -1)
+            ) {
+                return event.preventDefault();
+            }
+        });
+
+        addEventListener("trix-attachment-remove", function(event) {
+            var config = laravelTrixConfig(event);
+
+            var xhr = new XMLHttpRequest();
+
+            var attachment = event.attachment.attachment.attributes.values.url.split("/").pop();
+
+            xhr.open("DELETE", "{{url('laravel-trix/attachment/:attachment')}}".replace(':attachment',attachment), true);
+
+            setAttachementUrlCollectorValue('attachment-' + config['id'], function(collector){
+                for( var i = 0; i < collector.length; i++){
+                    if ( collector[i] === attachment) {
+                        collector.splice(i, 1);
+                    }
+                }
+
+                return collector;
+            });
+
+            xhr.send();
+        });
+
+        addEventListener("trix-attachment-add", function(event) {
+            var config = laravelTrixConfig(event);
+
+            if (event.attachment.file) {
+                var attachment = event.attachment;
+
+                config['attachment'] = attachment;
+
+                uploadFile(config, setProgress, setAttributes, errorCallback);
+
+                function setProgress(progress) {
+                    attachment.setUploadProgress(progress);
+                }
+
+                function setAttributes(attributes) {
+                    attachment.setAttributes(attributes);
+                }
+
+                function errorCallback(xhr,attachment){
+                    attachment.remove();
+                    alert(xhr.statusText);
+                }
+            }
+        });
+
+
+        function uploadFile(data, progressCallback, successCallback, errorCallback) {
+            var formData = createFormData(data);
+            var xhr = new XMLHttpRequest();
+
+            xhr.open("POST", "{{url('laravel-trix/attachment')}}", true);
+
+            xhr.upload.addEventListener("progress", function(event) {
+                var progress = (event.loaded / event.total) * 100;
+                progressCallback(progress);
+            });
+
+            xhr.addEventListener("load", function(event) {
+                if (xhr.status >= 200 && xhr.status < 300) {
+                    var response = JSON.parse(xhr.response);
+
+                    setAttachementUrlCollectorValue('attachment-' + data['id'], function(collector){
+                        collector.push(response.url.split("/").pop())
+
+                        return collector;
+                    });
+
+                    successCallback({
+                        url : response.url,
+                        href: response.url
+                    })
+                } else {
+                    errorCallback(xhr,data.attachment)
+                }
+            });
+
+            xhr.send(formData);
+        }
+
+        function setAttachementUrlCollectorValue(inputId, callback){
+            var attachmentCollector = document.getElementById(inputId);
+
+            attachmentCollector.value = JSON.stringify(callback(JSON.parse(attachmentCollector.value)));
+        }
+
+        function createFormData(data) {
+            var formData = new FormData();
+            formData.append("Content-Type", data.attachment.file.type);
+            formData.append("file", data.attachment.file);
+            formData.append("field", data.field);
+            formData.append("modelClass", data.modelClass);
+
+            if(data.disk != undefined) {
+                formData.append("disk", data.disk);
+            }
+
+            return formData;
+        }
+        function laravelTrixConfig (event) {
+            return JSON.parse(event.target.getAttribute("data-config"));
+        }
+        window.onload = function() {
+                var laravelTrixInstanceStyles =  document.getElementsByTagName('laravel-trix-instance-style');
+
+                var style = document.createElement('style');
+                style.type = 'text/css';
+
+                for (var tag of laravelTrixInstanceStyles) {
+                    style.innerHTML += tag.textContent + ' ';
+                }
+
+                document.getElementsByTagName('head')[0].appendChild(style);
+            }
+        </script>
 @endsection
 @section('content')
     <div id="nav2">
         @component('maintenance.menu')@endcomponent
-        @component('maintenance.city.menu')@endcomponent
+        @component('maintenance.tutorial.menu')@endcomponent
     </div>
     <div class="card col-md-8 offset-md-2" id="tutorial">
         <div class="card-body">

+ 30 - 0
resources/views/maintenance/tutorial/show.blade.php

@@ -0,0 +1,30 @@
+@extends('layouts.app')
+@section('title')教程详情@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.tutorial.menu')
+        <li class="nav-item">
+            <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('tutorial',2)}">详情</a>
+        </li>
+        @endcomponent
+    </span>
+    <div class="card card-body container col" id="body">
+        <div class="col-8 offset-2" id="content" v-html="content.trix_rich_text.content"></div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:'#body',
+            data:{
+                content:{!! $tutorial !!},
+            },
+            mounted(){
+                console.log(this.content.trix_rich_text.content);
+            }
+        });
+    </script>
+@stop

+ 2 - 2
resources/views/order/index/menu.blade.php

@@ -4,9 +4,9 @@
     <div class="container-fluid nav3">
         <div class="card menu-third" >
             <ul class="nav nav-pills">
-                @can('订单管理-发运')
+                @can('订单管理-查询')
                     <li class="nav-item">
-                        <a class="nav-link text-dark" href="{{url('order/index/delivering')}}" :class="{active:isActive('delivering',3)}">发运</a>
+                        <a class="nav-link text-dark" href="{{url('order/index/delivering')}}" :class="{active:isActive('delivering',3)}">查询</a>
                     </li> @endcan
             </ul>
         </div>

+ 2 - 2
resources/views/order/menu.blade.php

@@ -2,9 +2,9 @@
 <div class="container-fluid nav2" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('订单管理-发运')
+            @can('订单管理-查询')
             <li class="nav-item">
-                <a class="nav-link" href="{{url('order/index/delivering')}}" :class="{active:isActive('index',2)}">查询</a>
+                <a class="nav-link" href="{{url('order/index/delivering')}}" :class="{active:isActive('index',2)}">订单</a>
             </li> @endcan
         </ul>
     </div>

+ 2 - 2
resources/views/personnel/checking-in/importAndExportQRCode.blade.php

@@ -19,8 +19,8 @@
                     <h4 class="text-center text-danger">如更换设备请联系管理人员解除设备绑定!</h4>
                 </div>
 
-                <div class="row-cols-2" v-for="importAndExportQRCode in importAndExportQRCodes">
-                    <div class="col text-center" style="float:left;">
+                <div class="row">
+                    <div class="col-6 text-center" v-for="importAndExportQRCode in importAndExportQRCodes">
                             <img id="img" class="img-thumbnail"  :src="importAndExportQRCode.url" />
                         <p class="font-weight-bold m-2 h5 text-center" style="color: red">@{{ importAndExportQRCode.source }}</p>
                     </div>

+ 17 - 11
resources/views/process/create.blade.php

@@ -22,18 +22,18 @@
                                     <span class="col-12 text-center text-muted small">双击选择商品:</span>
                                     <span class=" col-11 offset-1 input-group" style=" border-radius: 5px; opacity: 1.5; text-align: center;">
                                         <ul onselectstart="return false;" class="list-group tooltipTarget" style="width: 100%; max-height: 130px; overflow-y: scroll;">
-                                            <li  v-for="commodity in processContents[0].commodities" :id="commodity.id"  :style="{'background-color':processContents[0].commodity_id==commodity.id ? '#9fcdff':''}"
+                                            <li  v-for="commodity in processContents[0].commodities" :id="commodity.id"  :style="[{'background-color':processContents[0].commodity_id==commodity.id ? '#9fcdff':'' },{'text-decoration':commodityIds.includes(commodity.id+'_false')? 'line-through red' : ''}]"
                                                 @dblclick="selectedCommodity(commodity,processContents[0].wms_code,false)" class="list-group-item list-group-item-action p-0 m-0">
                                                 <div class="form-inline" style="cursor: default; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
                                                     <small :title="commodity.name" class="text-left text-primary col-6 tooltipTarget"  style="overflow: hidden;">@{{ commodity.name }}</small>
-                                                    <small class="text-left  col-6"><a v-for="barcode in commodity.barcodes">@{{ barcode.code }}&nbsp;&nbsp;&nbsp;</a></small>
+                                                    <small class="text-left  col-6"><span v-for="barcode in commodity.barcodes">@{{ barcode.code }}&nbsp;&nbsp;&nbsp;</span></small>
                                                 </div>
                                             </li>
                                         </ul>
                                     </span>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">商品名</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" @input="update_commodity_name(processContents[0])" v-model="processContents[0].commodity_name">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">条码</label>
                                     <ul class="p-0 m-0 ml-2 list-unstyled list-inline" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
@@ -58,14 +58,14 @@
                                            value="确定新增" class="btn btn-primary btn-sm form-control form-control-sm">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" type="button" @click="deleteProcessContent(processContents[0].wms_code,processContents[0].commodity_id,false)" value="删除" class="btn btn-danger form-control">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" type="button" @click="deleteProcessContent(processContents[0].wms_code,processContents[0].commodity_id,false,0)" value="删除" class="btn btn-danger form-control">
                                 </div>
                             </div>
                         </div>
                         <div class="form-group row">
                             <div class="col-10 offset-1 p-1 border rounded bg-light" v-for="processContent in processContents" v-if="!processContent.addBtnShow && !processContent.type">
                                 <div class="col-12 border">
-                                    <div class="row small"  @mouseover="update_delBtn(true,processContent.wms_code,processContent.commodity_id,false)" @mouseleave="update_delBtn(false,processContent.wms_code,processContent.commodity_id,false)">
+                                    <div class="row small" style="background-color: white;opacity: 0.7"  @mouseover="update_delBtn(true,processContent.wms_code,processContent.commodity_id,false)" @mouseleave="update_delBtn(false,processContent.wms_code,processContent.commodity_id,false)">
                                         <span class="font-weight-bold">单据号:</span>
                                         <span class="font-weight-bold">@{{ processContent.wms_code }}</span>
                                         <span class="ml-2 text-muted">单据类型:</span>
@@ -79,7 +79,7 @@
                                         <span class="ml-2 text-muted">条码:</span>
                                         <span class="text-muted"><small v-if="processContent.commodity_barcodes && processContent.commodity_barcodes.length>0"
                                                                         v-for="barcode in processContent.commodity_barcodes">@{{ barcode.code }}</small></span>
-                                        <button v-if="is_delBtn[processContent.wms_code+'_'+processContent.commodity_id+'_'+false]" @click="deleteProcessContent(processContent.wms_code,processContent.commodity_id,false)" class="btn btn-sm btn-danger" style="position: absolute;right: 0;bottom: 0">删除</button>
+                                        <button v-if="is_delBtn[processContent.wms_code+'_'+processContent.commodity_id+'_'+false]" @click="deleteProcessContent(processContent.wms_code,processContent.commodity_id,false,processContent.amount)" class="btn btn-sm btn-danger" style="position: absolute;right: 0;bottom: 0">删除</button>
                                     </div>
                                 </div>
                             </div>
@@ -135,14 +135,14 @@
                                            value="确定新增" class="btn btn-primary btn-sm form-control form-control-sm">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" type="button" @click="deleteProcessContent(processContents[0].wms_code,processContents[0].commodity_id,true)" value="删除" class="btn btn-danger form-control">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" type="button" @click="deleteProcessContent(processContents[0].wms_code,processContents[0].commodity_id,true,0)" value="删除" class="btn btn-danger form-control">
                                 </div>
                             </div>
                         </div>
                         <div class="form-group row">
                             <div class="col-10 offset-1 p-1 border rounded bg-light" v-for="processContent in processContents" v-if="!processContent.addBtnShow && processContent.type">
                                 <div class="col-12 border">
-                                    <div class="row small" style="position: relative" @mouseover="update_delBtn(true,processContent.wms_code,processContent.commodity_id,true)" @mouseleave="update_delBtn(false,processContent.wms_code,processContent.commodity_id,true)">
+                                    <div class="row small" style="background-color: white;opacity: 0.7" @mouseover="update_delBtn(true,processContent.wms_code,processContent.commodity_id,true)" @mouseleave="update_delBtn(false,processContent.wms_code,processContent.commodity_id,true)">
                                         <span class="font-weight-bold">单据号:</span>
                                         <span class="font-weight-bold">@{{ processContent.wms_code }}</span>
                                         <span class="ml-2 text-muted">单据类型:</span>
@@ -156,7 +156,7 @@
                                         <span class="ml-2 text-muted">条码:</span>
                                         <span class="text-muted"><small v-if="processContent.commodity_barcodes && processContent.commodity_barcodes.length>0"
                                                                         v-for="barcode in processContent.commodity_barcodes">@{{ barcode.code }}</small></span>
-                                        <button v-if="is_delBtn[processContent.wms_code+'_'+processContent.commodity_id+'_'+true]" @click="deleteProcessContent(processContent.wms_code,processContent.commodity_id,true)" class="btn btn-sm btn-danger" style="position: absolute;right: 0;bottom: 0">删除</button>
+                                        <button v-if="is_delBtn[processContent.wms_code+'_'+processContent.commodity_id+'_'+true]" @click="deleteProcessContent(processContent.wms_code,processContent.commodity_id,true,processContent.amount)" class="btn btn-sm btn-danger" style="position: absolute;right: 0;bottom: 0">删除</button>
                                     </div>
                                 </div>
                             </div>
@@ -178,7 +178,7 @@
                 </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 v-model="process.amount" type="text" :placeholder="'自动计算数量为“' + sum +'”请填写实际数'" 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>
@@ -237,6 +237,7 @@
                 msg:false,
                 commodityIds:[],
                 is_delBtn:[],
+                sum:0
             },
             watch:{
                 processContents:{
@@ -326,6 +327,7 @@
                     let sign=true;
                     let is_return=false;
                     let processContentTemp={};
+                    if (!type)_this.sum+= Number(amount);
                     _this.processContents.some(function (processContent) {
                         if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
                             processContent.commodities.every(function (commodity) {
@@ -352,9 +354,10 @@
                     }
                 },
                 //删除新增
-                deleteProcessContent(wms_code,commodity_id,type){
+                deleteProcessContent(wms_code,commodity_id,type,amount){
                     let _this=this;
                     let deleteData=[];
+                    if (!type)_this.sum-= Number(amount);
                     _this.processContents.some(function (processContent,i) {
                         if (processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.type===type) {
                             deleteData.unshift(i);
@@ -496,6 +499,9 @@
                     if (is_type) this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+type,true);
                     else this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+type,false);
                 },
+                update_commodity_name(processContent){
+                    this.$set(processContent,'is_update_commodity_name',true);
+                },
             },
         });
     </script>

+ 4 - 1
resources/views/process/edit.blade.php

@@ -37,7 +37,7 @@
                                     </span>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">商品名</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="form-control form-control-sm col-8" v-model="processContents[0].commodity_name" @input="update_commodity_name(processContents[0])">
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">条码</label>
                                     <ul class="p-0 m-0 ml-2 list-unstyled list-inline" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
@@ -434,6 +434,9 @@
                     if (is_type) this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+type,true);
                     else this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+type,false);
                 },
+                update_commodity_name(processContent){
+                  this.$set(processContent,'is_update_commodity_name',true);
+                },
             },
 
         });

Разница между файлами не показана из-за своего большого размера
+ 524 - 416
resources/views/process/index.blade.php


+ 2 - 1
resources/views/process/menu.blade.php

@@ -15,9 +15,10 @@
             <li class="nav-item">
                 <a class="nav-link" href="{{url('process/statistic')}}" :class="{active:isActive('statistic',2)}">统计</a>
             </li> @endcan
+            @can('二次加工管理-删除')
             <li class="nav-item">
                 <a class="nav-link" href="{{url('process/recycle')}}" :class="{active:isActive('recycle',2)}">回收站</a>
-            </li>
+            </li>@endcan
             <li class="nav-item">
                 <a class="nav-link text-dark" href="{{url('process/relating')}}" :class="{active:isActive('relating',2)}">相关设置</a>
             </li>

+ 126 - 0
resources/views/process/show.blade.php

@@ -0,0 +1,126 @@
+@extends('layouts.app')
+@section('title','单据详情')
+
+@section('content')
+<span id="nav2">
+    @component('process.menu')
+    <li class="nav-item">
+        <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('process',1)}">单据</a>
+    </li>
+    @endcomponent
+</span>
+<div id="body" class="d-none  card card-body container-fluid text-nowrap">
+    <div class="row">
+        <div class="col-sm-3">
+            <label class="text-muted col-3" for="code">任务号:</label>
+            <span class="col-8 offset-1" id="code">@{{ process.code }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-muted col-3" for="owner_name">客户名称:</label>
+            <span id="owner_name" class="col-8 offset-1">@{{ process.owner_name }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-muted col-3" for="status">状态:</label>
+            <span id="status" class="col-8 offset-1">@{{ process.status }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-muted col-3" for="created_at">建单日期:</label>
+            <span id="created_at" class="col-8 offset-1">@{{ process.created_at }}</span>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-sm-3">
+            <label class="text-primary col-3" for="process_method_name">加工类型:</label>
+            <span id="process_method_name" class="col-8 offset-1 text-danger font-weight-bold">@{{ process.process_method_name }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-primary col-3" for="amount">预期数量:</label>
+            <span id="amount" class="col-8 offset-1">@{{ process.amount }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-primary col-3" for="completed_amount">完成数量:</label>
+            <span id="completed_amount" class="col-8 offset-1  text-dark font-weight-bold">@{{ process.completed_amount }}</span>
+        </div>
+        <div class="col-sm-3">
+            <label class="text-primary col-3" for="unit_price">单价:</label>
+            <span id="unit_price" class="col-8 offset-1">@{{ process.unit_price }}</span>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-sm-12  ">
+            <label class="col-3 text-dark" for="remark">备注:</label>
+            <span id="remark" class="col-10 offset-1" style="white-space: normal;">@{{ process.remark }}</span>
+        </div>
+    </div>
+    <div class="col-sm row  w-100" >
+        <table class="table table-sm table-bordered table-bordered w-100" style="background-color: #efe3d9;">
+            <tr>
+                <th>类型</th>
+                <th>单据号<span class="badge badge-sm badge-pill bg-warning small">原料单</span></th>
+                <th>数量</th>
+                <th>商品条码</th>
+                <th>商品名称</th>
+            </tr>
+            <tr v-for="content in process.processes_contents" v-if="content.type=='原料单'">
+                <td>@{{ content.bill_type }}</td>
+                <td>@{{ content.wms_code }}</td>
+                <td>@{{ content.amount }}</td>
+                <td>
+                    <ul class="p-0 m-0 list-unstyled list-inline" v-if="content.commodity">
+                        <li v-for="barcode in content.commodity.barcodes"><small style="white-space: normal">@{{ barcode.code }}</small></li>
+                    </ul>
+                </td>
+                <td class="text-muted tooltipTarget">
+                    <div style="white-space: normal">@{{ content.sign_mark?content.sign_mark:content.commodity_name }}</div></td>
+            </tr>
+        </table>
+        <table class="table table-sm table-bordered table-bordered w-100" style="background-color: #ccd7dc;">
+            <tr>
+                <th>类型</th>
+                <th>单据号<span class="badge badge-sm bg-warning small">成品单</span></th>
+                <th>数量</th>
+                <th>商品条码</th>
+                <th>商品名称</th>
+            </tr>
+            <tr v-for="content in process.processes_contents" v-if="content.type=='成品单'">
+                <td>@{{ content.bill_type }}</td>
+                <td>@{{ content.wms_code }}</td>
+                <td>@{{ content.amount }}</td>
+                <td>
+                    <ul class="p-0 m-0 list-unstyled list-inline" v-if="content.commodity">
+                        <li v-for="barcode in content.commodity.barcodes"><small style="white-space: normal">@{{ barcode.code }}</small></li>
+                    </ul>
+                </td>
+                <td class="text-muted tooltipTarget">
+                    <div style="white-space: normal">@{{ content.sign_mark?content.sign_mark:content.commodity_name }}</div></td>
+            </tr>
+        </table>
+    </div>
+    <div class="col  row">
+        <label class="col-2 text-dark" for="tutorials">教程:</label>
+        <span class="col-8  text-danger font-weight-bold" v-if="process.tutorials.length<1">暂无</span>
+        <div v-else id="tutorials" class="col-8  text-muted" style="white-space: normal">
+            <b @click="tutorialShow(tutorial.id)" style="cursor: pointer;text-decoration:underline" class="text-primary" v-for="tutorial in process.tutorials">@{{ tutorial.name }}<br></b>
+        </div>
+    </div>
+</div>
+@stop
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:"#body",
+            data:{
+                process:{!! $process !!},
+            },
+            mounted:function(){
+                $('#body').removeClass('d-none');
+            },
+            methods:{
+                tutorialShow(id){
+                    window.open('{{url('maintenance/tutorial')}}/'+id);
+                }
+            },
+        });
+    </script>
+@stop

+ 1 - 1
resources/views/process/statistic.blade.php

@@ -63,7 +63,7 @@
                                     <option >    </option>
                                     <option value="待接单">待接单</option>
                                     <option value="待加工">待加工</option>
-                                    <option value="驳回">驳回</option>
+                                    <option value="驳回">驳回</option>
                                     <option value="加工中">加工中</option>
                                     <option value="待验收">待验收</option>
                                     <option value="已完成">已完成</option>

+ 9 - 31
resources/views/rejected/search/analyze.blade.php

@@ -103,22 +103,22 @@
                             @{{ index+1 }}
                         </td>
                         <td>
-                            @{{ rejectedBill.ownerName }}
+                            @{{ rejectedBill.owner_name }}
                         </td>
                         <td class="text-muted">
-                            @{{ rejectedBill.bounceAmount }}
+                            @{{ rejectedBill.bounce_amount }}
                         </td>
                         <td class="text-success font-weight-bold">
-                            @{{ rejectedBill.checkAmount }}
+                            @{{ rejectedBill.check_amount }}
                         </td>
                         <td>
-                            @{{ rejectedBill.bounceAmount-rejectedBill.checkAmount }}
+                            @{{ rejectedBill.bounce_amount-rejectedBill.check_amount }}
                         </td>
                         <td class="text-success font-weight-bold">
-                            @{{ rejectedBill.inStorageCount }}
+                            @{{ rejectedBill.in_storage_count }}
                         </td>
                         <td>
-                            @{{ rejectedBill.bounceAmount-rejectedBill.inStorageCount }}
+                            @{{ rejectedBill.not_in_storage_count }}
                         </td>
                     </tr>
                 </table>
@@ -130,33 +130,11 @@
 @section('lastScript')
     <script>
         // 数据
-        let rejectedBills = [
-            @foreach($rejectedBills as $rejectedBill)
-            {
-                id: '{{$rejectedBill->id_owner}}',
-                ownerName: '{{$rejectedBill->owner_name}}',
-                bounceAmount: '{{$rejectedBill->bounce_amount}}',
-                checkAmount: '{{$rejectedBill->check_amount}}',
-                inStorageCount: '{{$rejectedBill->in_storage_count}}',
-            },
-            @endforeach
-        ];
+        let rejectedBills = {!! $rejectedBills !!};
 
         //  客户
-        let owners = [
-            @foreach($owners as $owner)
-            {
-                id: '{{$owner->id}}', name: '{{$owner->name}}'
-            },
-            @endforeach
-        ];
-        let qualityLabels = [
-            @foreach($qualityLabels as $qualityLabel)
-            {
-                id: '{{$qualityLabel->id}}', name: '{{$qualityLabel->name}}'
-            },
-            @endforeach
-        ];
+        let owners = {!! $owners !!};
+        let qualityLabels = {!! $qualityLabels !!};
             @if(isset($paginateParams))
         let paginateParams ={!! json_encode($paginateParams) !!};
             @endif

+ 27 - 25
resources/views/waybill/edit.blade.php

@@ -87,7 +87,7 @@
                     </div>
                     {{--编辑区--}}
                     <div class="form-group row">
-                        <label  class="col-2 col-form-label text-right text-secondary">收费(元)</label>
+                        <label  class="col-2 col-form-label text-right text-secondary">运输收费(元)</label>
                         <div class="col-8">
                             <input type="text" class="form-control @error('charge') is-invalid @enderror"
                                    id="charge" name="charge" value="@if(old('charge')){{ old('charge') }}@else{{$waybill->charge}}@endif " >
@@ -98,6 +98,32 @@
                                     </span>
                         @enderror
                     </div>
+
+                    <div class="form-group row">
+                        <label for="other_charge" class="col-2 col-form-label text-right text-muted">其他收费(元)</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('other_charge') is-invalid @enderror"
+                                   name="other_charge" autocomplete="off" value="@if(old('other_charge')){{ old('other_charge') }}@else{{$waybill->other_charge}}@endif"  >
+                            @error('other_charge')
+                            <span class="invalid-feedback" role="alert">
+                                        <strong>{{ $message }}</strong>
+                                    </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="other_charge_remark" class="col-2 col-form-label text-right text-muted">其他收费备注</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('other_charge') is-invalid @enderror"
+                                   name="other_charge_remark" autocomplete="off" value="@if(old('other_charge_remark')){{ old('other_charge_remark') }}@else{{$waybill->other_charge_remark}}@endif"  >
+                            @error('other_charge_remark')
+                            <span class="invalid-feedback" role="alert">
+                                        <strong>{{ $message }}</strong>
+                                    </span>·
+                            @enderror
+                        </div>
+                    </div>
+
                     <div class="form-group row" style="margin-bottom: 20px">
                         <label for="carrier_id" class="col-2 col-form-label text-right text-primary">承运商 *</label>
                         <div class="col-8" style="position: relative">
@@ -322,30 +348,6 @@
                             @enderror
                         </div>
                     </div>
-                    <div class="form-group row">
-                        <label for="other_charge" class="col-2 col-form-label text-right text-muted">其他费用(元)</label>
-                        <div class="col-8">
-                            <input type="text" class="form-control @error('other_charge') is-invalid @enderror"
-                                   name="other_charge" autocomplete="off" value="@if(old('other_charge')){{ old('other_charge') }}@else{{$waybill->other_charge}}@endif"  >
-                            @error('other_charge')
-                            <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                            @enderror
-                        </div>
-                    </div>
-                    <div class="form-group row">
-                        <label for="other_charge_remark" class="col-2 col-form-label text-right text-muted">其他费用备注</label>
-                        <div class="col-8">
-                            <textarea class="form-control @error('other_charge_remark') is-invalid @enderror"
-                                      name="other_charge_remark" autocomplete="off"  >@if(old('other_charge_remark')){{ old('other_charge_remark') }}@else{{$waybill->other_charge_remark}}@endif</textarea>
-                            @error('other_charge_remark')
-                            <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                            @enderror
-                        </div>
-                    </div>
                     <div class="form-group row">
                         <label for="dispatch_remark" class="col-2 col-form-label text-right text-muted">调度备注</label>
                         <div class="col-8">

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

@@ -162,8 +162,9 @@
                     <th class="td-warm">上游单号</th>
                     <th class="td-warm">WMS订单号</th>
                     <th class="td-warm">运单号</th>
-                    <th class="td-warm">其他费用</th>
-                    <th class="td-warm">其他费用备注</th>
+                    <th class="td-warm">运输收费</th>
+                    <th class="td-warm">其他收费</th>
+                    <th class="td-warm">其他收费备注</th>
                     @can('运输管理-图片上传')<th class="td-warm">照片</th>@endcan
                     <th class="td-cool">收件人</th>
                     <th class="td-cool">收件人电话</th>
@@ -248,6 +249,7 @@
                     <td class="td-warm toptd" :title="waybill.remark? '置顶备注:'+waybill.remark :''">@{{waybill.source_bill}}</td>
                     <td class="td-warm" >@{{waybill.wms_bill_number}}</td>
                     <td class="td-warm">@{{waybill.waybill_number}}</td>
+                    <td class="td-warm">@{{waybill.charge}}</td>
                     <td class="td-warm">@{{waybill.other_charge}}</td>
                     <td class="td-warm">@{{waybill.other_charge_remark}}</td>
                     <td class="td-warm">

+ 8 - 10
resources/views/waybill/waybillFinancialSnapshot/index.blade.php

@@ -12,15 +12,13 @@
                     <ul class="nav nav-pills">
                         @can('财务报表-查询')
                             <li class="nav-item">
-                                <a class="nav-link" href="@if(!isset($excepted)) {{url('files')}} @else {{url('waybill/waybillFinancialExcepted')}} @endif" :class="{active:isActive('',3)}">全部</a>
-                            </li> @endcan
-                        @can('财务报表-查询')
+                                <a class="nav-link @if($type=='') active @endif" href="@if(!isset($excepted)) {{url('waybill/waybillFinancialSnapshot')}} @else {{url('waybill/waybillFinancialExcepted')}} @endif">全部</a>
+                            </li>
                             <li class="nav-item">
-                                <a class="nav-link" href="@if(!isset($excepted)) {{url('waybill/waybillFinancialSnapshot/ZX')}} @else {{url('waybill/waybillFinancialExcepted/ZX')}} @endif" :class="{active:isActive('ZX',3)}">专线</a>
-                            </li> @endcan
-                        @can('财务报表-查询')
+                                <a class="nav-link @if($type=='ZX') active @endif" href="@if(!isset($excepted)) {{url('waybill/waybillFinancialSnapshot?type=ZX')}} @else {{url('waybill/waybillFinancialExcepted?type=ZX')}} @endif">专线</a>
+                            </li>
                             <li class="nav-item">
-                                <a class="nav-link" href="@if(!isset($excepted)) {{url('waybill/waybillFinancialSnapshot/ZF')}} @else {{url('waybill/waybillFinancialExcepted/ZF')}} @endif" :class="{active:isActive('ZF',3)}">直发车</a>
+                                <a class="nav-link @if($type=='ZF') active @endif" href="@if(!isset($excepted)) {{url('waybill/waybillFinancialSnapshot?type=ZF')}} @else {{url('waybill/waybillFinancialExcepted?type=ZF')}} @endif">直发车</a>
                             </li> @endcan
 
                     </ul>
@@ -29,9 +27,9 @@
     </div>
     <div class="card " style="width: 3500px">
     <form  method="get" action="@if(!isset($excepted))
-    @if($type=='ZF'){{url('waybill/waybillFinancialSnapshot/ZF')}}@elseif($type=='ZX'){{url('waybill/waybillFinancialSnapshot/ZX')}}@else{{url('waybill/waybillFinancialSnapshot')}}@endif
+    @if($type=='ZF'){{url('waybill/waybillFinancialSnapshot?type=ZF')}}@elseif($type=='ZX'){{url('waybill/waybillFinancialSnapshot?type=ZX')}}@else{{url('waybill/waybillFinancialSnapshot')}}@endif
     @else
-    @if($type=='ZF'){{url('waybill/waybillFinancialExcepted/ZF')}}@elseif($type=='ZX'){{url('waybill/waybillFinancialExcepted/ZX')}}@else{{url('waybill/waybillFinancialExcepted')}}@endif
+    @if($type=='ZF'){{url('waybill/waybillFinancialExcepted?type=ZF')}}@elseif($type=='ZX'){{url('waybill/waybillFinancialExcepted?type=ZX')}}@else{{url('waybill/waybillFinancialExcepted')}}@endif
     @endif ">
     <div class="card-header form-inline">
         <label style="margin-left: 1%"> 开始日期:</label><input style="max-width: 200px" type="date" name="created_at_start" class="form-control form-control-sm"  v-model="filterData.created_at_start">
@@ -180,7 +178,7 @@
             ],
             checkData:[],
             filterData:{
-                created_at_start:'',created_at_end:'',
+                created_at_start:'',created_at_end:'',type:'{{$type}}',
             },
         },
         watch:{

+ 13 - 1
routes/web.php

@@ -189,7 +189,7 @@ Route::group(['prefix'=>'process'],function(){
     //接单
     Route::post('receive/{id}','ProcessController@receive');
     //完成
-    Route::post('accomplish/{id}','ProcessController@accomplish');
+    Route::post('accomplish','ProcessController@accomplish');
     //修改每日产量
     Route::post('updateDailyOutput','ProcessController@updateDailyOutput');
     //添加参与人
@@ -218,6 +218,18 @@ Route::group(['prefix'=>'process'],function(){
     Route::get('recycle','ProcessController@recycle');
     //恢复
     Route::post('recover','ProcessController@recover');
+    //审核
+    Route::post('audit','ProcessController@audit');
+    //加工完成
+    Route::post('processAccomplish','ProcessController@processAccomplish');
+    //验收
+    Route::post('checkAndAccept','ProcessController@checkAndAccept');
+    //修改价格
+    Route::post('updateUnitPrice','ProcessController@updateUnitPrice');
+    //二次加工组审核
+    Route::post('workGroupVerify','ProcessController@workGroupVerify');
+    //财务审核
+    Route::post('accountantVerify','ProcessController@accountantVerify');
 });
 //process主方法 restful
 Route::resource('process','ProcessController');

Разница между файлами не показана из-за своего большого размера
+ 3 - 0
tests/wcsBatchSeeds.http


+ 1 - 2
tests/webApi/test.http

@@ -29,10 +29,9 @@ POST http://bswas/userDutyCheck/storeUserDetail
 
 ###
 
-POST https://was.baoshi56.com/api/thirdPart/weixin/login
+POST http://bswas/laravel-trix/attachment
 Content-Type: application/json
 
-{"name":"zhouzhendong","password":"zhou1792524653"}
 ###
 
 GET https://was.baoshi56.com/api/thirdPart/weixin/waybill?api_token=fb7efc3

+ 1 - 1
webpack.mix.js

@@ -12,7 +12,7 @@ const mix = require('laravel-mix');
  */
 
 mix.js('resources/js/app.js', 'public/js')
-    .sass('resources/sass/app.scss', 'public/css/app200630.css');
+    .sass('resources/sass/app.scss', 'public/css/app200708.css');
 mix.js('resources/js/singles/rejectedIndex.js', 'public/js/singles/rejectedIndex200513.js');
 mix.js('resources/js/singles/searchAnalyze.js', 'public/js/singles/searchAnalyze200513.js');
 

Некоторые файлы не были показаны из-за большого количества измененных файлов