Selaa lähdekoodia

Merge branch 'master' into Haozi

haozi 5 vuotta sitten
vanhempi
commit
c8de3d0456
45 muutettua tiedostoa jossa 2443 lisäystä ja 1193 poistoa
  1. 2 0
      .gitignore
  2. 1 1
      app/Exceptions/Handler.php
  3. 25 3
      app/Http/Controllers/Auth/LoginController.php
  4. 9 9
      app/Http/Controllers/PersonnelController.php
  5. 41 18
      app/Http/Controllers/ProcessController.php
  6. 7 0
      app/Http/Controllers/RejectedBillController.php
  7. 2 1
      app/Http/Controllers/RejectedController.php
  8. 9 7
      app/Http/Controllers/TestController.php
  9. 25 18
      app/Http/Controllers/WaybillsController.php
  10. 1 1
      app/ProcessesContent.php
  11. 7 11
      app/User.php
  12. 1 1
      database/migrations/2020_05_14_091440_add_personnel_authority.php
  13. 1 1
      database/migrations/2020_06_22_145927_change_processes_contents_add_column_is_full.php
  14. 2 2
      database/migrations/2020_06_24_145928_add_storage_public_link.php
  15. 1 1
      database/migrations/2020_06_28_162934_add_authorrities_personal_duty_check_type.php
  16. 57 0
      database/migrations/2020_06_30_111337_change_auth_hr_verifies.php
  17. 33 0
      database/migrations/2020_06_30_133655_change_processes_contents_column_type.php
  18. BIN
      public/images/QRCodeIMG/1.png
  19. BIN
      public/images/QRCodeIMG/2.png
  20. 579 308
      public/js/app.js
  21. 5 0
      resources/js/trix.js
  22. 1 1
      resources/sass/layout.scss
  23. 373 0
      resources/sass/trix.css
  24. 45 17
      resources/views/auth/login.blade.php
  25. 1 1
      resources/views/layouts/app.blade.php
  26. 2 2
      resources/views/maintenance/city/edit.blade.php
  27. 7 3
      resources/views/maintenance/role/create.blade.php
  28. 25 6
      resources/views/maintenance/role/edit.blade.php
  29. 2 1
      resources/views/maintenance/tutorial/create.blade.php
  30. 2 1
      resources/views/maintenance/tutorial/edit.blade.php
  31. 179 108
      resources/views/maintenance/user/create.blade.php
  32. 40 8
      resources/views/maintenance/user/edit.blade.php
  33. 1 1
      resources/views/personnel/checking-in/QRcode.blade.php
  34. 7 5
      resources/views/personnel/checking-in/clockAudit.blade.php
  35. 1 1
      resources/views/personnel/menu.blade.php
  36. 53 42
      resources/views/process/create.blade.php
  37. 68 56
      resources/views/process/edit.blade.php
  38. 106 97
      resources/views/process/index.blade.php
  39. 33 3
      resources/views/rejected/create.blade.php
  40. 27 16
      resources/views/waybill/edit.blade.php
  41. 1 3
      resources/views/waybill/index.blade.php
  42. 1 0
      routes/apiLocal.php
  43. 2 1
      routes/web.php
  44. 3 1
      webpack.mix.js
  45. 655 437
      yarn.lock

+ 2 - 0
.gitignore

@@ -22,3 +22,5 @@ yarn-error.log
 /.idea/
 /.env.example
 /.gitignore
+/public/icon/img404-thumbnail.jpg
+/public/phpMyAdmin4.8.5/

+ 1 - 1
app/Exceptions/Handler.php

@@ -55,7 +55,7 @@ class Handler extends ExceptionHandler
      */
     public function render($request, Throwable $exception)
     {
-        if ($exception instanceof HttpException) {
+        if (method_exists($exception,'getStatusCode')) {
             $code = $exception->getStatusCode();
             Controller::logS('exception',$code,$exception->getTraceAsString().'|| ||'.json_encode($request));
             switch ($code){

+ 25 - 3
app/Http/Controllers/Auth/LoginController.php

@@ -11,6 +11,7 @@ use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Facades\Validator;
 use Illuminate\Validation\ValidationException;
 
 class LoginController extends Controller
@@ -42,7 +43,7 @@ class LoginController extends Controller
      */
     public function __construct()
     {
-        $this->middleware('guest')->except('logout');
+//        $this->middleware('guest')->except('logout');
     }
     public function username()
     {
@@ -53,29 +54,50 @@ class LoginController extends Controller
      * Handle a login request to the application.
      *
      * @param Request $request
-     * @return void
+     * @return array|Response|void
      *
      * @throws ValidationException
      */
     public function login(Request $request)
     {
+        $rule = [
+            $this->username() => 'required|string',
+            'password' => 'required|string',
+        ];
+        if($request['is_json']){
+            $errors=Validator::make($request->all(),$rule)->errors();
+            if($errors->count()>0){
+                return ['success'=>false,'errors'=>$errors];
+            }
+        }else{
+            $request->validate($rule);
+        }
 
         if (method_exists($this, 'hasTooManyLoginAttempts') &&
             $this->hasTooManyLoginAttempts($request)) {
             $this->fireLockoutEvent($request);
 
+            if($request['is_json']){
+                return ['success'=>false,'message'=>'登录请求过于频繁'];
+            }
             return $this->sendLockoutResponse($request);
         }
 
         if ($this->attemptLogin($request)) {
             if(env('DB_USERNAME')!='developer')
                 $this->log(__METHOD__,__FUNCTION__,'',Auth::user()['id']);
-            return $this->sendLoginResponse($request);
+            if($request['is_json']){
+                return ['success'=>true,'url'=>url($this->redirectTo)];
+            }
+            return $this->sendLoginResponse($request)->header('Cache-Control','no-store');
         }
 
         $this->incrementLoginAttempts($request);
         if(env('DB_USERNAME')!='developer')
             $this->log(__METHOD__,__FUNCTION__,'',Auth::user()['id']);
+        if($request['is_json']){
+            return ['success'=>false,'errors'=>['name'=>['登录信息验证失败']]];
+        }
         return $this->sendFailedLoginResponse($request);
     }
 }

+ 9 - 9
app/Http/Controllers/PersonnelController.php

@@ -64,7 +64,7 @@ class PersonnelController extends Controller
 
     //打卡审核
     public function storeClockAudit(Request $request){
-        if(!Gate::allows('人事管理-打卡审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
+        if(!Gate::allows('人事管理-门卫审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"];  }
         $id=$request->input('id');
         $type=$request->input('type');
         $userDutyCheck=UserDutyCheck::find($id);
@@ -153,6 +153,7 @@ class PersonnelController extends Controller
                 $processDailyParticipant=$processController->countParticipantManHour($processDailyParticipant,$processDailyParticipant->processDaily->date);
             }
         }
+        // 前往任务审核
         return view('personnel/checking-in/missionAudit',['processDailyParticipants'=>$processDailyParticipants,'request'=>$request->input()]);
     }
 
@@ -161,18 +162,17 @@ class PersonnelController extends Controller
         if(!Gate::allows('人事管理')){ return redirect(url('/'));  }
         $user=Auth::user();
         if (!$user)return redirect('/');
-        $result=$user->getPermittingWorkgroupIdsAttribute();
-        $userWorkgroupIds=$result['workgroupIds'];
-        $users=User::whereHas("userWorkgroups",function (Builder $query)use(&$userWorkgroupIds){
-            $query->whereIn("id",$userWorkgroupIds);
-        })->get();
+        $userWorkgroupIds=$user->getPermittingWorkgroupIds();
+//        $users=User::whereHas("userWorkgroups",function (Builder $query)use(&$userWorkgroupIds){
+//            $query->whereIn("id",$userWorkgroupIds);
+//        })->get();
         $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
         if($permittingWorkgroups->isEmpty())$permittingWorkgroups="\'\'";
 
-        $user_ids=array_column($users->toArray(),'id');
+//        $user_ids=array_column($users->toArray(),'id');
         $dateNow=Carbon::now()->addDays(1)->format('Y-m-d');
         $beforeYesterdayDate=Carbon::now()->addDays(-2)->format('Y-m-d');
-        $userDutyChecks=UserDutyCheck::with(['userWorkgroup','userLabor.laborCompany','userDetail'])->whereIn("user_id",$user_ids)
+        $userDutyChecks=UserDutyCheck::with(['userWorkgroup','userLabor.laborCompany','userDetail'])->whereIn("workgroup_id",$userWorkgroupIds)
             ->whereBetween('checked_at',[$beforeYesterdayDate,$dateNow])->orderBy('checked_at','DESC')->get();
         $laravelEchoPrefix = config('database.redis.options.prefix');
         return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
@@ -237,7 +237,7 @@ class PersonnelController extends Controller
     }
     //打卡审核类型
     public function updateDutyCheckType(Request $request){
-        if(!Gate::allows('人事管理-打卡审核类型')){return ['success'=>'false','fail_info'=>'没有权限'];}
+        if(!Gate::allows('人事管理-审核类型')){return ['success'=>'false','fail_info'=>'没有权限'];}
         $userDutyCheckId=$request->input('id');
         $userDutyCheckType=$request->input('type');
         if (is_null($userDutyCheckId) or is_null($userDutyCheckType)){

+ 41 - 18
app/Http/Controllers/ProcessController.php

@@ -244,13 +244,16 @@ class ProcessController extends Controller
         $process=Process::select('id','status','amount')->find($id);
         $amount=$process->amount;
         $today=Carbon::now()->format('Y-m-d');
-        $processDaily=new ProcessDaily([
-            'process_id'=>$id,
-            'date'=>$today,
-            'output'=>0,
-            'remain'=>$amount,
-        ]);
-        $processDaily->save();
+        $processDaily=ProcessDaily::where('date',$today)->where('process_id',$id)->first();
+        if (!$processDaily){
+            $processDaily=new ProcessDaily([
+                'process_id'=>$id,
+                'date'=>$today,
+                'output'=>0,
+                'remain'=>$amount,
+            ]);
+            $processDaily->save();
+        }
         $process->status="待加工";
         $process->update();
         $this->log(__METHOD__,"接单二次加工单_".__FUNCTION__,json_encode($process),Auth::user()['id']);
@@ -548,7 +551,7 @@ class ProcessController extends Controller
         $process->save();
         $processContents=[];
         foreach ($request->input('processContents') as $processContent){
-            $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'].'_'.$processContent['is_full'];
+            $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'].'_'.$processContent['type'];
             array_push($processContents,$wmsCode_commoditySku);
         }
         $removeDuplicateProcessContents=array_unique($processContents);
@@ -564,7 +567,7 @@ class ProcessController extends Controller
                     'wms_code'=>$processContent['wms_code'],
                     'amount'=>$processContent['amount'],
                 ]);
-                if ($processContent['is_full'])$processContentOne->is_full='Y';
+                if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
                 $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
             }
@@ -629,16 +632,19 @@ class ProcessController extends Controller
         }
         if (count($errors)>0)return ['error'=>$errors];
         $process=Process::find($id);
-        $process->owner_id=$request->input('owner_id');
-        $process->process_method_id=$request->input('process_method_id');
-        $process->unit_price=$request->input('unit_price');
-        $process->remark=$request->input('remark');
-        $process->amount=$request->input('amount');
-        $process->update();
+        if (!$request->is_hide){
+            $process->owner_id=$request->input('owner_id');
+            $process->process_method_id=$request->input('process_method_id');
+            $process->unit_price=$request->input('unit_price');
+            $process->remark=$request->input('remark');
+            $process->amount=$request->input('amount');
+            if ($process->status=='驳回')$process->status='待加工';
+            $process->update();
+        }
         $this->log(__METHOD__,"编辑二次加工单".__FUNCTION__,json_encode($process),Auth::user()['id']);
         $processContents=[];
         foreach ($request->input('processContents') as $processContent){
-            $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'];
+            $wmsCode_commoditySku=$processContent['wms_code'].'_'.$processContent['commodity_sku'].'_'.$processContent['type'];
             array_push($processContents,$wmsCode_commoditySku);
         }
         $removeDuplicateProcessContents=array_unique($processContents);
@@ -655,10 +661,9 @@ class ProcessController extends Controller
                     'wms_code'=>$processContent['wms_code'],
                     'amount'=>$processContent['amount'],
                 ]);
-                if ($processContent['is_full'])$processContentOne->is_full='Y';
+                if ($processContent['type'])$processContentOne->type='成品单';
                 $processContentOne->save();
                 $this->log(__METHOD__,"录入二次加工单内容单".__FUNCTION__,json_encode($processContentOne),Auth::user()['id']);
-
             }
         }
         return;
@@ -672,6 +677,24 @@ class ProcessController extends Controller
         return ['success'=>true];
     }
 
+    //回滚二次加工单状态
+    function rollback(Request $request){
+        if (!$request->id)return ['success'=>false];
+        $process=Process::find($request->id);
+        switch ($process->status){
+            case '待加工':
+                $process->status='待接单';break;
+            case '驳回':
+                $process->status='待接单';break;
+            case '加工中':
+                $process->status='待接单';break;
+            case '待验收':
+                $process->status='加工中';break;
+        }
+        $process->save();
+        return ['success'=>true,'data'=>$process->status];
+    }
+
     /**
      * Remove the specified resource from storage.
      *

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

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Events\InformWMSReceivedEvent;
 use App\Http\Controllers\Api\thirdPart\flux\ReceiveController;
 use App\Logistic;
+use App\OracleDOCOrderHeader;
 use App\Owner;
 use App\QualityLabel;
 use App\Rejected;
@@ -260,4 +261,10 @@ class RejectedBillController extends Controller
         if(!$bill)return ['success'=>'true','result'=>'false'];
         return ['success'=>'true','result'=>'true'];
     }
+
+    function seekOrder(Request $request){
+        if (!$request->soreference5)return ['success'=>false];
+        $order=OracleDOCOrderHeader::select('soreference1','customerid','c_contact','c_tel2','carrierid')->where('soreference5',$request->soreference5)->first();
+        if ($order)return ['success'=>true,'data'=>$order];
+    }
 }

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

@@ -34,7 +34,7 @@ class RejectedController extends Controller
     /**
      * Display a listing of the resource.
      *
-     * @return Factory|View|RedirectResponse
+     * @return \Illuminate\Contracts\Foundation\Application|Factory|View
      */
     public function index(Request $request)
     {
@@ -49,6 +49,7 @@ class RejectedController extends Controller
         $rejectedBills=$rejectedQuery->paginate($paginate, ['*'], 'page', $page);
         $owners = Owner::filterAuthorities()->get();
         $qualityLabels = QualityLabel::all();
+
         return view('rejected.search.general',compact('rejectedBills','owners',
             'paginateParams','qualityLabels'));
     }

+ 9 - 7
app/Http/Controllers/TestController.php

@@ -102,6 +102,13 @@ class TestController extends Controller
 
     }
 
+    function t1(Request $request)
+    {
+        $test=new TestController();
+        dump(method_exists($test,'t1'));
+    }
+
+
     function tj(Request $request)
     {
         $waybills = Waybill::where('created_at', 'like', '%2020-05-25%')->orWhere('created_at', 'like', '%2020-05-30%')->get();
@@ -198,12 +205,7 @@ class TestController extends Controller
     }
     /*1*/
     function test(){
-        $a=Unit::all();
-        dd($a);
-        $a=new Unit([
-            "created_at"=>date('Y-m-d H:i:s')
-        ]);
-        $a->name='58448484';
+
     }
 
-}
+}

+ 25 - 18
app/Http/Controllers/WaybillsController.php

@@ -105,18 +105,19 @@ class WaybillsController extends Controller
     {
         if(!Gate::allows('运输管理-查询')){ return redirect(url('/'));  }
         $data=$request->input();
+        $carries = Carrier::get();
+        $owners = Owner::filterAuthorities()->get();
+        $ownerIds = $owners->map(function ($owner){
+            return $owner['id'];
+        })->all();
+        $waybills = $this->getWaybills();
+        $waybills=$waybills->whereIn('owner_id',$ownerIds);
         if ($data != null ) {
-            $waybills = $this->getWaybills();
             $waybills=$this->conditionQuery($request,$waybills);
-            $carries = Carrier::get();
-            $owners = Owner::filterAuthorities()->get();
-            return view('waybill.index', ['waybills' => $waybills, 'carriers' => $carries, 'owners' => $owners,'filterData'=>$data,'uriType'=>'']);
         } else {
-            $waybills = $this->getWaybills()->paginate(50);
-            $carries = Carrier::get();
-            $owners = Owner::filterAuthorities()->get();
-            return view('waybill.index', ['waybills' => $waybills, 'carriers' => $carries, 'owners' => $owners,'filterData'=>$data,'uriType'=>'']);
+            $waybills = $waybills->paginate(50);
         }
+        return view('waybill.index', ['waybills' => $waybills, 'carriers' => $carries, 'owners' => $owners,'filterData'=>$data,'uriType'=>'']);
     }
 
     public function indexZF(Request $request){
@@ -230,16 +231,16 @@ class WaybillsController extends Controller
         $waybill=Waybill::find($id);
 
         if (!$waybill['warehouse_weight']&&$waybill['warehouse_weight_unit_id']){
-                    unset($waybill['warehouse_weight_unit_id']);
+            unset($waybill['warehouse_weight_unit_id']);
         }
         if (!$waybill['warehouse_weight_other']&&$waybill['warehouse_weight_unit_id_other']){
-                    unset($waybill['warehouse_weight_unit_id_other']);
+            unset($waybill['warehouse_weight_unit_id_other']);
         }
         if (!$waybill['carrier_weight']&&$waybill['carrier_weight_unit_id']){
-                    unset($waybill['carrier_weight_unit_id']);
+            unset($waybill['carrier_weight_unit_id']);
         }
         if (!$waybill['carrier_weight_other']&&$waybill['carrier_weight_unit_id_other']){
-                    unset($waybill['carrier_weight_unit_id_other']);
+            unset($waybill['carrier_weight_unit_id_other']);
         }
         $this->validatorWaybillDispatch($request,$id)->validate();
 
@@ -600,7 +601,7 @@ class WaybillsController extends Controller
         if ($result){
             $img=Image::make($bulkyName);
             if ($img->height() > $img->width())
-            $img->heighten(250)->save($commonName);
+                $img->heighten(250)->save($commonName);
             else $img->widen(250)->save($commonName);
             $img->heighten(28)->save($thumbnailName);
             $uploadFile=new UploadFile([
@@ -610,7 +611,7 @@ class WaybillsController extends Controller
                 "type"=>$fileExtension,
             ]);
             if ($uploadFile->save())
-            $this->log(__METHOD__,'图片上传',json_encode($request),Auth::user()['id']);
+                $this->log(__METHOD__,'图片上传',json_encode($request),Auth::user()['id']);
             $uploadFile->url=asset('/storage'.$uploadFile->url);
             return ['success'=>true,'data'=>$uploadFile];
         }
@@ -883,12 +884,13 @@ class WaybillsController extends Controller
     protected function validatorWaybillDispatch(Request $request,$id){
         if ($request->input('type')=='直发车'){
             $validator=Validator::make($request->input(),[
+                'carrier_id'=>'required|integer',
                 'carrier_bill'=>"nullable|max:50|unique:waybills,carrier_bill,$id",
-               // 'fee'=>'required|min:0|numeric|max:999999',
+                'fee'=>'nullable|min:0|numeric|max:999999',
                 'other_fee'=>'nullable|min:0|numeric|max:999999',
                 'charge'=>'nullable|min:0|numeric|max:999999',
-                'mileage'=>'nullable|numeric',
-                'amount'=>'nullable|numeric',
+                'mileage'=>'nullable|numeric|min:0',
+                'amount'=>'nullable|numeric|min:0',
                 'amount_unit_id'=>'required',
             ],[
                 'required'=>':attribute 为必填项',
@@ -898,8 +900,9 @@ class WaybillsController extends Controller
                 'numeric'=>':attribute 应为数字',
                 'unique'=>':attribute 已存在',
             ],[
+                'carrier_id'=>'承运商',
                 'carrier_bill'=>'承运商单号',
-               //'fee'=>'运费',
+                'fee'=>'运费',
                 'other_fee'=>'其他费用',
                 'charge'=>'收费',
                 'mileage'=>'里程数',
@@ -930,6 +933,8 @@ class WaybillsController extends Controller
             'carrier_weight_unit_id'=>'required_with:carrier_weight',
             'carrier_weight_other'=>'nullable|min:0|numeric|max:999999',
             'carrier_weight_unit_id_other'=>'required_with:carrier_weight_other',
+            'amount'=>'nullable|min:0|numeric|max:999999',
+            'mileage'=>'nullable|min:0|numeric|max:999999',
         ],[
             'required'=>':attribute 为必填项',
             'alpha_num'=>':attribute 应为字母或数字',
@@ -954,6 +959,8 @@ class WaybillsController extends Controller
             'carrier_weight_other'=>'承运商计数二',
             'warehouse_weight_unit_id_other'=>'仓库技数单位二',
             'carrier_weight_unit_id_other'=>'承运商计数单位二',
+            'amount'=>'计数',
+            'mileage'=>'里程数',
         ]);
         return $validator;
     }

+ 1 - 1
app/ProcessesContent.php

@@ -9,7 +9,7 @@ class ProcessesContent extends Model
 {
     use ModelTimeFormat;
     protected $fillable=[
-        'process_id','bill_type','commodity_id','wms_code','amount','is_full'
+        'process_id','bill_type','commodity_id','wms_code','amount','type'
     ];
     protected $appends=[
         'commodity_name',

+ 7 - 11
app/User.php

@@ -119,22 +119,18 @@ class User extends Authenticatable
         });
         return array_unique($ownerIds);
     }
-    function getPermittingWorkgroupIdsAttribute(){
+    function getPermittingWorkgroupIds(){
         $workgroupIds=[];
-        $response=[];
-        if ($this->isSuperAdmin()||Gate::allows('人事管理-打卡审核')){
+        if ($this->isSuperAdmin()){
             $workgroups=UserWorkgroup::all();
             $workgroups->each(function (UserWorkgroup $workgroup)use(&$workgroupIds){
                 array_push($workgroupIds,$workgroup['id']);
             });
-            if ($this->isSuperAdmin()){$response['workgroupSign']=true;}
-            else $response['workgroupSign']=false;
-            $response['workgroupIds']=$workgroupIds;
-            return $response;
+        }else{
+            $this->authorities()->each(function(Authority $authority)use(&$workgroupIds){
+                if($authority->type=="工作组"){array_push($workgroupIds,$authority->relevance);}
+            });
         }
-        $this->authorities()->each(function(Authority $authority)use(&$workgroupIds){
-            if($authority->type=="工作组"){array_push($workgroupIds,$authority->relevance);}
-        });
-        return ["workgroupIds"=>$workgroupIds,"workgroupSign"=>true];
+        return $workgroupIds;
     }
 }

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

@@ -14,7 +14,7 @@ class AddPersonnelAuthority extends Migration
 
     protected $authNames=[
         '人事管理',
-        '人事管理-打卡审核',
+        '人事管理-门卫审核',
         '人事管理-任务审核',
         '人事管理-录入补卡',
         '人事管理-打卡',

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

@@ -26,7 +26,7 @@ class ChangeProcessesContentsAddColumnIsFull extends Migration
     public function down()
     {
         Schema::table('processes_contents',function (Blueprint $table) {
-            $table->dropColumn('is_full');
+            $table->dropColumn('type');
         });
     }
 }

+ 2 - 2
database/migrations/2020_06_24_145928_add_storage_public_link.php

@@ -15,8 +15,8 @@ class AddStoragePublicLink extends Migration
     {
         exec('php artisan storage:link');
         $path_str = substr(app_path(),0,strripos(app_path(), DIRECTORY_SEPARATOR));
-        exec('mkdir '.$path_str.DIRECTORY_SEPARATOR.'storage\app\public\files');
-        exec('mkdir ./storage/app/public/files');
+        exec('mkdir '.$path_str.DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'public'.DIRECTORY_SEPARATOR.'files');
+//        exec('mkdir ./storage/app/public/files');
     }
 
     /**

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

@@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Schema;
 class AddAuthorritiesPersonalDutyCheckType extends Migration
 {
     protected $authNames=[
-       '人事管理-打卡审核类型',
+       '人事管理-审核类型',
     ];
 
     /**

+ 57 - 0
database/migrations/2020_06_30_111337_change_auth_hr_verifies.php

@@ -0,0 +1,57 @@
+<?php
+
+use App\Authority;
+use App\Unit;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeAuthHrVerifies extends Migration
+{
+    protected $addNames=[
+        '人事管理-组长审核',
+    ];
+    protected $changeNames=[
+        ['人事管理-审核','人事管理-门卫审核'],
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Authority::where('name','人事管理-门卫审核')->first();
+        foreach ($this->addNames as $namePack){
+            if(!Authority::where('name',$namePack)->first())(new Authority(['name'=>$namePack]))->save();
+        }
+        //修改或没有则添加
+        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->addNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+        //改回旧的
+        foreach ($this->changeNames as $namePack){
+            $authority=Authority::where('name',$namePack[1])->first();
+            $authority['name']=$namePack[0];
+            $authority->save();
+        }
+    }
+}

+ 33 - 0
database/migrations/2020_06_30_133655_change_processes_contents_column_type.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeProcessesContentsColumnType extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('processes_contents',function (Blueprint $table){
+            $table->dropColumn('is_full');
+            $table->enum('type',['原料单','成品单'])->default('原料单')->comment('单据类型');
+        });
+    }
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('processes_contents',function (Blueprint $table){
+            $table->dropColumn('type');
+            $table->string('is_full',2)->default('N')->comment('是否成品');
+        });
+    }
+}

BIN
public/images/QRCodeIMG/1.png


BIN
public/images/QRCodeIMG/2.png


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 579 - 308
public/js/app.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 5 - 0
resources/js/trix.js


+ 1 - 1
resources/sass/layout.scss

@@ -27,7 +27,7 @@
     }
 }
 
-table.waybill-table{
+table{
     th {
         padding-bottom: 0;
         &.table-header-layer-1{

+ 373 - 0
resources/sass/trix.css

@@ -0,0 +1,373 @@
+@charset "UTF-8";
+/*
+Trix 1.2.0
+Copyright © 2019 Basecamp, LLC
+http://trix-editor.org/*/
+trix-editor {
+  border: 1px solid #bbb;
+  border-radius: 3px;
+  margin: 0;
+  padding: 0.4em 0.6em;
+  min-height: 5em;
+  outline: none; }
+trix-toolbar * {
+  box-sizing: border-box; }
+trix-toolbar .trix-button-row {
+  display: flex;
+  flex-wrap: nowrap;
+  justify-content: space-between; }
+trix-toolbar .trix-button-group {
+  display: flex;
+  margin-bottom: 10px;
+  border: 1px solid #bbb;
+  border-top-color: #ccc;
+  border-bottom-color: #888;
+  border-radius: 3px; }
+  trix-toolbar .trix-button-group:not(:first-child) {
+    margin-left: 1.5vw; }
+    @media (max-device-width: 768px) {
+      trix-toolbar .trix-button-group:not(:first-child) {
+        margin-left: 0; } }
+trix-toolbar .trix-button-group-spacer {
+  flex-grow: 1; }
+  @media (max-device-width: 768px) {
+    trix-toolbar .trix-button-group-spacer {
+      display: none; } }
+trix-toolbar .trix-button {
+  position: relative;
+  float: left;
+  color: rgba(0, 0, 0, 0.6);
+  font-size: 0.75em;
+  font-weight: 600;
+  white-space: nowrap;
+  padding: 0 0.5em;
+  margin: 0;
+  outline: none;
+  border: none;
+  border-bottom: 1px solid #ddd;
+  border-radius: 0;
+  background: transparent; }
+  trix-toolbar .trix-button:not(:first-child) {
+    border-left: 1px solid #ccc; }
+  trix-toolbar .trix-button.trix-active {
+    background: #cbeefa;
+    color: black; }
+  trix-toolbar .trix-button:not(:disabled) {
+    cursor: pointer; }
+  trix-toolbar .trix-button:disabled {
+    color: rgba(0, 0, 0, 0.125); }
+  @media (max-device-width: 768px) {
+    trix-toolbar .trix-button {
+      letter-spacing: -0.01em;
+      padding: 0 0.3em; } }
+trix-toolbar .trix-button--icon {
+  font-size: inherit;
+  width: 2.6em;
+  height: 1.6em;
+  max-width: calc(0.8em + 4vw);
+  text-indent: -9999px; }
+  @media (max-device-width: 768px) {
+    trix-toolbar .trix-button--icon {
+      height: 2em;
+      max-width: calc(0.8em + 3.5vw); } }
+  trix-toolbar .trix-button--icon::before {
+    display: inline-block;
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    opacity: 0.6;
+    content: "";
+    background-position: center;
+    background-repeat: no-repeat;
+    background-size: contain; }
+    @media (max-device-width: 768px) {
+      trix-toolbar .trix-button--icon::before {
+        right: 6%;
+        left: 6%; } }
+  trix-toolbar .trix-button--icon.trix-active::before {
+    opacity: 1; }
+  trix-toolbar .trix-button--icon:disabled::before {
+    opacity: 0.125; }
+trix-toolbar .trix-button--icon-attach::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M16.5%206v11.5a4%204%200%201%201-8%200V5a2.5%202.5%200%200%201%205%200v10.5a1%201%200%201%201-2%200V6H10v9.5a2.5%202.5%200%200%200%205%200V5a4%204%200%201%200-8%200v12.5a5.5%205.5%200%200%200%2011%200V6h-1.5z%22%2F%3E%3C%2Fsvg%3E);
+  top: 8%;
+  bottom: 4%; }
+trix-toolbar .trix-button--icon-bold::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M15.6%2011.8c1-.7%201.6-1.8%201.6-2.8a4%204%200%200%200-4-4H7v14h7c2.1%200%203.7-1.7%203.7-3.8%200-1.5-.8-2.8-2.1-3.4zM10%207.5h3a1.5%201.5%200%201%201%200%203h-3v-3zm3.5%209H10v-3h3.5a1.5%201.5%200%201%201%200%203z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-italic::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M10%205v3h2.2l-3.4%208H6v3h8v-3h-2.2l3.4-8H18V5h-8z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-link::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M9.88%2013.7a4.3%204.3%200%200%201%200-6.07l3.37-3.37a4.26%204.26%200%200%201%206.07%200%204.3%204.3%200%200%201%200%206.06l-1.96%201.72a.91.91%200%201%201-1.3-1.3l1.97-1.71a2.46%202.46%200%200%200-3.48-3.48l-3.38%203.37a2.46%202.46%200%200%200%200%203.48.91.91%200%201%201-1.3%201.3z%22%2F%3E%3Cpath%20d%3D%22M4.25%2019.46a4.3%204.3%200%200%201%200-6.07l1.93-1.9a.91.91%200%201%201%201.3%201.3l-1.93%201.9a2.46%202.46%200%200%200%203.48%203.48l3.37-3.38c.96-.96.96-2.52%200-3.48a.91.91%200%201%201%201.3-1.3%204.3%204.3%200%200%201%200%206.07l-3.38%203.38a4.26%204.26%200%200%201-6.07%200z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-strike::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.73%2014l.28.14c.26.15.45.3.57.44.12.14.18.3.18.5%200%20.3-.15.56-.44.75-.3.2-.76.3-1.39.3A13.52%2013.52%200%200%201%207%2014.95v3.37a10.64%2010.64%200%200%200%204.84.88c1.26%200%202.35-.19%203.28-.56.93-.37%201.64-.9%202.14-1.57s.74-1.45.74-2.32c0-.26-.02-.51-.06-.75h-5.21zm-5.5-4c-.08-.34-.12-.7-.12-1.1%200-1.29.52-2.3%201.58-3.02%201.05-.72%202.5-1.08%204.34-1.08%201.62%200%203.28.34%204.97%201l-1.3%202.93c-1.47-.6-2.73-.9-3.8-.9-.55%200-.96.08-1.2.26-.26.17-.38.38-.38.64%200%20.27.16.52.48.74.17.12.53.3%201.05.53H7.23zM3%2013h18v-2H3v2z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-quote::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M6%2017h3l2-4V7H5v6h3zm8%200h3l2-4V7h-6v6h3z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-heading-1::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12%209v3H9v7H6v-7H3V9h9zM8%204h14v3h-6v12h-3V7H8V4z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-code::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.2%2012L15%2015.2l1.4%201.4L21%2012l-4.6-4.6L15%208.8l3.2%203.2zM5.8%2012L9%208.8%207.6%207.4%203%2012l4.6%204.6L9%2015.2%205.8%2012z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-bullet-list::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%204a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm4%203h14v-2H8v2zm0-6h14v-2H8v2zm0-8v2h14V5H8z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-number-list::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M2%2017h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1%203h1.8L2%2013.1v.9h3v-1H3.2L5%2010.9V10H2v1zm5-6v2h14V5H7zm0%2014h14v-2H7v2zm0-6h14v-2H7v2z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-undo::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.5%208c-2.6%200-5%201-6.9%202.6L2%207v9h9l-3.6-3.6A8%208%200%200%201%2020%2016l2.4-.8a10.5%2010.5%200%200%200-10-7.2z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-redo::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.4%2010.6a10.5%2010.5%200%200%200-16.9%204.6L4%2016a8%208%200%200%201%2012.7-3.6L13%2016h9V7l-3.6%203.6z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-decrease-nesting-level::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-8.3-.3l2.8%202.9L6%2014.2%204%2012l2-2-1.4-1.5L1%2012l.7.7zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-button--icon-increase-nesting-level::before {
+  background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-6.9-1L1%2014.2l1.4%201.4L6%2012l-.7-.7-2.8-2.8L1%209.9%203.1%2012zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E); }
+trix-toolbar .trix-dialogs {
+  position: relative; }
+trix-toolbar .trix-dialog {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  font-size: 0.75em;
+  padding: 15px 10px;
+  background: #fff;
+  box-shadow: 0 0.3em 1em #ccc;
+  border-top: 2px solid #888;
+  border-radius: 5px;
+  z-index: 5; }
+trix-toolbar .trix-input--dialog {
+  font-size: inherit;
+  font-weight: normal;
+  padding: 0.5em 0.8em;
+  margin: 0 10px 0 0;
+  border-radius: 3px;
+  border: 1px solid #bbb;
+  background-color: #fff;
+  box-shadow: none;
+  outline: none;
+  -webkit-appearance: none;
+  -moz-appearance: none; }
+  trix-toolbar .trix-input--dialog.validate:invalid {
+    box-shadow: #F00 0px 0px 1.5px 1px; }
+trix-toolbar .trix-button--dialog {
+  font-size: inherit;
+  padding: 0.5em;
+  border-bottom: none; }
+trix-toolbar .trix-dialog--link {
+  max-width: 600px; }
+trix-toolbar .trix-dialog__link-fields {
+  display: flex;
+  align-items: baseline; }
+  trix-toolbar .trix-dialog__link-fields .trix-input {
+    flex: 1; }
+  trix-toolbar .trix-dialog__link-fields .trix-button-group {
+    flex: 0 0 content;
+    margin: 0; }
+trix-editor [data-trix-mutable]:not(.attachment__caption-editor) {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none; }
+
+trix-editor [data-trix-mutable]::-moz-selection,
+trix-editor [data-trix-cursor-target]::-moz-selection, trix-editor [data-trix-mutable] ::-moz-selection {
+  background: none; }
+trix-editor [data-trix-mutable]::selection,
+trix-editor [data-trix-cursor-target]::selection, trix-editor [data-trix-mutable] ::selection {
+  background: none; }
+
+trix-editor [data-trix-mutable].attachment__caption-editor:focus::-moz-selection {
+  background: highlight; }
+trix-editor [data-trix-mutable].attachment__caption-editor:focus::selection {
+  background: highlight; }
+
+trix-editor [data-trix-mutable].attachment.attachment--file {
+  box-shadow: 0 0 0 2px highlight;
+  border-color: transparent; }
+trix-editor [data-trix-mutable].attachment img {
+  box-shadow: 0 0 0 2px highlight; }
+trix-editor .attachment {
+  position: relative; }
+  trix-editor .attachment:hover {
+    cursor: default; }
+trix-editor .attachment--preview .attachment__caption:hover {
+  cursor: text; }
+trix-editor .attachment__progress {
+  position: absolute;
+  z-index: 1;
+  height: 20px;
+  top: calc(50% - 10px);
+  left: 5%;
+  width: 90%;
+  opacity: 0.9;
+  transition: opacity 200ms ease-in; }
+  trix-editor .attachment__progress[value="100"] {
+    opacity: 0; }
+trix-editor .attachment__caption-editor {
+  display: inline-block;
+  width: 100%;
+  margin: 0;
+  padding: 0;
+  font-size: inherit;
+  font-family: inherit;
+  line-height: inherit;
+  color: inherit;
+  text-align: center;
+  vertical-align: top;
+  border: none;
+  outline: none;
+  -webkit-appearance: none;
+  -moz-appearance: none; }
+trix-editor .attachment__toolbar {
+  position: absolute;
+  z-index: 1;
+  top: -0.9em;
+  left: 0;
+  width: 100%;
+  text-align: center; }
+trix-editor .trix-button-group {
+  display: inline-flex; }
+trix-editor .trix-button {
+  position: relative;
+  float: left;
+  color: #666;
+  white-space: nowrap;
+  font-size: 80%;
+  padding: 0 0.8em;
+  margin: 0;
+  outline: none;
+  border: none;
+  border-radius: 0;
+  background: transparent; }
+  trix-editor .trix-button:not(:first-child) {
+    border-left: 1px solid #ccc; }
+  trix-editor .trix-button.trix-active {
+    background: #cbeefa; }
+  trix-editor .trix-button:not(:disabled) {
+    cursor: pointer; }
+trix-editor .trix-button--remove {
+  text-indent: -9999px;
+  display: inline-block;
+  padding: 0;
+  outline: none;
+  width: 1.8em;
+  height: 1.8em;
+  line-height: 1.8em;
+  border-radius: 50%;
+  background-color: #fff;
+  border: 2px solid highlight;
+  box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.25); }
+  trix-editor .trix-button--remove::before {
+    display: inline-block;
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    opacity: 0.7;
+    content: "";
+    background-image: url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%206.4L17.6%205%2012%2010.6%206.4%205%205%206.4l5.6%205.6L5%2017.6%206.4%2019l5.6-5.6%205.6%205.6%201.4-1.4-5.6-5.6z%22%2F%3E%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E);
+    background-position: center;
+    background-repeat: no-repeat;
+    background-size: 90%; }
+  trix-editor .trix-button--remove:hover {
+    border-color: #333; }
+    trix-editor .trix-button--remove:hover::before {
+      opacity: 1; }
+trix-editor .attachment__metadata-container {
+  position: relative; }
+trix-editor .attachment__metadata {
+  position: absolute;
+  left: 50%;
+  top: 2em;
+  transform: translate(-50%, 0);
+  max-width: 90%;
+  padding: 0.1em 0.6em;
+  font-size: 0.8em;
+  color: #fff;
+  background-color: rgba(0, 0, 0, 0.7);
+  border-radius: 3px; }
+  trix-editor .attachment__metadata .attachment__name {
+    display: inline-block;
+    max-width: 100%;
+    vertical-align: bottom;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap; }
+  trix-editor .attachment__metadata .attachment__size {
+    margin-left: 0.2em;
+    white-space: nowrap; }
+@charset "UTF-8";
+.trix-content {
+  line-height: 1.5; }
+  .trix-content * {
+    box-sizing: border-box; }
+  .trix-content h1 {
+    font-size: 1.2em;
+    line-height: 1.2;
+    margin: 0; }
+  .trix-content blockquote {
+    margin: 0 0 0 0.3em;
+    padding: 0 0 0 0.6em;
+    border-left: 0.3em solid #ccc; }
+  .trix-content pre {
+    display: inline-block;
+    width: 100%;
+    vertical-align: top;
+    font-family: monospace;
+    font-size: 0.9em;
+    margin: 0;
+    padding: 0.5em;
+    white-space: pre;
+    background-color: #eee;
+    overflow-x: auto; }
+  .trix-content ul, .trix-content ol, .trix-content li {
+    margin: 0;
+    padding: 0; }
+    .trix-content ul li, .trix-content ol li, .trix-content li li {
+      margin-left: 1em; }
+  .trix-content img {
+    max-width: 100%;
+    height: auto; }
+  .trix-content .attachment {
+    display: inline-block;
+    position: relative;
+    max-width: 100%;
+    margin: 0;
+    padding: 0; }
+    .trix-content .attachment a {
+      color: inherit;
+      text-decoration: none; }
+      .trix-content .attachment a:hover, .trix-content .attachment a:visited:hover {
+        color: inherit; }
+  .trix-content .attachment__caption {
+    padding: 0;
+    text-align: center; }
+    .trix-content .attachment__caption .attachment__name + .attachment__size::before {
+      content: ' · '; }
+  .trix-content .attachment--preview {
+    width: 100%;
+    text-align: center; }
+    .trix-content .attachment--preview .attachment__caption {
+      color: #666;
+      font-size: 0.9em;
+      line-height: 1.2; }
+  .trix-content .attachment--file {
+    color: #333;
+    line-height: 1;
+    margin: 0 2px 2px 0;
+    padding: 0.4em 1em;
+    border: 1px solid #bbb;
+    border-radius: 5px; }
+  .trix-content .attachment-gallery {
+    display: flex;
+    flex-wrap: wrap;
+    position: relative;
+    margin: 0;
+    padding: 0; }
+    .trix-content .attachment-gallery .attachment {
+      flex: 1 0 33%;
+      padding: 0 0.5em;
+      max-width: 33%; }
+    .trix-content .attachment-gallery.attachment-gallery--2 .attachment, .trix-content .attachment-gallery.attachment-gallery--4 .attachment {
+      flex-basis: 50%;
+      max-width: 50%; }

+ 45 - 17
resources/views/auth/login.blade.php

@@ -1,7 +1,7 @@
 @extends('layouts.app')
 
 @section('content')
-    <div class="container-fluid">
+    <div class="container-fluid" id="list">
         <div class="row justify-content-center">
             <div class="col-md-12">
                 <div class="card">
@@ -11,34 +11,33 @@
                             <div class="col-md-6 text-md-right">
                                 <img src="{{asset('images/login/bg1.jpg')}}" alt="" class="img-fluid">
                             </div>
-                            <div class="col-md-6"><form method="POST" action="{{ route('login') }}">
+                            <div class="col-md-6"><form method="POST" action="{{ route('login') .'?rand='.microtime(true)}}">
                                     @csrf
-
-                                        <label for="name" class="col-form-label text-md-right">用户名</label>
+                                    <label for="name" class="col-form-label text-md-right">用户名</label>
                                     <div class="form-group row">
 
                                         <div class="col-md-8">
-                                            <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
+                                            <input id="name" type="text" class="form-control" :class="[errors.name?'is-invalid':'']"
+                                                   oninput="setTimeout(function(){vue.errors.name=''},10)"
+                                                   name="name" v-model="inputting.name" required autocomplete="name" autofocus>
 
-                                            @error('name')
-                                            <span class="invalid-feedback" role="alert">
-                                                <strong>{{ $message }}</strong>
+                                            <span class="invalid-feedback d-block" v-if="errors.name">
+                                                <strong v-for="msg in errors.name">@{{ msg }}</strong>
                                             </span>
-                                            @enderror
                                         </div>
                                     </div>
 
-                                        <label for="password" class="col-form-label text-md-right">密码</label>
+                                    <label for="password" class="col-form-label text-md-right">密码</label>
                                     <div class="form-group row">
 
                                         <div class="col-md-8">
-                                            <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
+                                            <input id="password" type="password" class="form-control " :class="[errors.password?'is-invalid':'']"
+                                                   oninput="setTimeout(function(){vue.errors.password=''},10)"
+                                                   v-model="inputting.password" name="password" required autocomplete="current-password">
 
-                                            @error('password')
-                                            <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                                            @enderror
+                                            <span class="invalid-feedback d-block" v-if="errors.password">
+                                                <strong v-for="msg in errors.password">@{{ msg }}</strong>
+                                            </span>
                                         </div>
                                     </div>
 
@@ -56,7 +55,7 @@
 
                                     <div class="form-group row mb-0">
                                         <div class="col-md-8">
-                                            <button type="submit" class="btn btn-primary form-control">
+                                            <button type="button" class="btn btn-primary form-control" onclick="loginSubmit()">
                                                 登录
                                             </button>
 
@@ -76,3 +75,32 @@
         </div>
     </div>
 @endsection
+
+@section('lastScript')
+    <script>
+        let vue=new Vue({
+                el:"#list",
+                data:{
+                    inputting:{name:'',password:'',is_json:true},
+                    errors: {name:'',password:'',},
+                },
+            }
+        )
+        function loginSubmit() {
+            axios.post('{{ route('login') .'?rand='.microtime(true)}}',vue.inputting).then(function (response) {
+                if(response.data.success!==true){
+                    if(response.data.errors){
+                        vue.errors=response.data.errors;
+                        return;
+                    }
+                    if(response.data.message){
+                        tempTip.show(response.data.message)
+                        return;
+                    }
+                }else{
+                    location=response.data.url;
+                }
+            })
+        }
+    </script>
+@endsection

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

@@ -10,7 +10,7 @@
     <title>@yield('title') {{ config('app.name', '宝时WAS') }}</title>
     @yield('head')
     <!-- Styles -->
-    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
+    <link href="{{ asset('css/app200630.css') }}" rel="stylesheet">
 </head>
 <body>
 <div id="app">

+ 2 - 2
resources/views/maintenance/city/edit.blade.php

@@ -19,8 +19,8 @@
                     @method('PUT')
                     <div class="form-group row">
                         <label for="province_id" class="col-2 col-form-label text-right">所属省份</label>
-                        <div class="col-8">
-                            <select name="City[province_id]">
+                        <div class="col-sm-8 col-md-4 col-lg-3 ">
+                            <select name="City[province_id]" class="form-control ">
                                 @foreach($provinces as $province)
                                     @if($city->province_id==$province->id)
                                         <option value="{{$province->id}}" selected>{{$province->name}}</option>

+ 7 - 3
resources/views/maintenance/role/create.blade.php

@@ -30,7 +30,7 @@
                         <label for="authority" class="col-2 col-form-label text-md-right">允许权限</label>
                         <div class="col-8">
                         <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
-                               @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
+                               @input="seekAuthority($event)" title="输入关键词快速定位下拉列表" ></div>
                     </div>
                     <div class="form-group row">
                         <label class="col-2"></label>
@@ -61,7 +61,7 @@
                         <label for="authority" class="col-2 col-form-label text-md-right">禁止权限</label>
                         <div class="col-8">
                             <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
-                                   @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
+                                   @change="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
                     </div>
                     <div class="form-group row">
                         <label class="col-2"></label>
@@ -172,15 +172,19 @@
                 seekAuthority:function (e) {
                     let $val=e.target.value;
                     let authoritiesAll=this.authoritiesAll;
+                    let bool = false;
                     authoritiesAll.every(function (authorityAll) {
                         let name=authorityAll.name;
                         if (name.includes($val)){
                             location.href="#"+authorityAll.name;
+                            bool = true;
                             return false;
                         }
                         return  true;
                     });
-                    $(e.target).focus();
+                    setTimeout(function () {
+                        if(bool){ $(e.target).focus();}
+                    },10)
                 },
             },
         });

+ 25 - 6
resources/views/maintenance/role/edit.blade.php

@@ -44,7 +44,7 @@
                             <input name="authority" hidden   v-model="authorities" >
                             <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
                                 <ul class="list-group" style="width: 100%" onselectstart="return false;">
-                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesAll" v-if="authority.permission=='允许'" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesFilterAll" v-if="authority.permission=='允许'" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
                                          @dblclick="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" :id="authority.name"> @{{ authority.name }} </span></li>
                                 </ul>
                             </div>
@@ -112,7 +112,12 @@
             el:"#editPanel",
             data:{
                 authoritiesAll:[
-                        @foreach( $authoritiesAll as $authority )
+                    @foreach( $authoritiesAll as $authority )
+                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false,permission:'{{$authority->permission}}'},
+                    @endforeach
+                ],
+                authoritiesFilterAll:[
+                    @foreach( $authoritiesAll as $authority )
                     {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false,permission:'{{$authority->permission}}'},
                     @endforeach
                 ],
@@ -193,15 +198,29 @@
                 seekAuthority:function (e) {
                     let $val=e.target.value;
                     let authoritiesAll=this.authoritiesAll;
-                    authoritiesAll.every(function (authorityAll) {
-                        let name=authorityAll.name;
+                    let authoritiesFilterAll = this.authoritiesFilterAll;
+                    let bool = false;
+                    authoritiesAll.every(function (authorities) {
+                        let name=authorities.name;
                         if (name.includes($val)){
-                            location.href="#"+authorityAll.name;
+                            bool = true;
                             return false;
                         }
                         return  true;
                     });
-                    $(e.target).focus();
+                    console.log(bool);
+                    if($val === '' ){
+                        this.authoritiesFilterAll = this.authoritiesAll;
+                    }else if(bool) {
+                        this.authoritiesFilterAll = [];
+                        for (let i = 0; i < authoritiesAll.length; i++) {
+                            let authorities = authoritiesAll[i];
+                            let name = authorities.name;
+                            if (name.includes($val)) {
+                                this.authoritiesFilterAll.push(authorities);
+                            }
+                        }
+                    }
                 },
             },
         });

+ 2 - 1
resources/views/maintenance/tutorial/create.blade.php

@@ -1,7 +1,8 @@
 @extends('layouts.app')
 @section('title')创建教程@endsection
 @section('head')
-    @trixassets
+    <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
+    <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
 @endsection
 @section('content')
     <div id="nav2">

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

@@ -1,7 +1,8 @@
 @extends('layouts.app')
 @section('title')修改教程@endsection
 @section('head')
-    @trixassets
+    <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
+    <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
 @endsection
 @section('content')
     <div id="nav2">

+ 179 - 108
resources/views/maintenance/user/create.blade.php

@@ -23,7 +23,9 @@
                                 <label for="name" class="col-md-3 col-form-label text-md-right">姓名</label>
 
                                 <div class="col-md-7">
-                                    <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
+                                    <input id="name" type="text"
+                                           class="form-control @error('name') is-invalid @enderror" name="name"
+                                           value="{{ old('name') }}" required autocomplete="name" autofocus>
 
                                     @error('name')
                                     <span class="invalid-feedback" role="alert">
@@ -37,7 +39,9 @@
                                 <label for="email" class="col-md-3 col-form-label text-md-right">Email地址</label>
 
                                 <div class="col-md-7">
-                                    <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
+                                    <input id="email" type="email"
+                                           class="form-control @error('email') is-invalid @enderror" name="email"
+                                           value="{{ old('email') }}" required autocomplete="email">
 
                                     @error('email')
                                     <span class="invalid-feedback" role="alert">
@@ -51,7 +55,9 @@
                                 <label for="password" class="col-md-3 col-form-label text-md-right">密码</label>
 
                                 <div class="col-md-7">
-                                    <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
+                                    <input id="password" type="password"
+                                           class="form-control @error('password') is-invalid @enderror" name="password"
+                                           required autocomplete="new-password">
 
                                     @error('password')
                                     <span class="invalid-feedback" role="alert">
@@ -64,7 +70,8 @@
                                 <label for="password-confirm" class="col-md-3 col-form-label text-md-right">重输密码</label>
 
                                 <div class="col-md-7">
-                                    <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
+                                    <input id="password-confirm" type="password" class="form-control"
+                                           name="password_confirmation" required autocomplete="new-password">
                                 </div>
                             </div>
                             <div class="form-group row">
@@ -73,33 +80,42 @@
                                 <div class="col-md-7">
                                     <select class="form-control" name="userWorkgroupID" id="userWorkgroupID">
                                         <option></option>
-                                        <option v-for="userWorkgroup in userWorkgroups" :value="userWorkgroup.id">@{{ userWorkgroup.name }}</option>
+                                        <option v-for="userWorkgroup in userWorkgroups" :value="userWorkgroup.id">@{{
+                                            userWorkgroup.name }}
+                                        </option>
                                     </select>
                                 </div>
                             </div>
                             <div class="form-group row">
                                 <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
                                 <div class="col-md-7">
-                                    <input type="text"  class="form-control tooltipTarget" placeholder="定位角色"
+                                    <input type="text" class="form-control tooltipTarget" placeholder="定位角色"
                                            @input="seekRole($event)" title="输入关键词快速定位"></div>
                             </div>
                             <div class="form-group row">
                                 <label class="col-md-3"></label>
                                 <div class="col-md-4">
-                                    <input name="role" hidden    v-model="roles" >
-                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
-                                        <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
-                                            <li  :data-original-title="role.style ? '双击删除角色' : '双击添加角色'"    v-for="role in rolesAll" :id="role.name"
-                                                 class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
-                                                  @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" > @{{ role.name }}  </span></li>
+                                    <input name="role" hidden v-model="roles">
+                                    <div class="input-group"
+                                         style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
+                                        <ul class="list-group tooltipTarget" style="width: 100%"
+                                            onselectstart="return false;">
+                                            <li :data-original-title="role.style ? '双击删除角色' : '双击添加角色'"
+                                                v-for="role in rolesFilter" :id="role.name"
+                                                class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
+                                                @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span
+                                                    style="cursor: default;"> @{{ role.name }}  </span></li>
                                         </ul>
                                     </div>
                                 </div>
                                 <div class="col-md-3">
-                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
+                                    <div class="input-group"
+                                         style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
                                         <ul class="list-group" style="width: 100%" onselectstart="return false;">
-                                            <li  title="双击删除角色"    v-for="role in rolesList" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
-                                                 @dblclick="selectedRole(role)" ><span style="cursor: default;" > @{{ role.name }}  </span></li>
+                                            <li title="双击删除角色" v-for="role in rolesList" :id="role.name"
+                                                class="list-group-item list-group-item-action pt-0 pb-0"
+                                                @dblclick="selectedRole(role)"><span style="cursor: default;"> @{{ role.name }}  </span>
+                                            </li>
                                         </ul>
                                     </div>
                                 </div>
@@ -107,26 +123,34 @@
                             <div class="form-group row">
                                 <label for="carrier" class="col-md-3 col-form-label text-md-right">可见承运商</label>
                                 <div class="col-md-7">
-                                    <input type="text"  class="form-control tooltipTarget" placeholder="定位承运商"
+                                    <input type="text" class="form-control tooltipTarget" placeholder="定位承运商"
                                            @input="seekCarrier($event)" title="输入关键词快速定位"></div>
                             </div>
                             <div class="form-group row">
                                 <label class="col-md-3"></label>
                                 <div class="col-md-4">
-                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
-                                        <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
-                                            <li  :data-original-title="carrier.style ? '双击删除承运商' : '双击添加承运商'"    v-for="carrier in carriersAll" :id="carrier.name"
-                                                 class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
-                                                 @dblclick="selectedCarrier(carrier)" :class="carrier.style ? 'active' :''"><span style="cursor: default;" > @{{ carrier.name }}  </span></li>
+                                    <div class="input-group"
+                                         style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
+                                        <ul class="list-group tooltipTarget" style="width: 100%"
+                                            onselectstart="return false;">
+                                            <li :data-original-title="carrier.style ? '双击删除承运商' : '双击添加承运商'"
+                                                v-for="carrier in carriersFilter" :id="carrier.name"
+                                                class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
+                                                @dblclick="selectedCarrier(carrier)"
+                                                :class="carrier.style ? 'active' :''"><span style="cursor: default;"> @{{ carrier.name }}  </span>
+                                            </li>
                                         </ul>
                                     </div>
                                 </div>
                                 <div class="col-md-3">
-                                    <input name="carrier" hidden   v-model="carriers" >
-                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
+                                    <input name="carrier" hidden v-model="carriers">
+                                    <div class="input-group"
+                                         style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
                                         <ul class="list-group" style="width: 100%" onselectstart="return false;">
-                                            <li  title="双击删除承运商"    v-for="carrier in carriersList"  class="list-group-item list-group-item-action pt-0 pb-0"
-                                                 @dblclick="selectedCarrier(carrier)" ><span style="cursor: default;" > @{{ carrier.name }}  </span></li>
+                                            <li title="双击删除承运商" v-for="carrier in carriersList"
+                                                class="list-group-item list-group-item-action pt-0 pb-0"
+                                                @dblclick="selectedCarrier(carrier)"><span style="cursor: default;"> @{{ carrier.name }}  </span>
+                                            </li>
                                         </ul>
                                     </div>
                                 </div>
@@ -150,55 +174,73 @@
 
 @section('lastScript')
     <script>
-        let vueList=new Vue({
-            el:"#editPanel",
-            data:{
-                userWorkgroups:[
+        let vueList = new Vue({
+            el: "#editPanel",
+            data: {
+                userWorkgroups: [
                     @foreach($userWorkgroups as $userWorkgroup)
                     {!! $userWorkgroup !!},
                     @endforeach
                 ],
-                rolesAll:[
-                    @foreach( $rolesAll as $role )
-                    {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
+                rolesAll: [
+                        @foreach( $rolesAll as $role )
+                    {
+                        id: '{{$role->id}}', name: '{{$role->name}}', style: false
+                    },
                     @endforeach
                 ],
-                roles:[{{old('role')}}],
-                rolesList:[],
-                carriersAll:[
-                    @foreach($carriers as $carrier)
-                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}',style:false},
+                rolesFilter: [
+                        @foreach( $rolesAll as $role )
+                    {
+                        id: '{{$role->id}}', name: '{{$role->name}}', style: false
+                    },
                     @endforeach
                 ],
-                carriers:[{{old('carrier')}}],
-                carriersList:[],
+                roles: [{{old('role')}}],
+                rolesList: [],
+                carriersAll: [
+                        @foreach($carriers as $carrier)
+                    {
+                        id: '{{$carrier->id}}', name: '{{$carrier->name}}', style: false
+                    },
+                    @endforeach
+                ],
+                carriersFilter: [
+                        @foreach($carriers as $carrier)
+                    {
+                        id: '{{$carrier->id}}', name: '{{$carrier->name}}', style: false
+                    },
+                    @endforeach
+                ],
+                carriers: [{{old('carrier')}}],
+                carriersList: [],
             },
-            mounted:function(){
-                $(".tooltipTarget").tooltip({'trigger':'hover'});
-                if (this.roles.length>0){
-                    let rolesAll=this.rolesAll;
-                    let roles=this.roles;
-                    let rolesList=this.rolesList;
+            mounted: function () {
+                $(".tooltipTarget").tooltip({'trigger': 'hover'});
+                if (this.roles.length > 0) {
+                    let rolesAll = this.rolesAll;
+                    let roles = this.roles;
+                    let rolesList = this.rolesList;
                     for (let i = 0; i < roles.length; i++) {
                         rolesAll.every(function (roleAll) {
                             if (roleAll.id == roles[i]) {
                                 roleAll.style = true;
-                                rolesList.push({'id':roleAll.id,'name':roleAll.name});
+                                rolesList.push({'id': roleAll.id, 'name': roleAll.name});
                                 return false;
                             }
                             return true;
                         });
                     }
                 }
-                if (this.carriers.length>0){
-                    let carriersAll=this.carriersAll;
-                    let carriers=this.carriers;
-                    let carriersList=this.carriersList;
+                if (this.carriers.length > 0) {
+                    let carriersAll = this.carriersAll;
+                    let carriers = this.carriers;
+                    let carriersList = this.carriersList;
                     for (let i = 0; i < carriers.length; i++) {
                         carriersAll.every(function (carrierAll) {
                             if (carrierAll.id == carriers[i]) {
                                 carrierAll.style = true;
-                                carriersList.push({'id':carrierAll.id,'name':carrierAll.name});
+                                carriersList.push({'id': carrierAll.id, 'name': carrierAll.name});
                                 return false;
                             }
                             return true;
@@ -206,16 +248,16 @@
                     }
                 }
             },
-            methods:{
-                selectedCarrier:function (e) {
-                    let carriers=this.carriers;
-                    let carriersAll=this.carriersAll;
-                    let carriersList=this.carriersList;
-                    let isCarrier=true;
-                    if (carriers&&carriersAll) {
+            methods: {
+                selectedCarrier: function (e) {
+                    let carriers = this.carriers;
+                    let carriersAll = this.carriersAll;
+                    let carriersList = this.carriersList;
+                    let isCarrier = true;
+                    if (carriers && carriersAll) {
                         for (let i = 0; i < carriers.length; i++) {
                             if (carriers[i] == e.id) {
-                                carriers.splice(i,1);
+                                carriers.splice(i, 1);
                                 carriersAll.every(function (carrierAll) {
                                     if (carrierAll.id == e.id) {
                                         carrierAll.style = false;
@@ -223,56 +265,68 @@
                                     }
                                     return true;
                                 });
-                                carriersList.every(function (carrier,i) {
-                                    if (carrier.id==e.id){
-                                        carriersList.splice(i,1);
+                                carriersList.every(function (carrier, i) {
+                                    if (carrier.id == e.id) {
+                                        carriersList.splice(i, 1);
                                         return false;
                                     }
                                     return true;
                                 });
-                                isCarrier= false;
+                                isCarrier = false;
                                 break;
                             }
-                            isCarrier= true;
+                            isCarrier = true;
                         }
                     }
-                    if (isCarrier || !carriers){
+                    if (isCarrier || !carriers) {
                         carriers.push(e.id);
                         carriersAll.every(function (carrierAll) {
-                            if (carrierAll.id==e.id){
-                                carrierAll.style=true;
-                                carriersList.push({'id':carrierAll.id,'name':carrierAll.name});
+                            if (carrierAll.id == e.id) {
+                                carrierAll.style = true;
+                                carriersList.push({'id': carrierAll.id, 'name': carrierAll.name});
                                 return false;
                             }
-                            return  true;
+                            return true;
                         });
                     }
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },10)
+                    setTimeout(function () {
+                        $(".tooltipTarget").tooltip({'trigger': 'hover'});
+                    }, 10)
                 },
-                seekCarrier:function (e) {
-                    let $val=e.target.value;
-                    let carriersAll=this.carriersAll;
+                seekCarrier: function (e) {
+                    let $val = e.target.value;
+                    let carriersAll = this.carriersAll;
+                    let bool = false;
                     carriersAll.every(function (carrierAll) {
-                        let name=carrierAll.name;
-                        if (name.includes($val)){
-                            location.href="#"+carrierAll.name;
+                        let name = carrierAll.name;
+                        if (name.includes($val)) {
+                            bool = true;
                             return false;
                         }
-                        return  true;
+                        return true;
                     });
-                    $(e.target).focus();
+                    if($val==='' && !bool){
+                        this.carriersFilter = this.carriersAll;
+                    }else if(bool){
+                        this.carriersFilter= [];
+                        for (let i = 0; i < carriersAll.length; i++) {
+                            let carries = carriersAll[i];
+                            let name = carries.name;
+                            if(name.includes($val)){
+                                this.carriersFilter.push(carries);
+                            }
+                        }
+                    }
                 },
-                selectedRole:function (e) {
-                    let roles=this.roles;
-                    let rolesAll=this.rolesAll;
-                    let rolesList=this.rolesList;
-                    let isRole=true;
-                    if (roles&&rolesAll) {
+                selectedRole: function (e) {
+                    let roles = this.roles;
+                    let rolesAll = this.rolesAll;
+                    let rolesList = this.rolesList;
+                    let isRole = true;
+                    if (roles && rolesAll) {
                         for (let i = 0; i < roles.length; i++) {
                             if (roles[i] == e.id) {
-                                roles.splice(i,1);
+                                roles.splice(i, 1);
                                 rolesAll.every(function (roleAll) {
                                     if (roleAll.id == e.id) {
                                         roleAll.style = false;
@@ -280,46 +334,63 @@
                                     }
                                     return true;
                                 });
-                                rolesList.every(function (role,i) {
-                                    if (role.id==e.id){
-                                        rolesList.splice(i,1);
+                                rolesList.every(function (role, i) {
+                                    if (role.id == e.id) {
+                                        rolesList.splice(i, 1);
                                         return false;
                                     }
                                     return true;
                                 });
-                                isRole= false;
+                                isRole = false;
                                 break;
                             }
-                            isRole= true;
+                            isRole = true;
                         }
                     }
-                    if (isRole || !roles){
+                    if (isRole || !roles) {
                         roles.push(e.id);
                         rolesAll.every(function (roleAll) {
-                            if (roleAll.id==e.id){
-                                roleAll.style=true;
-                                rolesList.push({'id':roleAll.id,'name':roleAll.name});
+                            if (roleAll.id == e.id) {
+                                roleAll.style = true;
+                                rolesList.push({'id': roleAll.id, 'name': roleAll.name});
                                 return false;
                             }
-                            return  true;
+                            return true;
                         });
                     }
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },10)
+                    setTimeout(function () {
+                        $(".tooltipTarget").tooltip({'trigger': 'hover'});
+                    }, 10)
                 },
-                seekRole:function (e) {
-                    let $val=e.target.value;
-                    let rolesAll=this.rolesAll;
+                seekRole: function (e) {
+                    let $val = e.target.value;
+                    let rolesAll = this.rolesAll;
+                    let rolesFilter = this.rolesFilter;
+                    let bool = false;
                     rolesAll.every(function (roleAll) {
-                        let name=roleAll.name;
-                        if (name.includes($val)){
-                            location.href="#"+roleAll.name;
+                        let name = roleAll.name;
+                        if (name.includes($val)) {
+                            bool = true;
                             return false;
                         }
-                        return  true;
+                        return true;
                     });
-                    $(e.target).focus();
+                    console.log(bool);
+                    if ($val === '' && bool) {
+                        this.rolesFilter = this.rolesAll;
+                    } else if (bool) {
+                        this.rolesFilter = [];
+                        for (let i = 0; i < rolesAll.length; i++) {
+                            let role = rolesAll[i];
+                            console.log(role);
+                            let name = role.name;
+                            if (name.includes($val)) {
+                                console.log(name);
+                                this.rolesFilter.push(role);
+                            }
+                        }
+                    }
+
                 },
             },
         });

+ 40 - 8
resources/views/maintenance/user/edit.blade.php

@@ -64,7 +64,7 @@
                             <input name="role" hidden    v-model="roles" >
                             <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
                                 <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
-                                    <li  :data-original-title="role.style ? '双击删除角色' :'双击添加角色'"    v-for="role in rolesAll" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                    <li  :data-original-title="role.style ? '双击删除角色' :'双击添加角色'"    v-for="role in rolesFilter" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
                                          @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" :id="role.name"> @{{ role.name }}  </span></li>
                                 </ul>
                             </div>
@@ -92,7 +92,7 @@
                             <input name="carrier" hidden   v-model="carriers" >
                             <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
                                 <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
-                                    <li  :data-original-title="carrier.style ? '双击删除承运商' :'双击添加承运商'"    v-for="carrier in carriersAll" :id="carrier.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                    <li  :data-original-title="carrier.style ? '双击删除承运商' :'双击添加承运商'"    v-for="carrier in carriersFilter" :id="carrier.name" class="list-group-item list-group-item-action pt-0 pb-0"
                                          @dblclick="selectedCarrier(carrier)" :class="carrier.style ? 'active' :''"><span style="cursor: default;" > @{{ carrier.name }}  </span></li>
                                 </ul>
                             </div>
@@ -136,6 +136,11 @@
                     {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
                     @endforeach
                 ],
+                rolesFilter:[
+                        @foreach( $rolesAll as $role )
+                    {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
+                    @endforeach
+                ],
                 roles:[
                     @if(old('role'))
                         {{ old('role') }}
@@ -160,6 +165,11 @@
                         @endforeach
                     @endif
                 ],
+                carriersFilter:[
+                    @foreach($carriers as $carrier)
+                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}',style:false},
+                    @endforeach
+                ],
                 carriersList:[],
             },
             mounted:function(){
@@ -243,15 +253,26 @@
                 seekCarrier:function (e) {
                     let $val=e.target.value;
                     let carriersAll=this.carriersAll;
-                    carriersAll.every(function (carrierAll) {
-                        let name=carrierAll.name;
+                    let bool = false;
+                    carriersAll.every(function (carriersAll) {
+                        let name=carriersAll.name;
                         if (name.includes($val)){
-                            location.href="#"+carrierAll.name;
+                            bool = true;
                             return false;
                         }
                         return  true;
                     });
-                    $(e.target).focus();
+                    if($val === '' ){
+                        this.rolesFilter = this.rolesAll;
+                    }else if(bool){
+                        this.carriersFilter = [];
+                        for (let i = 0; i <carriersAll.length ; i++) {
+                            let carrier = carriersAll[i];
+                            if(carrier.name.includes($val)){
+                                this.carriersFilter.push(carrier);
+                            }
+                        }
+                    }
                 },
                 selectedRole:function (e) {
                     let roles=this.roles;
@@ -300,15 +321,26 @@
                 seekRole:function (e) {
                     let $val=e.target.value;
                     let rolesAll=this.rolesAll;
+                    let bool = false;
                     rolesAll.every(function (roleAll) {
                         let name=roleAll.name;
                         if (name.includes($val)){
-                            location.href="#"+roleAll.name;
+                            bool = true;
                             return false;
                         }
                         return  true;
                     });
-                    $(e.target).focus();
+                    if($val === '' ){
+                        this.rolesFilter = this.rolesAll;
+                    }else if(bool){
+                        this.rolesFilter = [];
+                        for (let i = 0; i <rolesAll.length ; i++) {
+                            let role = rolesAll[i];
+                            if(role.name.includes($val)){
+                                this.rolesFilter.push(role);
+                            }
+                        }
+                    }
                 },
             },
         });

+ 1 - 1
resources/views/personnel/checking-in/QRcode.blade.php

@@ -8,7 +8,7 @@
     <meta name="csrf-token" content="{{ csrf_token() }}">
     <title>显示二维码 BsWAS</title>
     <!-- Styles -->
-    <link href="{{ asset('css/app200519b.css') }}" rel="stylesheet">
+    <link href="{{ asset('css/app200629c.css') }}" rel="stylesheet">
 </head>
 <body>
     <div class="container-fluid " id="page">

+ 7 - 5
resources/views/personnel/checking-in/clockAudit.blade.php

@@ -19,7 +19,7 @@
                         <tr>
                             <td>序号</td>
                             <td>姓名</td>
-                            @can('人事管理-打卡审核')<td>门卫审核</td>@endcan
+                            @can('人事管理-门卫审核')<td>门卫审核</td>@endcan
                             <td>组长审核</td>
                             <td >打卡时间</td>
                             <td>打卡类型</td>
@@ -34,7 +34,7 @@
                         <tr v-for="(userDutyCheck,i) in userDutyChecks" v-if="whichDay(userDutyCheck.checked_at)==day">
                             <td>@{{ i+1 }}</td>
                             <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
-                            @can('人事管理-打卡审核')<td>
+                            @can('人事管理-门卫审核')<td>
                                 <span v-if="userDutyCheck.type=='登入'">
                                 <b v-if="userDutyCheck.verify_user_id" class="text-success">已审核</b>
                                 <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
@@ -43,12 +43,14 @@
                             <td>
                                 <span v-if="userDutyCheck.type=='登入'">
                                 <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
-                                <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
+                                    @can('人事管理-组长审核')
+                                        <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
+                                    @endcan
                                 </span>
                             </td>
                             <td>@{{ userDutyCheck.checked_at.substring(11,16) }}</td>
                             <td>
-                                @can('人事管理-打卡审核类型')
+                                @can('人事管理-审核类型')
                                     <button v-if="!userDutyCheck.isChangingType" class="btn btn-sm btn-outline-secondary text-center" @click="dutyCheckType($event,userDutyCheck)" :data_id="userDutyCheck.id">@{{ userDutyCheck.type }}</button>
                                     <select v-else v-model="userDutyCheck.type" :data_id="userDutyCheck.id"
                                             @change="isException(userDutyCheck.id,userDutyCheck.user_id,userDutyCheck.checked_at,userDutyCheck.type)" class="form-control" style="width: 100px">
@@ -57,7 +59,7 @@
                                     </select>
                                 @else
                                     <span class="text-center">@{{ userDutyCheck.type }}</span>
-                                    @endcan
+                                @endcan
                             </td>
                             <td  class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
                             <td ><span v-if="userDutyCheck.user_labor">@{{ userDutyCheck.user_labor.labor_company.name }}</span></td>

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

@@ -8,7 +8,7 @@
                 </li> @endcan
             @can('人事管理')
                 <li class="nav-item">
-                    <a class="nav-link" href="{{url('personnel/checking-in/createReplenishClock')}}" :class="{active:isActive('checking-in',2)}">考勤</a>
+                    <a class="nav-link" href="{{url('personnel/checking-in/createReplenishClock')}}" :class="{active:isActive('checking-in',2)}">打卡相关</a>
                 </li> @endcan
             <li class="nav-item">
                 <a class="nav-link text-dark" href="{{url('personnel/relating')}}" :class="{active:isActive('relating',2)}">相关设置</a>

+ 53 - 42
resources/views/process/create.blade.php

@@ -17,8 +17,8 @@
                         <div class="form-group row">
                             <div class="col-10 offset-1 pl-0 pt-2 border rounded bg-light">
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
-                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full">@{{ processContents[0].wms_code }}</b></div> <!---->
-                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full">
+                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
+                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type">
                                     <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;">
@@ -33,37 +33,37 @@
                                     </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].is_full" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
                                 </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].is_full && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
+                                    <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">
                                         <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
                                     </ul>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
-                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full"
+                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
                                         <option value="移库单">移库单</option>
                                         <option value="入库单">入库单</option>
                                         <option value="出库单">出库单</option>
                                     </select></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">数量</label>
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full"
+                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type"
                                            @click="confirmStore(processContents[0].wms_code,processContents[0].commodity_id,processContents[0].amount,processContents[0].bill_type,false)"
                                            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].is_full" 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)" 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.is_full">
+                            <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)">
                                         <span class="font-weight-bold">单据号:</span>
@@ -94,8 +94,8 @@
                         <div class="form-group row">
                             <div class="col-10 offset-1 pl-0 pt-2 border rounded bg-light">
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
-                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full">@{{ processContents[0].wms_code }}</b></div> <!---->
-                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full">
+                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
+                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">
                                     <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;">
@@ -110,37 +110,37 @@
                                     </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].is_full" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
                                 </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].is_full && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
+                                    <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">
                                         <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
                                     </ul>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
-                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full"
+                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
                                         <option value="移库单">移库单</option>
                                         <option value="入库单">入库单</option>
                                         <option value="出库单">出库单</option>
                                     </select></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">数量</label>
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full"
+                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type"
                                            @click="confirmStore(processContents[0].wms_code,processContents[0].commodity_id,processContents[0].amount,processContents[0].bill_type,true)"
                                            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].is_full" 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)" 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.is_full">
+                            <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)">
                                         <span class="font-weight-bold">单据号:</span>
@@ -253,10 +253,10 @@
             },
             methods:{
                 //新增库单据
-                addProcessContent(is_full){
+                addProcessContent(type){
                     let _this=this;
                     let wms_code=_this.process.wms_code;
-                    if (is_full) wms_code=_this.process.wms_code_full;
+                    if (type) wms_code=_this.process.wms_code_full;
                     if (!wms_code){
                         tempTip.setDuration(3000);
                         tempTip.show('未输入单据号!');
@@ -296,7 +296,7 @@
                             processContent['amount']='';
                             processContent['lineNo']='';
                             processContent['addBtnShow']=true;
-                            processContent['is_full']=is_full;
+                            processContent['type']=type;
                             _this.processContents.unshift(processContent);
                         }).catch(function (err) {
                         if (_this.msg)_this.msg=false;
@@ -306,7 +306,7 @@
                         });
                 },
                 //确定新增
-                confirmStore(wms_code,commodity_id,amount,bill_type,is_full){
+                confirmStore(wms_code,commodity_id,amount,bill_type,type){
                     if (!commodity_id) {
                         tempTip.setDuration(2000);
                         tempTip.show("尚未选择商品!");
@@ -324,35 +324,46 @@
                     }
                     let _this=this;
                     let sign=true;
+                    let is_return=false;
                     let processContentTemp={};
                     _this.processContents.some(function (processContent) {
-                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.is_full==is_full) {
-                            _this.commodityIds.push(processContent.commodity_id+"_"+is_full);
+                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
+                            processContent.commodities.every(function (commodity) {
+                                if (commodity.id===commodity_id && commodity.amount<amount){
+                                    tempTip.setDuration(2000);
+                                    tempTip.show("数量不得超出原有数量!");
+                                    is_return=true;
+                                    return false;
+                                }
+                                return true;
+                            });
+                            if (is_return)return true;
+                            _this.commodityIds.push(processContent.commodity_id+"_"+type);
                             processContent.addBtnShow=false;
                             processContentTemp=Object.assign({},processContent);
                         }
-                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.is_full==!is_full)sign=false;
+                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==!type)sign=false;
                     });
-
-                    if (bill_type==='入库单' && !is_full && sign){
-                        _this.commodityIds.push(processContentTemp.commodity_id+"_"+!is_full);
-                        processContentTemp['is_full']=true;
+                    if (is_return)return;
+                    if (bill_type==='入库单' && !type && sign){
+                        _this.commodityIds.push(processContentTemp.commodity_id+"_"+!type);
+                        processContentTemp['type']=true;
                         _this.processContents.unshift(processContentTemp);
                     }
                 },
                 //删除新增
-                deleteProcessContent(wms_code,commodity_id,is_full){
+                deleteProcessContent(wms_code,commodity_id,type){
                     let _this=this;
                     let deleteData=[];
                     _this.processContents.some(function (processContent,i) {
-                        if (processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.is_full===is_full) {
+                        if (processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.type===type) {
                             deleteData.unshift(i);
-                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+is_full),1);
-                            if (is_full) return true;
+                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+type),1);
+                            if (type) return true;
                         }
-                        if (!is_full && processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.is_full===!is_full){
+                        if (!type && processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.type===!type){
                             deleteData.unshift(i);
-                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+!is_full),1);
+                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+!type),1);
                         }
                     });
                     deleteData.forEach(function (data) {
@@ -378,10 +389,10 @@
                         });
                 },
                 //选择商品
-                selectedCommodity(commodity,wms_code,is_full){
+                selectedCommodity(commodity,wms_code,type){
                     let _this=this;
                     _this.processContents.every(function (processContent) {
-                        if (_this.commodityIds.includes(commodity.id+"_"+is_full)){
+                        if (_this.commodityIds.includes(commodity.id+"_"+type)){
                             tempTip.setDuration(3000);
                             tempTip.show('该单据已被添加至下边!');
                             return;
@@ -481,9 +492,9 @@
                     }
                 },
                 //删除按钮的显示
-                update_delBtn(type,wms_code,commodity_id,is_full){
-                    if (type) this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+is_full,true);
-                    else this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+is_full,false);
+                update_delBtn(is_type,wms_code,commodity_id,type){
+                    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);
                 },
             },
         });

+ 68 - 56
resources/views/process/edit.blade.php

@@ -13,16 +13,16 @@
             <div class="card-body">
                 <div class="row">
                     <div class="col-6  rounded mb-2 border" style="background: #efe3d9;">
-                        <div class="form-group row mt-2">
+                        <div class="form-group row mt-2" v-if="!is_hide">
                             <label class="col-2 text-right mt-2">原料单据</label>
                             <input class="form-control col-7" v-model="process.wms_code">&nbsp;&nbsp;&nbsp;
                             <button class="btn btn-info btn-sm col-2"  type="button" @click="addProcessContent(false)"> 新增库单据</button>
                         </div>
-                        <div class="form-group row">
+                        <div class="form-group row" v-if="!is_hide">
                             <div class="col-10 offset-1 pl-0 pt-2 border rounded bg-light">
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
-                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full">@{{ processContents[0].wms_code }}</b></div> <!---->
-                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full">
+                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
+                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type">
                                     <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;">
@@ -37,37 +37,37 @@
                                     </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].is_full" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
                                 </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].is_full && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
+                                    <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">
                                         <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
                                     </ul>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
-                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full"
+                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
                                         <option value="移库单">移库单</option>
                                         <option value="入库单">入库单</option>
                                         <option value="出库单">出库单</option>
                                     </select></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">数量</label>
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].is_full"
+                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && !processContents[0].type"
                                            @click="confirmStore(processContents[0].wms_code,processContents[0].commodity_id,processContents[0].amount,processContents[0].bill_type,false)"
                                            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].is_full" 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)" 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.is_full">
+                        <div class="form-group row" :class="is_hide ? 'mt-3' : ''">
+                            <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)">
                                         <span class="font-weight-bold">单据号:</span>
@@ -89,7 +89,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="col-6 rounded mb-2 border" style="background: #ccd7dc;">
+                    <div class="col-6 rounded mb-2 border" style="background: #ccd7dc;" >
                         <div class="form-group row mt-2">
                             <label class="col-2 text-right mt-2">成品单据</label>
                             <input class="form-control col-7" v-model="process.wms_code_full">&nbsp;&nbsp;&nbsp;
@@ -98,8 +98,8 @@
                         <div class="form-group row">
                             <div class="col-10 offset-1 pl-0 pt-2 border rounded bg-light">
                                 <div class="row pt-2 small"><label class="col-3 text-right" >单据号</label>
-                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full">@{{ processContents[0].wms_code }}</b></div> <!---->
-                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full">
+                                    <b class="col-8" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">@{{ processContents[0].wms_code }}</b></div> <!---->
+                                <div class="row pt-2" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type">
                                     <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;">
@@ -114,37 +114,37 @@
                                     </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].is_full" class="col-8">@{{ processContents[0].commodity_name }}</b>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_name }}</b>
                                 </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].is_full && processContents[0].commodity_barcodes && processContents[0].commodity_barcodes.length>0">
+                                    <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">
                                         <li v-for="barcode in processContents[0].commodity_barcodes"><small>&nbsp;&nbsp;@{{ barcode.code }}</small></li>
                                     </ul>
                                 </div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">SKU</label>
-                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
+                                    <b v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" class="col-8">@{{ processContents[0].commodity_sku }}</b></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">单据类型</label>
-                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full"
+                                    <select v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type"
                                             v-model="processContents[0].bill_type"  class="col-8 form-control form-control-sm">
                                         <option value="移库单">移库单</option>
                                         <option value="入库单">入库单</option>
                                         <option value="出库单">出库单</option>
                                     </select></div>
                                 <div class="row pt-2 small"><label class="col-3  text-right">数量</label>
-                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
+                                    <input v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type" v-model="processContents[0].amount" type="text" class="form-control form-control-sm col-8">
                                 </div>
                                 <div class="col-8 offset-2 pt-2 pb-2">
-                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].is_full"
+                                    <input type="button" v-if="processContents.length>0 && processContents[0].addBtnShow && processContents[0].type"
                                            @click="confirmStore(processContents[0].wms_code,processContents[0].commodity_id,processContents[0].amount,processContents[0].bill_type,true)"
                                            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].is_full" 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)" 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.is_full">
+                            <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)">
                                         <span class="font-weight-bold">单据号:</span>
@@ -180,27 +180,27 @@
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >加工类型</label>
-                    <select v-model="process.process_method_id" class="form-control col-8" :class="error.process_method_id && error.process_method_id.length>0 ? 'is-invalid' :''">
+                    <select :disabled="is_hide" v-model="process.process_method_id" class="form-control col-8" :class="error.process_method_id && error.process_method_id.length>0 ? 'is-invalid' :''">
                         <option  v-for="processMethod in processMethods" :value="processMethod.id">@{{ processMethod.name }}</option>
                     </select>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >加工数量</label>
-                    <input v-model="process.amount" type="text" class="form-control col-8" :class="error.amount && error.amount.length>0 ? 'is-invalid' :''">
+                    <input :readonly="is_hide" v-model="process.amount" type="text" class="form-control col-8" :class="error.amount && error.amount.length>0 ? 'is-invalid' :''">
                     <span v-if="error.amount && error.amount.length>0" class="invalid-feedback col-8 offset-3 mt-0" role="alert">
                         <strong >@{{ error.amount[0] }}</strong>
                     </span>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >单价</label>
-                    <input v-model="process.unit_price" type="text" class="form-control col-8" :class="error.unit_price && error.unit_price.length>0 ? 'is-invalid' :''">
+                    <input :readonly="is_hide" v-model="process.unit_price" type="text" class="form-control col-8" :class="error.unit_price && error.unit_price.length>0 ? 'is-invalid' :''">
                     <span v-if="error.unit_price && error.unit_price.length>0" class="invalid-feedback col-8 offset-3 mt-0" role="alert">
                         <strong>@{{ error.unit_price[0] }}</strong>
                     </span>
                 </div>
                 <div class="form-group row">
                     <label class="col-3 col-form-label text-right" >备注(选填)</label>
-                    <textarea v-model="process.remark" type="text" class="form-control col-8"></textarea>
+                    <textarea :readonly="is_hide" v-model="process.remark" type="text" class="form-control col-8"></textarea>
                 </div>
                 <div class="form-group row">
                     <div class="col-8 offset-3">
@@ -218,14 +218,14 @@
             el:'#list',
             data:{
                 process:{id:'{{$process->id}}',code:'{{$process->code}}',wms_code:'',owner_id:'{{$process->owner_id}}',amount:'{{$process->amount}}',owner_name:'{{$process->owner_name}}',
-                    process_method_id:'{{$process->process_method_id}}',unit_price:'{{$process->unit_price}}',remark:'{{$process->remark}}',wms_code_full:''},
+                    process_method_id:'{{$process->process_method_id}}',unit_price:'{{$process->unit_price}}',remark:'{{$process->remark}}',wms_code_full:'',status:'{{$process->status}}'},
                 error:{wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]},
                 processContentError:[],
                 processContents:[
                     @foreach($process->processesContents as $processesContent)
                     {id:'{{$processesContent->id}}',wms_code:'{{$processesContent->wms_code}}',commodity_name:'{{$processesContent->commodity?$processesContent->commodity->name:""}}',@if($processesContent->commodity) commodity_barcodes:{!! $processesContent->commodity->barcodes !!},@endif
                     commodity_id:'{{$processesContent->commodity_id}}',commodity_sku:'{{$processesContent->commodity?$processesContent->commodity->sku:""}}',bill_type:'{{$processesContent->bill_type}}',amount:'{{$processesContent->amount}}',
-                    addBtnShow:false,is_full:'{{$processesContent->is_full}}'},
+                    addBtnShow:false,type:'{{$processesContent->type}}'},
                     @endforeach
                 ],
                 processMethods:[
@@ -237,16 +237,17 @@
                 selectedTutorials:[],
                 commodityIds:[],
                 is_delBtn:[],
+                is_hide:false,
             },
             mounted:function(){
+                if (this.process.status==='加工中' || this.process.status==='待加工')this.is_hide=true;
                 let _this=this;
                 _this.processContents.some(function (processContent) {
-                    processContent.is_full=processContent.is_full==='Y'?true:false;
+                    processContent.type=processContent.type==='成品单'?true:false;
                     if (!processContent.addBtnShow) {
-                        _this.commodityIds.push(processContent.commodity_id+'_'+processContent.is_full);
+                        _this.commodityIds.push(processContent.commodity_id+'_'+processContent.type);
                     }
                 });
-                console.log(this.process);
             },
             watch:{
                 processContents:{
@@ -260,10 +261,10 @@
             },
             methods:{
                 //新增库单据
-                addProcessContent(is_full){
+                addProcessContent(type){
                     let _this=this;
                     let wms_code=_this.process.wms_code;
-                    if (is_full) wms_code=_this.process.wms_code_full;
+                    if (type) wms_code=_this.process.wms_code_full;
                     if (!wms_code){
                         tempTip.setDuration(3000);
                         tempTip.show('未输入单据号!');
@@ -294,7 +295,7 @@
                             processContent['amount']='';
                             processContent['lineNo']='';
                             processContent['addBtnShow']=true;
-                            processContent['is_full']=is_full;
+                            processContent['type']=type;
                             _this.processContents.unshift(processContent);
                         }).catch(function (err) {
                             tempTip.setDuration(3000);
@@ -302,7 +303,7 @@
                         });
                 },
                 //确定新增
-                confirmStore(wms_code,commodity_id,amount,bill_type,is_full){
+                confirmStore(wms_code,commodity_id,amount,bill_type,type){
                     if (!commodity_id) {
                         tempTip.setDuration(2000);
                         tempTip.show("尚未选择商品!");
@@ -315,35 +316,46 @@
                     }
                     let _this=this;
                     let sign=true;
+                    let is_return=false;
                     let processContentTemp={};
                     _this.processContents.some(function (processContent) {
-                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.is_full==is_full) {
-
-                            _this.commodityIds.push(processContent.commodity_id+"_"+is_full);
+                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==type) {
+                            processContent.commodities.every(function (commodity) {
+                                if (commodity.id===commodity_id && commodity.amount<amount){
+                                    tempTip.setDuration(2000);
+                                    tempTip.show("数量不得超出原有数量!");
+                                    is_return=true;
+                                    return false;
+                                }
+                                return true;
+                            });
+                            if (is_return)return true;
+                            _this.commodityIds.push(processContent.commodity_id+"_"+type);
                             processContent.addBtnShow=false;
                             processContentTemp=Object.assign({},processContent);
                         }
-                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.is_full==!is_full)sign=false;
+                        if (processContent.wms_code==wms_code && processContent.commodity_id==commodity_id && processContent.type==!type)sign=false;
                     });
-                    if (bill_type==='入库单' && !is_full && sign){
-                        _this.commodityIds.push(processContentTemp.commodity_id+"_"+!is_full);
-                        processContentTemp['is_full']=true;
+                    if (is_return)return;
+                    if (bill_type==='入库单' && !type && sign){
+                        _this.commodityIds.push(processContentTemp.commodity_id+"_"+!type);
+                        processContentTemp['type']=true;
                         _this.processContents.unshift(processContentTemp);
                     }
                 },
                 //删除新增
-                deleteProcessContent(wms_code,commodity_id,is_full){
+                deleteProcessContent(wms_code,commodity_id,type){
                     let _this=this;
                     let deleteData=[];
                     _this.processContents.some(function (processContent,i) {
-                        if (processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.is_full===is_full) {
+                        if (processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.type===type) {
                             deleteData.unshift(i);
-                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+is_full),1);
-                            if (is_full) return true;
+                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+type),1);
+                            if (type) return true;
                         }
-                        if (!is_full && processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.is_full===!is_full){
+                        if (!type && processContent.wms_code===wms_code && processContent.commodity_id===commodity_id && processContent.type===!type){
                             deleteData.unshift(i);
-                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+!is_full),1);
+                            _this.commodityIds.splice(_this.commodityIds.indexOf(processContent.commodity_id+"_"+!type),1);
                         }
                     });
                     deleteData.forEach(function (data) {
@@ -351,10 +363,10 @@
                     });
                 },
                 //选择商品
-                selectedCommodity(commodity,wms_code,is_full){
+                selectedCommodity(commodity,wms_code,type){
                     let _this=this;
                     _this.processContents.every(function (processContent) {
-                        if (_this.commodityIds.includes(commodity.id+"_"+is_full)){
+                        if (_this.commodityIds.includes(commodity.id+"_"+type)){
                             tempTip.setDuration(3000);
                             tempTip.show('该单据已被添加至下边!');
                             return;
@@ -391,7 +403,7 @@
                     _this.processContentError=[];
                     axios.put('{{url("process")}}/'+_this.process.id,{
                         owner_id:owner_id,process_method_id:process_method_id,unit_price:unit_price,
-                        remark:remark,amount:amount,processContents:_this.processContents
+                        remark:remark,amount:amount,processContents:_this.processContents,is_hide:_this.is_hide
                     }).then(function (response) {
                         if (response.data.error && response.data.data=="process"){
                             _this.error=response.data.error;
@@ -418,9 +430,9 @@
                     });
                 },
                 //删除按钮的显示
-                update_delBtn(type,wms_code,commodity_id,is_full){
-                    if (type) this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+is_full,true);
-                    else this.$set(this.is_delBtn,wms_code+'_'+commodity_id+'_'+is_full,false);
+                update_delBtn(is_type,wms_code,commodity_id,type){
+                    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);
                 },
             },
 

+ 106 - 97
resources/views/process/index.blade.php

@@ -249,16 +249,17 @@
                     <th style="min-width: 200px">商品名称 </th>
                 </tr>
                 <template>
-                <tr v-for="(processOne,i) in processesContents" :id="processOne.afterLocation?processOne.afterLocation:processOne.id">
-                    <td v-if="processOne.id">
+                <tr v-for="(processOne,i) in processes" :id="processOne.id?processOne.id:processes[i-1].id+'-2'">
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">
                         <input class="checkItem" type="checkbox" :value="processOne.id" v-model="checkData">
                     </td>
-                    <td v-if="processOne.id" class="text-muted">@{{ i+1 }}</td>
-                    <td v-if="processOne.id" style="min-width:150px" >
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ i+1 }}</td>
+                    <td v-if="processOne.id" style="min-width:150px" :rowspan="processOne.is_multi_row?2:''">
                         <p v-if="!processOne.openProcessHour && processOne.status=='驳回'" class="text-muted">已驳回</p>
                         <p v-if="!processOne.openProcessHour && processOne.status=='已完成'" class="text-success">已完成</p>
+                        <button v-if="!processOne.openProcessHour && processOne.status!='已完成' && processOne.status!='待接单'" class="btn btn-sm btn-outline-dark" style="opacity: 0.65" @click="rollback(processOne.id)">回滚</button>
                         @can("二次加工管理-接单与驳回")
-                        <button v-if="!processOne.openProcessHour && processOne.status=='待接单'" @click="processEdit(processOne.id)" class="btn btn-sm btn-outline-info pull-left">编辑</button>
+                        <button v-if="!processOne.openProcessHour && (processOne.status=='待接单' || processOne.status=='驳回' || processOne.status=='加工中' || processOne.status=='待加工')" @click="processEdit(processOne.id)" class="btn btn-sm btn-outline-info pull-left">编辑</button>
                         <button v-if="!processOne.openProcessHour && processOne.status=='待接单'" @click="processReject(processOne.id)" class="btn btn-sm btn-outline-dark pull-left">驳回</button>
                         <button v-if="!processOne.openProcessHour && processOne.status=='待接单'"  @click="processReceive(processOne.id)" class="btn btn-sm btn-outline-primary pull-left">接单</button>@endcan
                         @can("二次加工管理-登记工时")<button v-if="(processOne.status=='加工中' || processOne.status=='待加工') && !processOne.openProcessHour"
@@ -266,11 +267,11 @@
                         <button v-if="processOne.openProcessHour" @click="closeProcessHour(processOne.id);processOne.openProcessHour=false" class="btn btn-sm btn-dark pull-left">收起登记工时</button>@endcan
                         @can("二次加工管理-验收完成")<button v-if="!processOne.openProcessHour && processOne.status=='待验收'" @click="processAccomplish(processOne.id)" class="btn btn-sm btn-outline-success pull-left">完成</button>@endcan
                     </td>
-                    <td v-if="processOne.id" class="text-muted">@{{ processOne.code }}</td>
-                    <td v-if="processOne.id" class="text-muted">@{{ processOne.owner_name }}</td>
-                    <td v-if="processOne.id">@{{ processOne.process_method_name }}</td>
-                    <td v-if="processOne.id">@{{ processOne.amount }}</td>
-                    <td v-if="processOne.id" >
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.code }}</td>
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.owner_name }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''" class="font-weight-bold text-danger">@{{ processOne.process_method_name }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.amount }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">
                         <div class="" v-if="processOne.tutorials" {{--style="width: 200px;overflow:auto;"--}}>
                             <div v-if=" processOne.tutorials.length>0">
                             <u v-if="!processOne.detailFolding" @click="showTutorial(processOne.tutorials[0].id)" class="text-info" style="cursor:pointer;">@{{processOne.tutorials[0].name}}</u>
@@ -297,35 +298,52 @@
                             </div>
                         </div>
                     </td>
-                    <td v-if="processOne.id" class="text-muted">@{{ processOne.unit_price }}</td>
-                    <td v-if="processOne.id">@{{ processOne.completed_amount }}</td>
-                    <td v-if="processOne.id">@{{ processOne.created_at }}</td>
-                    <td v-if="processOne.id" class="text-muted">@{{ processOne.status }}</td>
-                    <td v-if="processOne.id" class="text-muted">@{{ processOne.remark }}</td>
-                    <td colspan="5">
-                        <table class="table table-sm table-striped" v-if="processUnfold[processOne.code] || processOne.processesContents.length==1">
-                            <tr v-for="processesContent in processOne.processesContents" v-if="processUnfold[processOne.code] ? processesContent.is_full==processUnfold[processOne.code] :processOne.processesContents.length==1">
-                                <td style="width: 180px" class="text-muted">@{{ processesContent.bill_type }}</td>
-                                <td style="width: 180px" class="text-muted">@{{ processesContent.wms_code }}</td>
-                                <td style="width: 180px" class="text-muted">@{{ processesContent.amount }}</td>
-                                <td style="width: 180px" class="text-muted">
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.unit_price }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.completed_amount }}</td>
+                    <td v-if="processOne.id" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.created_at }}</td>
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.status }}</td>
+                    <td v-if="processOne.id" class="text-muted" :rowspan="processOne.is_multi_row?2:''">@{{ processOne.remark }}</td>
+                    <td colspan="5" style="margin:0;padding:0;">
+                        <table class="table table-sm table-striped p-0 m-0" v-if="processUnfold[processOne.code+processOne.id] || processOne.processesContents.length==1 ||
+                        (processOne.is_multi_row &&  (processOne.processesContents.length)-(processFullSum[processOne.code])==1) || (!processOne.id &&  processFullSum[processOne.code]==1)">
+                            <tr v-for="processesContent in processOne.processesContents"
+                                v-if="processOne.is_multi_row || !processOne.id ? !processOne.id  ? processesContent.type=='成品单' :processesContent.type=='原料单' : true">
+                                <td style="width: 190px" class="text-muted" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.bill_type }} <span style="opacity: 0.75">(@{{ processesContent.type }})</span></td>
+                                <td style="width: 190px" class="text-muted" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.wms_code }}</td>
+                                <td style="width: 200px" class="text-muted" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.amount }}</td>
+                                <td style="width: 180px" class="text-muted" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">
                                     <ul class="p-0 m-0 list-unstyled list-inline" v-if="processesContent.commodity">
                                         <li v-for="barcode in processesContent.commodity.barcodes"><small>@{{ barcode.code }}</small></li>
                                     </ul>
                                 </td>
-                                <td :title="processesContent.commodity_name" class="text-muted tooltipTarget"><div style="width: 180px;overflow:hidden" >@{{ processesContent.commodity_name }}</div></td>
+                                <td :title="processesContent.commodity_name" class="text-muted tooltipTarget" :class="processesContent.type=='原料单'?'td-warm':'td-cool'">
+                                    <div style="width: 180px;overflow:hidden" :class="processesContent.bill_type=='原料单'?'td-warm':'td-cool'">@{{ processesContent.commodity_name }}</div></td>
                             </tr>
-                            <tr v-if="processUnfold[processOne.code]">
+                            <tr v-if="processUnfold[processOne.code+processOne.id]">
                                <td colspan="5">
                                    <div class="text-center">
-                                       <b v-if="processUnfold[processOne.code]=='N'" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="processUnfold=[]">点击关闭原料单</b><br>
-                                       <b v-if="processUnfold[processOne.code]=='Y'" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="processUnfold=[]">点击关闭成品单</b></div>
+                                       <b v-if="processUnfold[processOne.code+processOne.id]=='原料单'" style="cursor:pointer;color: #aaaaaa;text-decoration:underline" @click="close(processOne.code,processOne.id)">点击关闭原料单</b>
+                                       <b v-if="processUnfold[processOne.code+processOne.id]=='成品单'" style="cursor:pointer;color: #aaaaaa;text-decoration:underline" @click="close(processOne.code,processOne.id)">点击关闭成品单</b></div>
                                </td>
                             </tr>
                         </table>
-                        <div v-if="!processUnfold[processOne.code] && processOne.processesContents.length>1" class="text-center">
-                        <b v-if="processFullSum[processOne.code]!=processOne.processesContents.length" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="unfold(processOne.code,'N')">点击展开原料单</b><br>
-                        <b v-if="processFullSum[processOne.code] && processFullSum[processOne.code]!=0" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="unfold(processOne.code,'Y')">点击展开成品单</b></div>
+                        <div v-else  style="position: relative;height: 40px;" :style="{background: !processOne.id ? '#e8eef6' :'rgb(246, 238, 232)'}">
+                            <div v-for="(processesContent,i) in arrayFilter(processOne.processesContents,processOne)" class="w-100 row ml-1" style="transform: scale(0.5)" :style="[{ 'margin-top' :  i*4+'px'},{opacity:1/0.7}]"
+                               {{--v-if="processOne.is_multi_row || !processOne.id ? !processOne.id  ? processesContent.type=='成品单' :processesContent.type=='原料单' : true"--}}>
+                                <span style="width: 19%">@{{ processesContent.bill_type }}</span>
+                                <span style="width: 19.5%">@{{ processesContent.wms_code }}</span>
+                                <span style="width: 20%">@{{ processesContent.amount }}</span>
+                                <span style="width: 18%">
+                                    <ul class="p-0 m-0 list-unstyled list-inline" v-if="processesContent.commodity">
+                                        <li v-for="barcode in processesContent.commodity.barcodes"><small>@{{ barcode.code }}</small></li>
+                                    </ul>
+                                </span>
+                                <span :title="processesContent.commodity_name" class="text-muted tooltipTarget" style="width:23.5%;overflow:hidden">@{{ processesContent.commodity_name }}</span>
+                            </div>
+                        </div>
+                        <div v-if="!processUnfold[processOne.code+processOne.id] && processOne.processesContents.length>1" class="text-center">
+                        <b v-if="processFullSum[processOne.code]!=processOne.processesContents.length && (processOne.processesContents.length)-(processFullSum[processOne.code])!=1 && ((processOne.is_multi_row || !processOne.id) ? (!processOne.id  ? false :true) : true)" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="unfold(processOne.code,processOne.id,'原料单')">点击展开原料单</b>
+                        <b v-if="processFullSum[processOne.code] && processFullSum[processOne.code]>1 && ((processOne.is_multi_row || !processOne.id) ? (!processOne.id  ? true :false) : true)" style="cursor:pointer;color: #4aa0e6;text-decoration:underline" @click="unfold(processOne.code,processOne.id,'成品单')">点击展开成品单</b></div>
                     </td>
                 </tr>
                 <tr id="addProcessDailyParticipants" v-show="processDailyParticipants.length>0">
@@ -364,7 +382,7 @@
                                 </td>
                                 <td v-if="processDailyParticipant.rowspan" :rowspan="processDailyParticipant.rowspan"><p >@{{ processDailyParticipant.remain }}</p></td>
                                 <td v-if="processDailyParticipant.rowspan" :rowspan="processDailyParticipant.rowspan">
-                                    @can("二次加工管理-登记工时")<button v-if="processDailyParticipant.isAddProcessDailyParticipant && isShow.isAddProcessDailyParticipant" class="btn btn-sm btn-info" @click="addProcessDailyParticipant(processDailyParticipant);processDailyParticipant.isAddProcessDailyParticipant=false;">新增</button>
+                                    @can("二次加工管理-登记工时")<button v-if="processDailyParticipant.isAddProcessDailyParticipant && isShow.isAddProcessDailyParticipant" class="btn btn-sm btn-outline-info" @click="addProcessDailyParticipant(processDailyParticipant);processDailyParticipant.isAddProcessDailyParticipant=false;">新增</button>
                                     <button v-if="!processDailyParticipant.isAddProcessDailyParticipant" class="btn btn-sm btn-danger"
                                             @click="deleteProcessDailyParticipant($event,processDailyParticipant.daily_id,processDailyParticipant.user_detail_full_name,processDailyParticipant.isConfirmBtn);processDailyParticipant.isAddProcessDailyParticipant=true;">取消</button>
                                     @endcan
@@ -442,15 +460,14 @@
             el:"#process",
             data:{
                 participantInputting:{},
-                processesContents:[
+                processes:[
                     @foreach($processes as $processOne)
                     {id:'{{$processOne->id}}',code:'{{$processOne->code}}',owner_name:'{{$processOne->owner_name}}',owner_id:'{{$processOne->owner_id}}',
-                        process_method_name:'{{$processOne->process_method_name}}',amount:'{{$processOne->amount}}',is_full:'{{$processOne->is_full}}'
+                        process_method_name:'{{$processOne->process_method_name}}',amount:'{{$processOne->amount}}',type:'{{$processOne->type}}'
                         ,tutorials:{!! $processOne->tutorials !!},processesContents:{!! $processOne->processesContents !!},unit_price:'{{$processOne->unit_price}}',created_at:'{{$processOne->created_at}}',
-                        completed_amount:'{{$processOne->completed_amount}}',status:'{{$processOne->status}}',remark:'{{$processOne->remark}}',detailFolding:false,openProcessHour:false,},
+                        completed_amount:'{{$processOne->completed_amount}}',status:'{{$processOne->status}}',remark:'{{$processOne->remark}}',detailFolding:false,openProcessHour:false,is_multi_row:false},
                     @endforeach
                 ],
-                processes:[],
                 processesList:[],
                 owners:[
                     @foreach($owners as $owner)
@@ -504,71 +521,37 @@
                 $('#process').removeClass('d-none');
             },
             methods:{
+                arrayFilter:function(processesContents,process){
+                    if (!process.is_multi_row && process.id) return processesContents;
+                    let array=[];
+                    let type='成品单';
+                    if (process.id) type='原料单';
+                    processesContents.forEach(function (processesContent) {
+                        if (processesContent.type===type)array.push(processesContent);
+                    });
+                    return  array;
+
+                },
                 //重组数据
                 resetProcessData:function(){
                     let _this=this;
-                    for (let i=0;i<this.processesContents.length;i++){
-                        let process=this.processesContents[i];
-                        if (process.processesContents.length<1){
-                            let processOne={};
-                            processOne['id']=process.id;
-                            processOne['code']=process.code;
-                            processOne['owner_name']=process.owner_name;
-                            processOne['process_method_name']=process.process_method_name;
-                            processOne['amount']=process.amount;
-                            processOne['tutorials']=process.tutorials;
-                            processOne['unit_price']=process.unit_price;
-                            processOne['created_at']=process.created_at;
-                            processOne['status']=process.status;
-                            processOne['remark']=process.remark;
-                            processOne['completed_amount']=process.completed_amount;
-                            processOne['detailFolding']=false;
-                            processOne['openProcessHour']=false;
-                            this.processes.push(processOne);
-                            continue;
-                        }
-                        process.processesContents.every(function (processesContent,count) {
-                            if (processesContent.is_full==='Y')_this.$set(_this.processFullSum,process.code,_this.processFullSum[process.code]?_this.processFullSum[process.code]+1:1);
-                            let processOne={};
-                            if ((count+1)==process.processesContents.length){
-                                processOne['afterLocation'] = process.id+"-"+process.processesContents.length;
-                            }
-                            if (_this.processesList[process.code]) {
-                                processOne['bill_type'] = processesContent.bill_type;
-                                processOne['wms_code'] = processesContent.wms_code;
-                                processOne['thisAmount']=processesContent.amount;
-                                processOne['commodity_barcodes'] = processesContent.commodity ? processesContent.commodity.barcodes:'';
-                                processOne['commodity_name'] = processesContent.commodity_name;
-                                _this.processes.push(processOne);
-                            }else{
-                                _this.processesList[process.code]=process.id;
-                                processOne['rowspan']=process.processesContents.length;
-                                processOne['id']=process.id;
-                                processOne['code']=process.code;
-                                processOne['owner_name']=process.owner_name;
-                                processOne['owner_id']=process.owner_id;
-                                processOne['process_method_name']=process.process_method_name;
-                                processOne['tutorials']=process.tutorials;
-                                processOne['amount']=process.amount;
-                                processOne['unit_price']=process.unit_price;
-                                processOne['created_at']=process.created_at;
-                                processOne['status']=process.status;
-                                processOne['remark']=process.remark;
-                                processOne['completed_amount']=process.completed_amount;
-                                processOne['detailFolding']=false;
-                                processOne['openProcessHour']=false;
-                                processOne['bill_type']=processesContent.bill_type;
-                                processOne['wms_code']=processesContent.wms_code;
-                                processOne['thisAmount']=processesContent.amount;
-                                processOne['commodity_barcodes']=processesContent.commodity ? processesContent.commodity.barcodes:'';
-                                processOne['commodity_name']=processesContent.commodity_name;
-                                processOne['count']=process.processesContents.length;
-                                _this.processes.push(processOne);
-                            }
+                    let indexs=[];
+                    for (let i=0;i<this.processes.length;i++){
+                        let process=this.processes[i];
+                        // console.log(this.processes[i].id);
+                        process.processesContents.every(function (processesContent) {
+                            if (processesContent.type==='成品单')_this.$set(_this.processFullSum,process.code,_this.processFullSum[process.code]?_this.processFullSum[process.code]+1:1);
                             return true;
                         });
+                        if (_this.processFullSum[process.code] && _this.processFullSum[process.code]!==0 && _this.processFullSum[process.code]!==process.processesContents.length)
+                        {indexs.unshift(i);process.is_multi_row=true;}
                     }
-
+                    indexs.forEach(function (index) {
+                        let processTemp=Object.assign({},_this.processes[index]);
+                        processTemp.id='';
+                        processTemp.is_multi_row=false;
+                        _this.processes.splice(index+1,0,processTemp);
+                    });
                 },
                 //回显条件参数
                 initInputs:function(){
@@ -696,7 +679,7 @@
                         tempTip.show('获取登记工时数据发生了一些严重错误:'+err);
                     });
                     let processDailyParticipantsHtml=$("#addProcessDailyParticipants");
-                    if (process.count) $("#"+e+"-"+process.count).after(processDailyParticipantsHtml);
+                    if (process.is_multi_row) $("#"+e+"-2").after(processDailyParticipantsHtml);
                     else $("#"+e).after(processDailyParticipantsHtml)
                 },
                 //删除工时显示
@@ -1237,10 +1220,36 @@
                     window.open("{{url('maintenance/tutorial/create?owner_id=')}}" + this.processTutorial.owner_id);
                 },
                 //展开内容单
-                unfold(code,is_full){
-                    this.processUnfold=[];
-                    this.$set(this.processUnfold,code,is_full);
+                unfold(code,id,type){
+                    this.$set(this.processUnfold,code+id,type);
+                },
+                close(code,id){
+                    this.$delete(this.processUnfold,code+id);
                 },
+                rollback(id){
+                    if(!id)return;
+                    let _this=this;
+                    axios.post('{{url('process/rollback')}}',{id:id})
+                        .then(function (response) {
+                            if(response.data.success){
+                                _this.processes.every(function (process) {
+                                    if (process.id===id){
+                                        process.status=response.data.data;
+                                        return false
+                                    }
+                                    return  true;
+                                });
+                                tempTip.setDuration(2000);
+                                tempTip.showSuccess('回滚成功!' );
+                                return;
+                            }
+                            tempTip.setDuration(3000);
+                            tempTip.show('回滚失败!未知错误!');
+                        }).catch(function (err) {
+                        tempTip.setDuration(3000);
+                        tempTip.show('回滚失败!网络错误:' + err);
+                        })
+                }
             },
         });
     </script>

+ 33 - 3
resources/views/rejected/create.blade.php

@@ -143,7 +143,7 @@
                                 <td>
                                     <div class="form-group mb-0">
                                         <label for="logistic_number" class="col-form-label text-right">原单号</label>
-                                        <button class="btn btn-outline-primary btn-sm" @click="billInputting.logistic_number='原单退回'" style="transform: scale(0.9)">原单退回</button>
+                                        <button class="btn btn-outline-primary btn-sm" @click="seek_order();billInputting.logistic_number='原单退回'" style="transform: scale(0.9)">原单退回</button>
                                         <input type="text" class="form-control" :class="[errors.logistic_number?'is-invalid':'']"
                                                data-focusOrder="7"
                                                name="logistic_number" id="logistic_number" autocomplete="off"
@@ -428,12 +428,12 @@
                 ],
                 owners:[
                         @foreach($owners as $owner)
-                    {id:'{{$owner->id}}',name:'{{$owner->name}}'},
+                    {id:'{{$owner->id}}',name:'{{$owner->name}}',code:'{{$owner->code}}'},
                     @endforeach
                 ],
                 logistics:[
                         @foreach($logistics as $logistic)
-                    {id:'{{$logistic->id}}',name:'{{$logistic->name}}'},
+                    {id:'{{$logistic->id}}',name:'{{$logistic->name}}',code:'{{$logistic->code}}'},
                     @endforeach
                 ],
                 qualityLabels:[
@@ -974,6 +974,36 @@
                         }
                     });
                 },
+                //根据退回单寻找WMS订单填充已有字段
+                seek_order(){
+                    let _this=this;
+                    let soreference5=this.billInputting.logistic_number_return;
+                    if (!soreference5) return;
+                    axios.post('{{url('apiLocal/rejectedBill/seekOrder')}}',{soreference5:soreference5})
+                        .then(function (response) {
+                            if (response.data.success){
+                                let id_owner='';
+                                let id_logistic_return='';
+                                _this.owners.every(function (owner) {
+                                    if (owner.code===response.data.data.customerid){
+                                        id_owner=owner.id;return false;
+                                    }
+                                    return  true;
+                                });
+                                _this.logistics.every(function (logistic) {
+                                    if (logistic.code===response.data.data.carrierid){
+                                        id_logistic_return=logistic.id;return false;
+                                    }
+                                    return  true;
+                                });
+                                if (id_owner) _this.billInputting.id_owner=id_owner;
+                                _this.billInputting.sender=response.data.data.c_contact;
+                                if (id_logistic_return) _this.billInputting.id_logistic_return=id_logistic_return;
+                                _this.billInputting.order_number=response.data.data.soreference1;
+                                _this.billInputting.mobile_sender=response.data.data.c_tel2;
+                            }
+                        })
+                }
             },
             filters:{
                 isLoaded:function (value) {

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

@@ -98,18 +98,22 @@
                                     </span>
                         @enderror
                     </div>
-                    <div class="form-group row">
+                    <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">
+                        <div class="col-8" style="position: relative">
                             <select name="carrier_id" class="form-control @error('carrier_id') is-invalid @enderror" :class="errors['carrier_id'] ? 'is-invalid' :''" id="carrier_id" v-model="waybillPriceModel.carrier_id" style="width: 30%; ">
                                 @foreach($carriers as $carrier)
                                     <option value="{{$carrier->id}}">{{$carrier->name}}</option>
                                 @endforeach
                             </select>
+{{--                            <div v-if="errors['carrier_id'] && errors['carrier_id'].length>0" class="invalid-feedback" role="alert" style="position: relative">--}}
+{{--                            <strong class="">@{{ errors['carrier_id'][0] }}</strong>--}}
+{{--                            </div>--}}
+                            <span class="col-sm-5" style="position: absolute;height: 15px;padding: 0">
+                                <p class="form-control-static text-danger small font-weight-bold" style="">{{ $errors->first('carrier_id') }}</p>
+                            </span>
                         </div>
-                        <div class="col-sm-5">
-                            <p class="form-control-static text-danger small font-weight-bold" style="margin-left: 50%">{{ $errors->first('carrier_id') }}</p>
-                        </div>
+
                     </div>
                     <div class="form-group row">
                         <label class="col-2 col-form-label text-right">承运商单号</label>
@@ -220,7 +224,7 @@
                     <div class="form-group row">
                         <label for="carrier_id" class="col-2 col-form-label text-right text-primary">计数</label>
                         <div class="col-5">
-                            <input type="number" class="form-control @error('mileage') is-invalid @enderror"
+                            <input type="number" class="form-control @error('amount') is-invalid @enderror"
                                    name="amount" autocomplete="off" value="@if(old('amount')){{ old('amount') }}@else{{$waybill->amount}}@endif"  >
                             @error('amount')
                             <span class="invalid-feedback" role="alert">
@@ -230,16 +234,18 @@
                         </div>
                         <label for="amount_unit_id" class=" col-form-label text-right ">单位:</label>
                         <div class="col-1.5 form-inline">
-                            <label for="amount_unit_id1" class="ml-1" :class="errors['amount_unit_id'] ? 'text-danger' :''" >件</label><input id="amount_unit_id1" type="radio" value="4" class="form-control form-control-sm ml-1"
+                            {{--:class="errors['amount_unit_id'] ? 'text-danger' :''"--}}
+                            <label for="amount_unit_id1" class="ml-1  @error('amount_unit_id') text-danger @enderror"  >件</label><input id="amount_unit_id1" type="radio" value="4" class="form-control form-control-sm ml-1"
                                                          name="amount_unit_id" v-model="waybillPriceModel.amount_unit_id">
-                            <label for="amount_unit_id1" class="ml-1" :class="errors['amount_unit_id'] ? 'text-danger' :''">托</label><input id="amount_unit_id1" type="radio" value="5" class="form-control form-control-sm ml-1"
+                            <label for="amount_unit_id1" class="ml-1 @error('amount_unit_id') text-danger @enderror"  >托</label><input id="amount_unit_id1" type="radio" value="5" class="form-control form-control-sm ml-1"
                                                          :class="errors['amount_unit_id'] ? 'is-invalid' :''" name="amount_unit_id" v-model="waybillPriceModel.amount_unit_id">
-                            @error('amount_unit_id')
-                            <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                            @enderror
                         </div>
+                        @error('amount_unit_id')
+                        <div class="col-2 form-inline">
+                            <label class="form-control-static text-danger small font-weight-bold">{{$message}}</label>
+                        </div>
+                        @enderror
+
                     </div>
                     <div class="form-group row">
                         <label for="carrier_id" class="col-2 col-form-label text-right text-primary">里程数</label>
@@ -255,7 +261,7 @@
                     </div>
                     <div v-if="type=='直发车'">
                         <div class="form-group row">
-                            <label for="carType_id" class="col-2 col-form-label text-right text-primary">车型 *</label>
+                            <label for="carType_id" class="col-2 col-form-label text-right">车型</label>
                             <div class="col-8">
                                 <select class="form-control" name="carType_id" style="width: 30%;">
                                     @foreach($carTypes as $carType)
@@ -277,7 +283,7 @@
                         </div>
                         @can('运输管理-运费')
                         <div class="form-group row">
-                            <label for="fee" class="col-2 col-form-label text-right text-primary">运费(元) *</label>
+                            <label for="fee" class="col-2 col-form-label text-right text-primary">运费(元) </label>
                             <div class="col-8">
                                 <input type="text" class="form-control @error('fee') is-invalid @enderror"
                                        name="fee" autocomplete="off" value="@if(old('fee')){{ old('fee') }}@else{{$waybill->fee}}@endif"  >
@@ -477,12 +483,17 @@
                 is_waybillPriceModel(carrier_id,carrier_weight,carrier_weight_unit_id,destination_city_id,carrier_weight_other,carrier_weight_unit_id_other){
                     this.errors=[];
                     let url='{{url('waybill/is/waybillPriceModel')}}';
+
                     let _this=this;
                     axios.post(url,{carrier_id:carrier_id,carrier_weight:[carrier_weight,carrier_weight_other],
                         carrier_weight_unit_id:[carrier_weight_unit_id,carrier_weight_unit_id_other],destination_city_id:destination_city_id})
                         .then(
                             function (response) {
-                                if (response.data.error){_this.errors=response.data.error;return;}
+
+                                if (response.data.error){
+                                    console.log(response.data.error);
+                                    _this.errors=response.data.error;return;}
+
                                 if (!response.data.success) {
                                     document.getElementById('waybillPriceModel').value='';
                                     tempTip.confirm('该目的地与计量单位对应的计费模型不存在,如录入将会标为异常记录,请通知相关负责人添加计费模型,点击'+'<b class="text-primary">"确定"</b>'+'则确认提交 ',

+ 1 - 3
resources/views/waybill/index.blade.php

@@ -112,7 +112,7 @@
                         </td>
                         <td></td>
                     </tr>
-                    <tr>
+                     <tr>
                         <td colspan="6">
                             <span class="dropdown">
                                 <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
@@ -885,8 +885,6 @@
                     let id =  idstr.substr( idstr.indexOf('_')+1);
                     if (!confirm('确定要删除所选图片吗?'))return;
                     this.destroyImg([id]);
-                    this.$forceUpdate();
-
                 },
                 deleteImg(){
                     if (this.checkData.length <= 0) {

+ 1 - 0
routes/apiLocal.php

@@ -18,6 +18,7 @@ Route::post('rejectedBill/update', 'RejectedBillController@apiUpdate');
 Route::post('rejectedBill/apiGetRecent', 'RejectedBillController@apiGetRecent');
 Route::post('rejectedBill/apiSetIsLoadedAll', 'RejectedBillController@apiSetIsLoadedAll');
 Route::post('rejectedBill/apiConfirmBeStored', 'RejectedBillController@apiConfirmBeStored');
+Route::post('rejectedBill/seekOrder','RejectedBillController@seekOrder');
 
 Route::post('logistic/numberFeatures/computeLogisticByNumber', 'LogisticNumberFeatureController@apiComputeLogisticByNumber');
 Route::post('logistic/logisticNumberReturnIsUnique', 'RejectedBillController@apiLogisticNumberReturnIsUnique');

+ 2 - 1
routes/web.php

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

+ 3 - 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/app200519b.css');
+    .sass('resources/sass/app.scss', 'public/css/app200630.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');
 
@@ -20,3 +20,5 @@ mix.copy('resources/sass/fonts/','public/fonts');
 mix.copy('resources/icon','public/icon');
 mix.copy('resources/images','public/images');
 mix.copy('resources/icon/faviconc.ico','public/faviconc.ico');
+mix.js('resources/js/trix.js','public/js/trix.js');
+mix.copy('resources/sass/trix.css','public/css/trix.css');

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 655 - 437
yarn.lock


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä