Bladeren bron

添加仓库/劳务所表并在基础设置中添加对应功能

haozi 6 jaren geleden
bovenliggende
commit
94016d7fbf
38 gewijzigde bestanden met toevoegingen van 1161 en 90 verwijderingen
  1. 118 0
      app/Http/Controllers/LaborCompanyController.php
  2. 58 3
      app/Http/Controllers/LaborReportController.php
  3. 1 1
      app/Http/Controllers/PersonnelController.php
  4. 1 1
      app/Http/Controllers/UserDutyCheckController.php
  5. 11 8
      app/Http/Controllers/UserLaborController.php
  6. 2 1
      app/Http/Controllers/UserWorkGroupController.php
  7. 58 20
      app/Http/Controllers/WarehouseController.php
  8. 14 0
      app/LaborCompany.php
  9. 3 0
      app/LaborReport.php
  10. 1 3
      app/UserDetail.php
  11. 4 1
      app/UserLabor.php
  12. 4 0
      app/UserWorkgroup.php
  13. 4 0
      app/Warehouse.php
  14. 1 1
      database/migrations/2019_11_22_094253_create_cities_table.php
  15. 1 1
      database/migrations/2020_05_22_114410_create_labor_reports_table.php
  16. 33 0
      database/migrations/2020_05_22_172739_create_labor_companies_table.php
  17. 35 0
      database/migrations/2020_05_22_173230_change_user_labors_table.php
  18. 49 0
      database/migrations/2020_05_25_091228_add_labor_company_authority.php
  19. 33 0
      database/migrations/2020_05_25_152252_change_user_workgroup.php
  20. 1 6
      public/js/app.js
  21. 1 1
      resources/views/layouts/menu.blade.php
  22. 38 0
      resources/views/maintenance/laborCompany/create.blade.php
  23. 44 0
      resources/views/maintenance/laborCompany/edit.blade.php
  24. 83 0
      resources/views/maintenance/laborCompany/index.blade.php
  25. 16 0
      resources/views/maintenance/laborCompany/menu.blade.php
  26. 8 0
      resources/views/maintenance/menu.blade.php
  27. 28 18
      resources/views/maintenance/userLabor/edit.blade.php
  28. 1 1
      resources/views/maintenance/userLabor/show.blade.php
  29. 3 1
      resources/views/maintenance/userWorkGroup/index.blade.php
  30. 50 0
      resources/views/maintenance/warehouse/create.blade.php
  31. 56 0
      resources/views/maintenance/warehouse/edit.blade.php
  32. 85 0
      resources/views/maintenance/warehouse/index.blade.php
  33. 16 0
      resources/views/maintenance/warehouse/menu.blade.php
  34. 20 20
      resources/views/personnel/checking-in/clockAudit.blade.php
  35. 2 2
      resources/views/personnel/checking-in/menuChecking-in.blade.php
  36. 268 0
      resources/views/personnel/laborReport/index.blade.php
  37. 5 1
      resources/views/personnel/menu.blade.php
  38. 5 0
      routes/web.php

+ 118 - 0
app/Http/Controllers/LaborCompanyController.php

@@ -0,0 +1,118 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\LaborCompany;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
+
+class LaborCompanyController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        if(!Gate::allows('劳务所-查询')){ return redirect(url('/'));  }
+        $laborCompanys=LaborCompany::orderBy('id','desc')->paginate(35);
+        return view('maintenance.laborCompany.index',['laborCompanys'=>$laborCompanys]);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        if(!Gate::allows('劳务所-录入')){ return redirect(url('/'));  }
+        return view('maintenance.laborCompany.create');
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function store(Request $request)
+    {
+        if(!Gate::allows('劳务所-录入')){ return redirect(url('/'));  }
+        $this->validatorCreate($request->all())->validate();
+        $laborCompany=new LaborCompany($request->all());
+        $laborCompany->save();
+
+        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
+        return redirect('maintenance/laborCompany/create')->with('successTip',"成功录入劳务所“{$request->input('name')}”");
+    }
+    protected function validatorCreate(array $data)
+    {
+        return Validator::make($data, [
+            'name' => ['required', 'string', 'max:50', 'unique:labor_companies'],
+        ]);
+    }
+    protected function validatorUpdate(array $data)
+    {
+        return Validator::make($data, [
+            'name' => ['required', 'string', 'max:50'],
+        ]);
+    }
+    /**
+     * Display the specified resource.
+     *
+     * @param  $laborCompany
+     * @return
+     */
+    public function show(LaborCompany $laborCompany)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  $laborCompany
+     * @return
+     */
+    public function edit(LaborCompany $laborCompany)
+    {
+        if(!Gate::allows('劳务所-编辑')){ return redirect(url('/'));  }
+        return view('maintenance.laborCompany.edit',['laborCompany'=>$laborCompany]);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param Request $request
+     * @param  $laborCompany
+     * @return
+     */
+    public function update(Request $request, LaborCompany $laborCompany)
+    {
+        if(!Gate::allows('劳务所-编辑')){ return redirect(url('/'));  }
+        $this->validatorUpdate($request->all())->validate();
+        $laborCompany->fill($request->all());
+        $laborCompany->update();
+        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
+        return redirect('maintenance/laborCompany/')->with('successTip',"成功修改劳务所“{$laborCompany['name']}”!");
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  $laborCompany
+     * @return array
+     * @throws
+     */
+    public function destroy(LaborCompany $laborCompany)
+    {
+        if(!Gate::allows('物流公司-删除')){ return redirect(url('/'));  }
+        $this->log(__METHOD__,__FUNCTION__,$laborCompany->toJson(),Auth::user()['id']);
+        $re=$laborCompany->delete();
+        return ['success'=>$re];
+    }
+}

+ 58 - 3
app/Http/Controllers/LaborReportController.php

@@ -3,18 +3,73 @@
 namespace App\Http\Controllers;
 
 use App\LaborReport;
+use App\UserWorkgroup;
+use Carbon\Carbon;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
 
 class LaborReportController extends Controller
 {
+    //超15天精确查询抽离 cloumn前提:数据库字段名必须与request内字段名一致
+    public function preciseQuery(string $column,Request $request,$laborReports){
+        $today=Carbon::now()->subDays(15);
+        $laborReportsTem=clone $laborReports;
+        $laborReportsTem=$laborReportsTem->where($column,'like','%'.$request->input($column).'%')->where('created_at','>',$today->format('Y-m-d'));
+        if($laborReportsTem->count()==0
+            ||$laborReportsTem->first()[$column]==$request->input($column)){
+            $laborReports=$laborReports->where($column,$request->input($column));
+        }else{
+            $laborReports=$laborReportsTem;
+        }
+        return $laborReports;
+    }
+
+    public function conditionQuery(Request $request,$laborReports){
+        if ($request->input('enter_number')){
+            $laborReports=$this->preciseQuery('enter_number',$request,$laborReports);
+        }
+        if ($request->input('name')){
+            $laborReports=$this->preciseQuery('name',$request,$laborReports);
+        }
+        if ($request->input('created_at_start')){
+            $created_at_start=$request->input('created_at_start')." 00:00:00";
+            $laborReports=$laborReports->where('created_at','>=',$created_at_start);
+        }
+        if ($request->input('created_at_end')){
+            $created_at_end=$request->input('created_at_end')." 23:59:59";
+            $laborReports=$laborReports->where('created_at','<=',$created_at_end);
+        }
+        if ($request->input('mobile_phone')){
+            $laborReports=$laborReports->where('mobile_phone',$request->input('mobile_phone'));
+        }
+        if ($request->input('mobile_phone')){
+            $laborReports=$laborReports->where('mobile_phone',$request->input('mobile_phone'));
+        }
+        if ($request->input('identify_number')){
+            $laborReports=$this->preciseQuery('identify_number',$request,$laborReports);
+        }
+        return $laborReports;
+    }
     /**
      * Display a listing of the resource.
-     *
+     *@param  \Illuminate\Http\Request  $request
      * @return \Illuminate\Http\Response
+     * 临时工报表
      */
-    public function index()
+    public function index(Request $request)
     {
-        //
+        if (!Gate::allows('人事管理-临时工报表 ')){return redirect(url('/')); }
+        if ($request->input()){
+            $laborReports=LaborReport::orderBy('id','DESC');
+            $laborReports=$this->conditionQuery($request,$laborReports);
+            $laborReports=$laborReports->paginate($request->input('paginate')?$request->input('paginate'):50);
+            $userWorkGroups=UserWorkgroup::select('id','name')->get();
+            return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input()]);
+        }
+        $laborReports=LaborReport::orderBy('id','DESC')->paginate(50);
+        $userWorkGroups=UserWorkgroup::select('id','name')->get();
+        return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,]);
+
     }
 
     /**

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

@@ -142,7 +142,7 @@ class PersonnelController extends Controller
         })->get();
         $user_ids=array_column($users->toArray(),'id');
         $date=date('Y-m-d');
-        $userDutyChecks=UserDutyCheck::with('userDetail.user.userWorkgroups')->whereIn("user_id",$user_ids)
+        $userDutyChecks=UserDutyCheck::with(['userDetail.user.userWorkgroups','userDetail.user_labor.laborCompany'])->whereIn("user_id",$user_ids)
             ->where('checked_at','like',$date."%")->get();
         return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'workgroupSign'=>$result['workgroupSign']]);
     }

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

@@ -129,7 +129,7 @@ class UserDutyCheckController extends Controller
         $userDetail->save();
         $userLabor=new UserLabor([
             'user_id'=>$user->id,
-            'company'=>$request->input('company'),
+            'labor_company_id'=>$request->input('labor_company_id'),
         ]);
         $userLabor->save();
         $userDutyCheck=$this->dutyCheck($user->id);

+ 11 - 8
app/Http/Controllers/UserLaborController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\LaborCompany;
 use App\ProcessDailyParticipant;
 use App\User;
 use App\UserDetail;
@@ -65,7 +66,7 @@ class UserLaborController extends Controller
     public function show($id)
     {
         if(!Gate::allows('临时工-查询')){ return redirect(url('/'));  }
-        $userLabor=UserLabor::with('userDetail')->find($id);
+        $userLabor=UserLabor::with(['userDetail','laborCompany'])->find($id);
         return view('maintenance.userLabor.show',['userLabor'=>$userLabor]);
     }
     //获取劳务记录
@@ -95,8 +96,9 @@ class UserLaborController extends Controller
     public function edit($id)
     {
         if(!Gate::allows('临时工-编辑')){ return redirect(url('/'));  }
-        $userLabor=UserLabor::with('userDetail')->find($id);
-        return view('maintenance.userLabor.edit',['userLabor'=>$userLabor]);
+        $userLabor=UserLabor::with(['userDetail','laborCompany'])->find($id);
+        $laborCompanies=LaborCompany::select('id','name')->get();
+        return view('maintenance.userLabor.edit',['userLabor'=>$userLabor,'laborCompanies'=>$laborCompanies,]);
     }
 
     /**
@@ -115,7 +117,7 @@ class UserLaborController extends Controller
             'gender'=>['required',Rule::in(['男', '女']),],
             'identity_number'=>'nullable',
             'default_hour_price'=>'nullable|min:0|max:999999|numeric',
-            'company'=>'nullable',
+            'name'=>'nullable',
         ],[
             'required'=>':attribute 不应为空',
             'min'=>':attribute 不得为0或为负',
@@ -128,7 +130,7 @@ class UserLaborController extends Controller
             'gender'=>'性别',
             'identity_number'=>'身份证号',
             'default_hour_price'=>'默认计时工资',
-            'company'=>'劳务所',
+            'name'=>'劳务所',
         ])->validate();
         $userDetail=UserDetail::find($id);
         $userDetail->full_name=$request->input('full_name');
@@ -138,11 +140,12 @@ class UserLaborController extends Controller
         $userDetail->update();
         $this->log(__METHOD__,"修改用户详情".__FUNCTION__,json_encode($userDetail),Auth::user()['id']);
         $default_hour_price=$request->input('default_hour_price');
-        $company=$request->input('company');
+        $laborCompanyName=$request->input('name');
+        $labor_company_id=LaborCompany::where('name','=',$laborCompanyName)->value('id');
         $userLabor=UserLabor::find($id);
-        if ($userLabor->default_hour_price!=$default_hour_price || $userLabor->company!=$company){
+        if ($userLabor->default_hour_price!=$default_hour_price || $userLabor->labor_company_id!=$labor_company_id){
             $userLabor->default_hour_price=$default_hour_price;
-            $userLabor->company=$company;
+            $userLabor->labor_company_id=$labor_company_id;
             $userLabor->update();
             $this->log(__METHOD__,"修改临时工".__FUNCTION__,json_encode($userLabor),Auth::user()['id']);
         }

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

@@ -14,7 +14,8 @@ class UserWorkgroupController extends Controller
     public function index()
     {
         if(!Gate::allows('工作组-查询')){ return redirect(url('/'));  }
-        $UserWorkgroups=UserWorkgroup::orderBy('id',"DESC")->paginate(50);
+        $UserWorkgroups=UserWorkgroup::with('wareHouse')->orderBy('id',"DESC")->paginate(50);
+        //dd($UserWorkgroups);
         return view('maintenance.userWorkgroup.index',['userWorkgroups'=>$UserWorkgroups]);
     }
 

+ 58 - 20
app/Http/Controllers/WarehouseController.php

@@ -2,47 +2,75 @@
 
 namespace App\Http\Controllers;
 
+
 use App\Warehouse;
+use Exception;
 use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
 
 class WarehouseController extends Controller
 {
     /**
      * Display a listing of the resource.
      *
-     * @return \Illuminate\Http\Response
+     * @return Response
      */
     public function index()
     {
-        //
+        if(!Gate::allows('仓库-查询')){ return redirect(url('/'));  }
+        $warehouses=Warehouse::orderBy('id','desc')->paginate(35);
+        return view('maintenance.warehouse.index',['warehouses'=>$warehouses]);
     }
 
     /**
      * Show the form for creating a new resource.
      *
-     * @return \Illuminate\Http\Response
+     * @return Response
      */
     public function create()
     {
-        //
+        if(!Gate::allows('仓库-录入')){ return redirect(url('/'));  }
+        return view('maintenance.warehouse.create');
     }
 
     /**
      * Store a newly created resource in storage.
      *
-     * @param  \Illuminate\Http\Request  $request
-     * @return \Illuminate\Http\Response
+     * @param Request $request
+     * @return Response
      */
     public function store(Request $request)
     {
-        //
-    }
+        if(!Gate::allows('仓库-录入')){ return redirect(url('/'));  }
+        $this->validatorCreate($request->all())->validate();
+        $warehouse=new Warehouse($request->all());
+        $warehouse->save();
 
+        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
+        return redirect('maintenance/warehouse/create')->with('successTip',"成功录入仓库“{$request->input('name')}”");
+    }
+    protected function validatorCreate(array $data)
+    {
+        return Validator::make($data, [
+            'name' => ['required', 'string', 'max:50', 'unique:warehouses'],
+            'code' => ['nullable', 'string', 'max:50', 'unique:warehouses,code'],
+        ]);
+    }
+    protected function validatorUpdate(array $data)
+    {
+        return Validator::make($data, [
+            'name' => ['required', 'string', 'max:50'],
+            'code' => ['nullable', 'string', 'max:50'],
+        ]);
+    }
     /**
      * Display the specified resource.
      *
-     * @param  \App\Warehouse  $warehouse
-     * @return \Illuminate\Http\Response
+     * @param Warehouse $warehouse
+     * @return Response
      */
     public function show(Warehouse $warehouse)
     {
@@ -52,34 +80,44 @@ class WarehouseController extends Controller
     /**
      * Show the form for editing the specified resource.
      *
-     * @param  \App\Warehouse  $warehouse
-     * @return \Illuminate\Http\Response
+     * @param Warehouse $warehouse
+     * @return Response
      */
     public function edit(Warehouse $warehouse)
     {
-        //
+        if(!Gate::allows('仓库-编辑')){ return redirect(url('/'));  }
+        return view('maintenance.warehouse.edit',['warehouse'=>$warehouse]);
     }
 
     /**
      * Update the specified resource in storage.
      *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \App\Warehouse  $warehouse
-     * @return \Illuminate\Http\Response
+     * @param Request $request
+     * @param Warehouse $warehouse
+     * @return Response
      */
     public function update(Request $request, Warehouse $warehouse)
     {
-        //
+        if(!Gate::allows('仓库-编辑')){ return redirect(url('/'));  }
+        $this->validatorUpdate($request->all())->validate();
+        $warehouse->fill($request->all());
+        $warehouse->update();
+        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
+        return redirect('maintenance/warehouse/')->with('successTip',"成功修改仓库“{$warehouse['name']}”!");
     }
 
     /**
      * Remove the specified resource from storage.
      *
-     * @param  \App\Warehouse  $warehouse
-     * @return \Illuminate\Http\Response
+     * @param Warehouse $warehouse
+     * @return array|Response
+     * @throws Exception
      */
     public function destroy(Warehouse $warehouse)
     {
-        //
+        if(!Gate::allows('仓库-删除')){ return redirect(url('/'));  }
+        $this->log(__METHOD__,__FUNCTION__,$warehouse->toJson(),Auth::user()['id']);
+        $re=$warehouse->delete();
+        return ['success'=>$re];
     }
 }

+ 14 - 0
app/LaborCompany.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+class LaborCompany extends Model
+{
+    use ModelTimeFormat;
+    protected $fillable=[
+        'id','name',
+    ];
+}

+ 3 - 0
app/LaborReport.php

@@ -2,10 +2,13 @@
 
 namespace App;
 
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
 class LaborReport extends Model
 {
+    use ModelTimeFormat;
+
     protected $fillable=[
         'id','enter_number','user_workgroup_id','user_id','name','mobile_phone','identity_number','labor_company','check_in_at','verify_at','check_out_at','online_duration','working_duration'
     ];

+ 1 - 3
app/UserDetail.php

@@ -27,11 +27,9 @@ class UserDetail extends Model
     public function userDutyChecks(){
         return $this->hasMany('App\UserDutyCheck','user_id','user_id');
     }
-
-
     public function getUserLaborCompanyAttribute()
     {
-        return $this['user_labor'] ?$this['user_labor']['company'] : null;
+        return $this['user_labor'] ?$this['user_labor']['labor_company_id'] : null;
     }
 
 

+ 4 - 1
app/UserLabor.php

@@ -13,11 +13,14 @@ class UserLabor extends Model
     public $timestamps=false;
 
     protected $fillable=[
-        'user_id','default_hour_price','company'
+        'user_id','default_hour_price','labor_company_id'
     ];
 
     public function userDetail(){
         return $this->belongsTo('App\UserDetail','user_id','user_id');
     }
+    public  function laborCompany(){
+        return $this->belongsTo('App\LaborCompany');
+    }
 
 }

+ 4 - 0
app/UserWorkgroup.php

@@ -12,4 +12,8 @@ class UserWorkgroup extends Model
     public function users(){
         return $this->belongsToMany('App\User','user_workgroup_user','user_workgroup_id','user_id');
     }
+    public  function wareHouse(){
+        return $this->belongsTo('App\Warehouse','warehouse_id','id');
+    }
+
 }

+ 4 - 0
app/Warehouse.php

@@ -9,4 +9,8 @@ class Warehouse extends Model
 {
     use ModelTimeFormat;
     protected $fillable=['name','code'];
+
+    public function userWorkgroups(){
+        return $this->hasMany('App\UserWorkgroup');
+    }
 }

+ 1 - 1
database/migrations/2019_11_22_094253_create_cities_table.php

@@ -329,7 +329,7 @@ class CreateCitiesTable extends Migration
             }
             if ($provinces[$i]=="上海"){
                 $province=\App\Province::where('name','=',$provinces[$i])->first();
-                for ($j=0;$j<count($Hainan);$j++){
+                for ($j=0;$j<count($ShangHai);$j++){
                     \App\City::create([
                         'province_id'=>$province->id,
                         'name'=>$ShangHai[$j],

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

@@ -17,7 +17,7 @@ class CreateLaborReportsTable extends Migration
             $table->bigIncrements('id');
             $table->string('enter_number')->index()->comment('进厂编号');
             $table->bigInteger('user_workgroup_id')->index()->comment('外键用户组');
-            $table->bigInteger('user_id')->unique()->index()->comment('外键用户');
+            $table->bigInteger('user_id')->index()->comment('外键用户');
             $table->string('name')->index()->comment('临时工名称');
             $table->string('mobile_phone')->nullable()->index()->comment('手机号');
             $table->string('identity_number')->nullable()->index()->comment('身份证号');

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

@@ -0,0 +1,33 @@
+<?php
+use App\LaborCompany;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateLaborCompaniesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('labor_companies', function (Blueprint $table) {
+            $table->bigIncrements('id')->comment('劳务所id');
+            $table->string('name')->unique()->comment('劳务所名称');
+            $table->timestamps();
+        });
+        (new LaborCompany(['name'=>'其他']))->save();
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('labor_companies');
+    }
+}

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

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeUserLaborsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+
+        Schema::dropIfExists('user_labors');
+        Schema::create('user_labors', function (Blueprint $table) {
+            $table->bigInteger('user_id')->unique()->comment('外键用户');
+            $table->decimal('default_hour_price')->nullable()->comment('默认计时工资');
+            $table->bigInteger('labor_company_id')->nullable()->index()->comment('外键劳务所');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        Schema::dropIfExists('user_labors');
+    }
+}

+ 49 - 0
database/migrations/2020_05_25_091228_add_labor_company_authority.php

@@ -0,0 +1,49 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddLaborCompanyAuthority extends Migration
+{
+
+    protected $authNames=[
+
+        '人事管理-临时工报表',
+        '劳务所',
+        '劳务所-查询',
+        '劳务所-编辑',
+        '劳务所-录入',
+        '劳务所-删除',
+        '仓库',
+        '仓库-查询',
+        '仓库-编辑',
+        '仓库-录入',
+        '仓库-删除',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+    }
+}

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

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeUserWorkgroup extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('user_workgroups', function (Blueprint $table) {
+            $table->bigInteger('warehouse_id')->unique()->comment('外键到工作组');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        Schema::table('user_workgroups', function (Blueprint $table) {
+            $table->dropColumn('warehouse_id');
+        });
+    }
+}

+ 1 - 6
public/js/app.js

@@ -61384,13 +61384,8 @@ module.exports = tempTip;
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-<<<<<<< HEAD
 __webpack_require__(/*! D:\wamp64\www\bswas\resources\js\app.js */"./resources/js/app.js");
 module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
-=======
-__webpack_require__(/*! D:\Demo\bswas\resources\js\app.js */"./resources/js/app.js");
-module.exports = __webpack_require__(/*! D:\Demo\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
->>>>>>> a4259218bf9c09e3c74b866fff9c0611be710e25
 
 
 /***/ }),
@@ -61406,4 +61401,4 @@ module.exports = __webpack_require__(/*! D:\Demo\bswas\resources\sass\app.scss *
 
 /***/ })
 
-/******/ });
+/******/ });

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

@@ -17,7 +17,7 @@
             <li class="nav-item"><a href="{{url("process/")}}" class="nav-link"
                                     :class="{active:isActive('process',1)}">二次加工管理</a></li> @endcan
         @can('人事管理')
-            <li class="nav-item"><a href="{{url("personnel/checking-in/createReplenishClock")}}" class="nav-link"
+            <li class="nav-item"><a href="{{url("personnel/laborReport")}}" class="nav-link"
                                     :class="{active:isActive('personnel',1)}">人事管理</a></li> @endcan
         @can('基础设置')
         <li class="nav-item"><a href="{{url("maintenance/")}}" class="nav-link"

+ 38 - 0
resources/views/maintenance/laborCompany/create.blade.php

@@ -0,0 +1,38 @@
+@extends('layouts.app')
+@section('title')创建劳务所@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.laborCompany.menu')@endcomponent
+    </div>
+    <div class="container-fluid">
+        <div class="card col-md-8 offset-md-2">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                @endif
+                <form method="POST" action="{{ url('maintenance/laborCompany') }}">
+                    @csrf
+                    <div class="form-group row">
+                        <label for="name" class="col-2 col-form-label text-right">劳务所名称</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('name') is-invalid @enderror"
+                                   name="name" autocomplete="off" value="{{ old('name') }}" required>
+                            @error('name')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <div class="col-8 offset-2">
+                            <input type="submit" class="btn btn-success form-control">
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection

+ 44 - 0
resources/views/maintenance/laborCompany/edit.blade.php

@@ -0,0 +1,44 @@
+@extends('layouts.app')
+@section('title')编辑劳务所@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('maintenance.menu')
+        @endcomponent
+        @component('maintenance.laborCompany.menu')
+                <li class="nav-item">
+                    <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('edit',4)}">修改</a>
+                </li>
+        @endcomponent
+    </div>
+    <div class="container-fluid">
+        <div class="card">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}!</div>
+                @endif
+                <form method="POST" action='{{url("maintenance/laborCompany/{$laborCompany->id}")}}'>
+                    @csrf
+                    @method('PUT')
+                    <div class="form-group row">
+                        <label for="name" class="col-2 col-form-label text-right">劳务所名称</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('name') is-invalid @enderror"
+                                   name="name" autocomplete="off" value="@if(old('name')){{old('name')}}@else{{$laborCompany->name}}@endif" required>
+                            @error('name')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <div class="col-8 offset-2">
+                            <input type="submit" class="btn btn-outline-dark form-control">
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection

+ 83 - 0
resources/views/maintenance/laborCompany/index.blade.php

@@ -0,0 +1,83 @@
+@extends('layouts.app')
+@section('title')劳务所@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.laborCompany.menu')@endcomponent
+    </span>
+    <div class="container-fluid">
+        <div class="card">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                @endif
+                <table class="table table-striped table-sm" id="list">
+                    <tr>
+                        <th>ID</th>
+                        <th>劳务所名</th>
+                        <th>创建时间</th>
+                        <th>操作</th>
+                    </tr>
+                    <tr v-for="laborCompany in laborCompanys">
+                        <td class="text-muted">@{{laborCompany.id}}</td>
+                        <td>@{{laborCompany.name}}</td>
+                        <td class="text-muted">@{{laborCompany.created_at}}</td>
+                        <td>
+                            @can('劳务所-编辑')
+                            <button class="btn btn-sm btn-outline-primary" @click="edit(laborCompany.id)">改</button> @endcan
+                            @can('劳务所-删除')
+                            <button class="btn btn-sm btn-outline-dark" @click="destroy(laborCompany)">删</button> @endcan
+                        </td>
+                    </tr>
+                </table>
+                {{$laborCompanys->links()}}
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:"#list",
+            data:{
+                laborCompanys:[
+                    @foreach( $laborCompanys as $laborCompany )
+                    {id:'{{$laborCompany->id}}',name:'{{$laborCompany->name}}',created_at:'{{$laborCompany->created_at}}'},
+                    @endforeach
+                ],
+            },
+            methods:{
+                edit:function(id){
+                    location.href = "{{url('maintenance/laborCompany')}}/"+id+"/edit";
+                },
+                destroy:function(laborCompany){
+                    if(!confirm('确定要删除劳务所“' + laborCompany.name + '”吗?')){return};
+                    let data=this;
+                    let url = "{{url('maintenance/laborCompany')}}/"+laborCompany.id;
+                    axios.delete(url,{id:laborCompany.id})
+                        .then(function (response) {
+                            if(response.data.success){
+                                for (let i = 0; i < data.laborCompanys.length; i++) {
+                                    if (data.laborCompanys[i].id===laborCompany.id){
+                                        data.laborCompanys.splice(i,1);
+                                        break;
+                                    }
+                                }
+                                tempTip.setDuration(1000);
+                                tempTip.showSuccess('删除劳务所"'+laborCompany.name+'"成功!')
+                            }else{
+                                tempTip.setDuration(1000);
+                                tempTip.show('删除劳务所"'+laborCompany.name+'"失败!')
+                            }
+                        })
+                        .catch(function (err) {
+                            tempTip.setDuration(3000);
+                            tempTip.show('删除物流公司失败!'+'网络错误:' + err)
+                        });
+                },
+            }
+        });
+    </script>
+@endsection

+ 16 - 0
resources/views/maintenance/laborCompany/menu.blade.php

@@ -0,0 +1,16 @@
+
+<div class="container-fluid nav3">
+    <div class="card" >
+        <ul class="nav nav-pills">
+            @can('劳务所-查询')
+            <li class="nav-item">
+                <a class="nav-link" href="{{url('maintenance/laborCompany')}}" :class="{active:isActive('',3)}">查询</a>
+            </li> @endcan
+            @can('劳务所-录入')
+            <li class="nav-item">
+                <a class="nav-link" href="{{url('maintenance/laborCompany/create')}}" :class="{active:isActive('create',3)}">录入</a>
+            </li> @endcan
+            {{$slot}}
+        </ul>
+    </div>
+</div>

+ 8 - 0
resources/views/maintenance/menu.blade.php

@@ -18,6 +18,10 @@
                 <li class="nav-item">
                     <a class="nav-link" href="{{url('maintenance/userWorkgroup')}}" :class="{active:isActive('userWorkgroup',2)}">工作组</a>
                 </li> @endcan
+            @can('仓库')
+                <li class="nav-item">
+                    <a class="nav-link text-muted" href="{{url('maintenance/warehouse')}}" :class="{active:isActive('warehouse',2)}">仓库</a>
+                </li> @endcan
             @can('货主')
                 <li class="nav-item">
                     <a class="nav-link text-dark" href="{{url('maintenance/owner')}}" :class="{active:isActive('owner',2)}">货主</a>
@@ -74,6 +78,10 @@
                 <li class="nav-item">
                     <a class="nav-link text-muted" href="{{url('maintenance/userLabor')}}" :class="{active:isActive('userLabor',2)}">临时工</a>
                 </li> @endcan
+            @can('劳务所')
+                <li class="nav-item">
+                    <a class="nav-link text-muted" href="{{url('maintenance/laborCompany')}}" :class="{active:isActive('laborCompany',2)}">劳务所</a>
+                </li> @endcan
             @can('日志')
                 <li class="nav-item">
                     <a class="nav-link text-muted" href="{{url('maintenance/log')}}" :class="{active:isActive('log',2)}">日志</a>

+ 28 - 18
resources/views/maintenance/userLabor/edit.blade.php

@@ -66,11 +66,15 @@
                     @enderror
                 </div>
                 <div class="form-group row">
-                    <label for="company" class="form-check-label col-3 pull-left">劳务所:</label>
-                    <input name="company" :value="userLabor.company" id="company" class="@error('company') is-invalid @enderror col-7 form-control" type="text">
-                    @error('company')
+                    <label for="name" class="form-check-label col-3 pull-left">劳务所:</label>
+{{--                    <input name="id" :value="userLabor.laborCompanyName" id="id" class="@error('id') is-invalid @enderror col-7 form-control" type="text">--}}
+                    <select name="name" id="name" class="@error('name') is-invalid @enderror col-7 form-control" type="text" >
+                        <option selected>@{{ userLabor.laborCompanyName }}</option>
+                        <option v-for="laborCompany in laborCompanies" >@{{ laborCompany.name }}</option>
+                    </select>
+                    @error('name')
                     <span class="invalid-feedback col-7 offset-3 mt-0" role="alert">
-                    <strong>{{ $errors->first('company') }}</strong>
+                    <strong>{{ $errors->first('name') }}</strong>
                     </span>
                     @enderror
                 </div>
@@ -83,17 +87,23 @@
 @endsection
 
 @section('lastScript')
-<script>
-    new Vue({
-        el:"#edit",
-        data:{
-            userLabor:{full_name:"{{old('full_name')??$userLabor->userDetail->full_name}}",
-                mobile_phone:'{{old('mobile_phone')??$userLabor->userDetail->mobile_phone}}',
-                gender:'{{old('gender')??$userLabor->userDetail->gender}}',
-                identity_number:'{{old('identity_number')??$userLabor->userDetail->identity_number}}',
-                default_hour_price:'{{old('default_hour_price')??$userLabor->default_hour_price}}',
-                company:'{{old('company')??$userLabor->company}}'},
-        },
-    });
-</script>
-@endsection
+    <script>
+        new Vue({
+            el:"#edit",
+            data:{
+                userLabor:{full_name:"{{old('full_name')??$userLabor->userDetail->full_name}}",
+                    mobile_phone:'{{old('mobile_phone')??$userLabor->userDetail->mobile_phone}}',
+                    gender:'{{old('gender')??$userLabor->userDetail->gender}}',
+                    identity_number:'{{old('identity_number')??$userLabor->userDetail->identity_number}}',
+                    default_hour_price:'{{old('default_hour_price')??$userLabor->default_hour_price}}',
+                    laborCompanyName:'{{old('name')??$userLabor->laborCompany->name}}'},
+                laborCompanies:[
+                        @foreach( $laborCompanies as $laborCompany )
+                        {id:'{{$laborCompany->id}}',name:'{{$laborCompany->name}}',},
+                        @endforeach
+                ],
+
+            },
+        });
+    </script>
+@endsection

+ 1 - 1
resources/views/maintenance/userLabor/show.blade.php

@@ -31,7 +31,7 @@
                     </tr>
                     <tr>
                         <td>劳务所</td>
-                        <td>@{{ userLabor.company }}</td>
+                        <td><b v-if="userLabor.labor_company">@{{ userLabor.labor_company.name }}</b></td>
                     </tr>
                     <tr>
                         <td>工资/工时</td>

+ 3 - 1
resources/views/maintenance/userWorkGroup/index.blade.php

@@ -15,12 +15,14 @@
                 <table class="table table-striped table-sm" id="list">
                     <tr>
                         <th>ID</th>
+                        <th>仓库</th>
                         <th>名称</th>
                         <th>录入时间</th>
                         <th>操作</th>
                     </tr>
                     <tr v-for="userWorkgroup in userWorkgroups">
                         <td class="text-muted">@{{userWorkgroup.id}}</td>
+                        <td v-if="userWorkgroup.warehouse">@{{userWorkgroup.warehouseName}}</td>
                         <td>@{{userWorkgroup.name}}</td>
                         <td class="text-muted">@{{userWorkgroup.created_at}}</td>
                         <td>
@@ -44,7 +46,7 @@
             data:{
                 userWorkgroups:[
                     @foreach($userWorkgroups as $userWorkgroup)
-                    {!! $userWorkgroup !!},
+                    {id:'{{$userWorkgroup->id}}',name:'{{$userWorkgroup->name}}',warehouse:'{{$userWorkgroup->warehouse}}',created_at:'{{$userWorkgroup->created_at}}',warehouseName:'{{$userWorkgroup->warehouse['name']}}'},
                     @endforeach
                 ],
             },

+ 50 - 0
resources/views/maintenance/warehouse/create.blade.php

@@ -0,0 +1,50 @@
+@extends('layouts.app')
+@section('title')创建仓库@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.warehouse.menu')@endcomponent
+    </div>
+    <div class="container-fluid">
+        <div class="card col-md-8 offset-md-2">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                @endif
+                <form method="POST" action="{{ url('maintenance/warehouse') }}">
+                    @csrf
+                    <div class="form-group row">
+                        <label for="name" class="col-2 col-form-label text-right">仓库名称</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('name') is-invalid @enderror"
+                                   name="name" autocomplete="off" value="{{ old('name') }}" required>
+                            @error('name')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="code" class="col-2 col-form-label text-right">仓库代码</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('code') is-invalid @enderror"
+                                   name="code" autocomplete="off" value="{{ old('code') }}" required>
+                            @error('code')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <div class="col-8 offset-2">
+                            <input type="submit" class="btn btn-success form-control">
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection

+ 56 - 0
resources/views/maintenance/warehouse/edit.blade.php

@@ -0,0 +1,56 @@
+@extends('layouts.app')
+@section('title')编辑仓库@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('maintenance.menu')
+        @endcomponent
+        @component('maintenance.warehouse.menu')
+                <li class="nav-item">
+                    <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('edit',4)}">修改</a>
+                </li>
+        @endcomponent
+    </div>
+    <div class="container-fluid">
+        <div class="card">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}!</div>
+                @endif
+                <form method="POST" action='{{url("maintenance/warehouse/{$warehouse->id}")}}'>
+                    @csrf
+                    @method('PUT')
+                    <div class="form-group row">
+                        <label for="name" class="col-2 col-form-label text-right">仓库名称</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('name') is-invalid @enderror"
+                                   name="name" autocomplete="off" value="@if(old('name')){{old('name')}}@else{{$warehouse->name}}@endif" required>
+                            @error('name')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="code" class="col-2 col-form-label text-right">仓库代码</label>
+                        <div class="col-8">
+                            <input type="text" class="form-control @error('code') is-invalid @enderror"
+                                   name="code" autocomplete="off" value="@if(old('code')){{old('code')}}@else{{$warehouse->code}}@endif" required>
+                            @error('code')
+                            <span class="invalid-feedback" role="alert">
+                                <strong>{{ $message }}</strong>
+                            </span>
+                            @enderror
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <div class="col-8 offset-2">
+                            <input type="submit" class="btn btn-outline-dark form-control">
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection

+ 85 - 0
resources/views/maintenance/warehouse/index.blade.php

@@ -0,0 +1,85 @@
+@extends('layouts.app')
+@section('title')仓库@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.warehouse.menu')@endcomponent
+    </span>
+    <div class="container-fluid">
+        <div class="card">
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                @endif
+                <table class="table table-striped table-sm" id="list">
+                    <tr>
+                        <th>ID</th>
+                        <th>仓库名</th>
+                        <th>仓库代码</th>
+                        <th>创建时间</th>
+                        <th>操作</th>
+                    </tr>
+                    <tr v-for="warehouse in warehouses">
+                        <td class="text-muted">@{{warehouse.id}}</td>
+                        <td>@{{warehouse.name}}</td>
+                        <td>@{{warehouse.code}}</td>
+                        <td class="text-muted">@{{warehouse.created_at}}</td>
+                        <td>
+                            @can('仓库-编辑')
+                            <button class="btn btn-sm btn-outline-primary" @click="edit(warehouse.id)">改</button> @endcan
+                            @can('仓库-删除')
+                            <button class="btn btn-sm btn-outline-dark" @click="destroy(warehouse)">删</button> @endcan
+                        </td>
+                    </tr>
+                </table>
+                {{$warehouses->links()}}
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:"#list",
+            data:{
+                warehouses:[
+                    @foreach( $warehouses as $warehouse )
+                    {id:'{{$warehouse->id}}',name:'{{$warehouse->name}}',code:'{{$warehouse->code}}',created_at:'{{$warehouse->created_at}}'},
+                    @endforeach
+                ],
+            },
+            methods:{
+                edit:function(id){
+                    location.href = "{{url('maintenance/warehouse')}}/"+id+"/edit";
+                },
+                destroy:function(warehouse){
+                    if(!confirm('确定要删除仓库“' + warehouse.name + '”吗?')){return};
+                    let data=this;
+                    let url = "{{url('maintenance/warehouse')}}/"+warehouse.id;
+                    axios.delete(url,{id:warehouse.id})
+                        .then(function (response) {
+                            if(response.data.success){
+                                for (let i = 0; i < data.warehouses.length; i++) {
+                                    if (data.warehouses[i].id===warehouse.id){
+                                        data.warehouses.splice(i,1);
+                                        break;
+                                    }
+                                }
+                                tempTip.setDuration(1000);
+                                tempTip.showSuccess('删除仓库"'+warehouse.name+'"成功!')
+                            }else{
+                                tempTip.setDuration(1000);
+                                tempTip.show('删除仓库"'+warehouse.name+'"失败!')
+                            }
+                        })
+                        .catch(function (err) {
+                            tempTip.setDuration(3000);
+                            tempTip.show('删除仓库失败!'+'网络错误:' + err)
+                        });
+                },
+            }
+        });
+    </script>
+@endsection

+ 16 - 0
resources/views/maintenance/warehouse/menu.blade.php

@@ -0,0 +1,16 @@
+
+<div class="container-fluid nav3">
+    <div class="card" >
+        <ul class="nav nav-pills">
+            @can('仓库-查询')
+            <li class="nav-item">
+                <a class="nav-link" href="{{url('maintenance/warehouse')}}" :class="{active:isActive('',3)}">查询</a>
+            </li> @endcan
+            @can('仓库-录入')
+            <li class="nav-item">
+                <a class="nav-link" href="{{url('maintenance/warehouse/create')}}" :class="{active:isActive('create',3)}">录入</a>
+            </li> @endcan
+            {{$slot}}
+        </ul>
+    </div>
+</div>

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

@@ -6,20 +6,20 @@
         @component('personnel.checking-in.menuChecking-in')@endcomponent
     </div>
     <div class="container-fluid" id="list">
-        <div class="card col-md-10 offset-md-1">
-            <div class="card-body p-0">
+        <div class="card col-md visible-md">
+            <div class="card-body p-0  ">
                 <table class="table table-striped table-bordered text-nowrap">
                     <thead class="thead-light">
                     <tr>
                         <td>序号</td>
                         <td>姓名</td>
-                        <td>手机号</td>
-                        <td>劳务所</td>
+                        @can('人事管理-打卡审核')<td>操作</td>@endcan
+                        <td v-if="workgroupSign">组长审核</td>
                         <td>打卡时间</td>
                         <td>打卡类型</td>
-                        @can('人事管理-打卡审核')<td>操作</td>@endcan
+                        <td>手机号</td>
+                        <td>劳务所</td>
                         <td>工作组</td>
-                        <td v-if="workgroupSign">组长审核</td>
                         <td>异常</td>
                         <td>合计工时</td>
                     </tr>
@@ -28,8 +28,14 @@
                     <tr v-for="(userDutyCheck,i) in userDutyChecks">
                         <td>@{{ i+1 }}</td>
                         <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
-                        <td  class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
-                        <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor_company }}</span></td>
+                        @can('人事管理-打卡审核')<td>
+                            <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>
+                        </td>@endcan
+                        <td v-if="workgroupSign">
+                            <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>
+                        </td>
                         <td>@{{ userDutyCheck.checked_at }}</td>
                         <td>
                             <div v-if="userDutyCheck.verify_user_id" class="text-center">@{{ userDutyCheck.type }}</div>
@@ -38,16 +44,10 @@
                                 <option value="登出">登出</option>
                             </select>
                         </td>
-                        @can('人事管理-打卡审核')<td>
-                            <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>
-                        </td>@endcan
+                        <td  class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
+                        <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor.labor_company.name }}</span></td>
                         <td class="font-weight-bold"><span v-if="userDutyCheck.user_detail.user.user_workgroups&&userDutyCheck.user_detail.user.user_workgroups.length>0">
                                 @{{ userDutyCheck.user_detail.user.user_workgroups[0].name }}</span></td>
-                        <td v-if="workgroupSign">
-                            <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>
-                        </td>
                         <td>@{{ userDutyCheck.exception }}</td>
                         <td>@{{ userDutyCheck.duration_man_hour }}</td>
                     </tr>
@@ -64,10 +64,10 @@
             el:"#list",
             data:{
                 userDutyChecks:[
-                    @foreach($userDutyChecks as $userDutyCheck)
+                        @foreach($userDutyChecks as $userDutyCheck)
                     {id:'{{$userDutyCheck->id}}',user_id:'{{$userDutyCheck->user_id}}',checked_at:'{{$userDutyCheck->checked_at}}',
-                    type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
-                    exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
+                        type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
+                        exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
                     @endforeach
                 ],
                 workgroupSign:'{{$workgroupSign}}',
@@ -139,7 +139,7 @@
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
                         tempTip.show('校验失败!网络错误:'+err);
-                        });
+                    });
                 }
             },
         });

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

@@ -1,5 +1,5 @@
-<div class="container-fluid">
-    <div class="card menu-third" style="background: #f9f0f0;transform: scale(0.95)">
+<div class="container-fluid nav3">
+    <div class="card menu-third" >
         <ul class="nav nav-pills">
                 @can('人事管理-获取二维码')
                 <li class="nav-item">

+ 268 - 0
resources/views/personnel/laborReport/index.blade.php

@@ -0,0 +1,268 @@
+
+@extends('layouts.app')
+@section('title')临时工报表@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('personnel.menu')@endcomponent
+    </div>
+    <div class="d-none" id="list">
+        <div class="container-fluid">
+            <div class="">
+                <div>
+                    <form  method="GET" action="{{url('personnel/laborReport/')}}" id="optionSubmit">
+                        <table class="table  table-sm table-bordered text-nowrap mb-0">
+                            <tr v-if="isBeingFilterConditions">
+                                <td colspan="10"><div class="col" style="padding:0">
+                                        <a  href="{{url('personnel/laborReport')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
+                                    </div></td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <span class="text-muted">每页显示记录:</span>
+                                </td>
+                                <td  colspan="9">
+                                    <select name="paginate" v-model="filterData.paginate" class="tooltipTarget form-control-sm" style="vertical-align: middle" @change="setPaginate">
+                                        <option value="50">50行</option>
+                                        <option value="100">100行</option>
+                                        <option value="200">200行</option>
+                                        <option value="500">500行</option>
+                                        <option value="1000">1000行</option>
+                                    </select></td>
+                            </tr>
+                            <tr>
+                                <td rowspan="2">
+                                    <span class="text-muted">根据条件过滤:</span>
+                                </td>
+                                <td >
+                                    <input style="width: 150px" name="created_at_start" type="date" v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''" class="form-control-sm tooltipTarget" title="选择显示指定日期的起始时间">
+
+                                </td>
+                                <td>
+                                    <input type="text" class="form-control-sm tooltipTarget" placeholder="小组"
+                                           style="width:70px" @input="owner_seek"
+                                           title="输入关键词快速定位下拉列表,回车确定">
+                                    <select name="user_workgroup_id" id="user_workgroup_id" :class="filterData.user_workgroup_id?'bg-warning':''" v-model="filterData.user_workgroup_id" @change="setUserWorkGroup"
+                                            class="form-control-sm tooltipTarget"  title="选择要显示的工作组">
+                                        @foreach($userWorkGroups as $userWorkGroup)
+                                            <option value="{{$userWorkGroup->id}}">{{$userWorkGroup->name}}</option>
+                                        @endforeach
+                                    </select>
+                                    <input hidden type="submit" >
+                                </td>
+
+                                <td >
+                                    <input :class="filterData.enter_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="enter_number" class="form-control-sm  tooltipTarget" v-model="filterData.enter_number" style="vertical-align: middle" placeholder="进厂编号"></td>
+                                <td >
+                                    <input :class="filterData.identity_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="identity_number" class="form-control-sm  tooltipTarget" v-model="filterData.identity_number" style="vertical-align: middle" placeholder="身份证号"></td>
+                                <td colspan="5"></td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <input style="width: 150px" type="date" name="created_at_end" v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" class="form-control-sm tooltipTarget" title="选择显示指定日期的结束时间">
+                                </td>
+                                <td >
+                                    <input type="text" title="支持15内模糊搜索与15天外精确搜索" name="mobile_phone" class="form-control-sm  tooltipTarget" v-model="filterData.mobile_phone"  :class="filterData.mobile_phone?'bg-warning':''" style="vertical-align: middle" placeholder="电话号"></td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <span class="text-muted">操作选定记录:</span>
+                                </td>
+                                <td colspan="9">
+                                    <span class="dropdown">
+                                        <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData>0?'btn-dark text-light':'']"
+                                                data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
+                                            导出Excel
+                                        </button>
+                                        <div class="dropdown-menu">
+                                            <a class="dropdown-item" @click="laborReportExport(1)" href="javascript:">导出勾选内容</a>
+                                            <a class="dropdown-item" @click="laborReportExport(2)" href="javascript:">导出所有页</a>
+                                        </div>
+                                    </span>
+                                    <input hidden type="submit" >
+                                </td>
+                            </tr>
+                        </table>
+                    </form>
+                </div>
+                <div class="">
+                    <table class="table table-striped table-sm text-nowrap table-hover">
+                        <tr>
+                            <th>
+                                <label for="all">
+                                    <input id="all" type="checkbox" @click="checkAll($event)">全选
+                                </label>
+                            </th>
+                            <th>ID</th>
+                            <th>创建日期</th>
+                            <th class="laborReport_1">进厂编号</th>
+                            <th class="laborReport_1">小组</th>
+                            <th class="laborReport_1">临时工</th>
+                            <th class="laborReport_1">电话</th>
+                            <th class="laborReport_1">身份证号</th>
+                            <th class="laborReport_1">劳务所</th>
+                            <th class="laborReport_2">打卡时间</th>
+                            <th class="laborReport_2">审核时间</th>
+                            <th class="laborReport_2">审核人</th>
+                            <th class="laborReport_2">退场时间</th>
+                            <th class="laborReport_2">午饭打卡</th>
+                            <th class="laborReport_2">在线时长</th>
+                            <th class="laborReport_2">本次工作时长</th>
+                        </tr>
+                        <tr v-for="(laborReport,i) in laborReports">
+                            <td>
+                                <input class="checkItem" type="checkbox" :value="laborReport.id" v-model="checkData">
+                            </td>
+                            <td>@{{ i+1  }}</td>
+                            <td class="text-muted">@{{laborReport.created_at}}</td>
+                            <td class="text-muted">@{{laborReport.id}}</td>
+                            <td>@{{laborReport.enterNumber}}</td>
+                            <td>@{{laborReport.userWorkGroupId}}</td>
+                            <td class="text-muted">@{{laborReport.name}}</td>
+                            <td class="text-muted">@{{laborReport.mobilePhone}}</td>
+                            <td class="text-muted">@{{laborReport.identityNumber}}</td>
+                            <td>@{{laborReport.laborCompany}}</td>
+                            <td>@{{laborReport.checkInAt}}</td>
+                            <td>@{{laborReport.verifyAt}}</td>
+                            <td>    </td>
+                            <td class="text-muted">@{{laborReport.checkOutAt}}</td>
+                            <td class="text-muted">@{{laborReport.onlineDuration}}</td>
+                            <td class="text-muted">@{{laborReport.workingDuration}}</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+            @if(isset($request))
+        let request={!! json_encode($request) !!};
+        @endif
+        new Vue({
+            el:"#list",
+            data:{
+                laborReports:[
+                        @foreach($laborReports as $laborReport)
+                    {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}'
+                        ,userWorkGroupId:'{{$laborReport->user_workgroup_id}}',userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
+                        ,mobilePhone:'{{$laborReport->mobile_phone}}',identityNumber:'{{$laborReport->identity_number}}',laborCompany:'{{$laborReport->labor_company}}'
+                        ,checkInAt:'{{$laborReport->check_in_at}}',
+                        verifyAt:'{{$laborReport->verify_at}}', checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
+                        workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',},
+                    @endforeach
+                ],
+                i:0,
+                userWorkGroups:[
+                        @foreach($userWorkGroups as $userWorkGroup)
+                    {id:'{{$userWorkGroup->id}}',name:'{{$userWorkGroup->name}}'},
+                    @endforeach
+                ],
+                filterData:
+                    {paginate:'50',created_at_start:'',created_at_end:'',enter_number:'',identity_number:'',user_workgroup_id: '',mobile_phone:''},
+                checkData:[]
+            },
+            mounted:function(){
+                this.initInputs();
+                $(".tooltipTarget").tooltip({'trigger':'hover'});
+                $('#list').removeClass('d-none');
+            },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.laborReports.length){
+                            document.querySelector('#all').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
+            computed:{
+                isBeingFilterConditions:function(){
+
+                    for(let key in this.filterData){
+                        if(this.filterData[key]){
+                            if(key==='paginate')continue;
+                            return true
+                        }
+                    }
+                    return false;
+                },
+
+            },
+            methods:{
+                initInputs:function(){
+                    let data=this;
+                    let uriParts =decodeURI(location.href).split("?");
+                    if(uriParts.length>1){
+                        let params = uriParts[1].split('&');
+                        params.forEach(function(paramPair){
+                            let pair=paramPair.split('=');
+                            let key = pair[0], val = pair[1];
+                            $('input[name="'+key+'"]').val(val);
+                            $('select[name="'+key+'"]').val(val);
+                            decodeURI(data.filterData[key]=val);
+                        });
+                    }
+                },
+                setPaginate:function(e){
+                    this.filterData.paginate=e.target.value;
+                    var form = document.getElementById("optionSubmit");
+                    form.submit();
+                },
+                setUserWorkGroup:function (e){
+                    this.filterData.user_workgroup_id=e.target.value;
+                    var form = document.getElementById("optionSubmit");
+                    form.submit();
+                },
+                checkAll(e){
+                    if (e.target.checked){
+                        this.laborReports.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.id) == '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+                {{--laborReportExport(e){--}}
+                {{--    let val=e;--}}
+                {{--    let data=this.filterData;--}}
+                {{--    if (val==1){--}}
+                {{--        if (this.checkData&&this.checkData.length<=0){--}}
+                {{--            tempTip.setDuration(4000);--}}
+                {{--            tempTip.showSuccess('没有勾选任何记录');--}}
+                {{--        }else{--}}
+                {{--            location.href="{{url('laborReport/export').'/'}}"+this.checkData;--}}
+                {{--        }--}}
+                {{--    } else {--}}
+                {{--        location.href="{{url('laborReport/export/-1?created_at_start=')}}"+--}}
+                {{--            data.created_at_start+"&created_at_end="+data.created_at_end+"&enter_number="+--}}
+                {{--            data.enter_number+"&identity_number="+data.identity_number+"&user_workgroup_id="+data.user_workgroup_id+--}}
+                {{--            "&mobile_phone="+data.mobile_phone;--}}
+                {{--    }--}}
+                {{--},--}}
+                owner_seek:function (e) {
+                    let _this=this;
+                    let $val=e.target.value;
+                    if($val==='')_this.filterData.user_workgroup_id='';
+                    else
+                        _this.owners.forEach(function (userWorkGroup) {
+                            if (userWorkGroup.name.includes($val)){
+                                _this.filterData.user_workgroup_id=userWorkGroup.id;
+                            }
+                        });
+                },
+            },
+        });
+    </script>
+@endsection
+<style>
+    .laborReport_1{background-color: #FFFF00}
+    .laborReport_2{background-color: #ffffff}
+</style>

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

@@ -1,7 +1,11 @@
 
-<div class="container-fluid mt-3" id="nav2">
+<div class="container-fluid nav2" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
+            @can('人事管理')
+                <li class="nav-item">
+                    <a class="nav-link" href="{{url('personnel/laborReport')}}" :class="{active:isActive('laborReport',2)}">临时工报表</a>
+                </li> @endcan
             @can('人事管理')
                 <li class="nav-item">
                     <a class="nav-link" href="{{url('personnel/checking-in/createReplenishClock')}}" :class="{active:isActive('checking-in',2)}">考勤</a>

+ 5 - 0
routes/web.php

@@ -40,6 +40,8 @@ Route::resource('maintenance/city','CitiesController');
 Route::resource('maintenance/commodity', 'CommodityController');
 Route::resource('maintenance/measuringMachine', 'MeasuringMachineController');
 Route::resource('maintenance/userWorkgroup', 'UserWorkgroupController');
+Route::resource('maintenance/laborCompany', 'LaborCompanyController');
+Route::resource('maintenance/warehouse', 'WarehouseController');
 //教程管理
 Route::resource('maintenance/tutorial', 'TutorialController');
 //教程展示
@@ -184,6 +186,9 @@ Route::resource('process','ProcessController');
 /**
  * 人事
  */
+//临时工报表界面
+Route::resource('personnel/laborReport','LaborReportController');
+
 Route::group(['prefix'=>'personnel'],function(){
     //去往录入补卡
     Route::get('checking-in/createReplenishClock','PersonnelController@createReplenishClock');