From 9eb03d9ede47b5d506738985eaa2f3f51342f270 Mon Sep 17 00:00:00 2001 From: developer Date: Thu, 15 Jan 2026 11:11:27 +0800 Subject: [PATCH] maked admin creator livewire --- .../Controllers/AdminCompaniesController.php | 4 +- .../Admin/Views/companies/edit.blade.php | 50 +++++++++++++- .../Company/CreateAdminController.php | 60 +++++++++++++++++ .../Livewire/CreateCompanyAdminLivewire.php | 32 +++++++++ .../Main/Models/Company/CompanyAdmin.php | 5 ++ .../Main/Providers/ModuleServiceProvider.php | 1 + app/Modules/Main/Routes/web.php | 3 + .../company/livewire/createAdmin.blade.php | 67 +++++++++++++++++++ 8 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 app/Modules/Main/Http/Controllers/Company/CreateAdminController.php create mode 100644 app/Modules/Main/Http/Livewire/CreateCompanyAdminLivewire.php create mode 100644 app/Modules/Main/Views/company/livewire/createAdmin.blade.php diff --git a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php index 1cdff46..0c45d78 100644 --- a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php +++ b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php @@ -8,6 +8,8 @@ use Modules\Main\Models\Company\CompanyStatus; use Modules\Main\Models\Agent\Agent; +use Modules\Main\Models\Company\CompanyAdmin; + class AdminCompaniesController extends Controller { public function index(Request $request) @@ -30,7 +32,7 @@ public function edit(Company $company) return view('admin::companies.edit', [ 'company' => $company, 'companyAgentsRelation' => Agent::where('company_id', $company->id)->get(), - 'companyAdminsRelation' => [] + 'companyAdminsRelation' => CompanyAdmin::where('company_id', $company->id)->get(), ]); } diff --git a/app/Modules/Admin/Views/companies/edit.blade.php b/app/Modules/Admin/Views/companies/edit.blade.php index b7f09c8..dbcab53 100644 --- a/app/Modules/Admin/Views/companies/edit.blade.php +++ b/app/Modules/Admin/Views/companies/edit.blade.php @@ -36,6 +36,53 @@ +
+
+

Администраторы

+ +
+ + + + + + + @foreach ($companyAdminsRelation as $companyAdmin) + + + + + + @endforeach + +
ФИО + Когда назначен + +
+ {{ $companyAdmin->user->name }} + + {{ $companyAdmin->created_at?->diffForHumans() }} + + +
+
+

Агенты

@@ -63,7 +110,7 @@ {{ $companyAgent->user->name }} - {{ $companyAgent->created_at->diffForHumans() }} + {{ $companyAgent->created_at?->diffForHumans() }} @livewire('company.agent.create', ['containerId' => 'createAgentModal', 'companyId' => $company->id]) + @livewire('company.admin.create', ['containerId' => 'createCompanyAdminModal', 'companyId' => $company->id]) @endsection diff --git a/app/Modules/Main/Http/Controllers/Company/CreateAdminController.php b/app/Modules/Main/Http/Controllers/Company/CreateAdminController.php new file mode 100644 index 0000000..b0f9710 --- /dev/null +++ b/app/Modules/Main/Http/Controllers/Company/CreateAdminController.php @@ -0,0 +1,60 @@ +company_id); + if ($request->user()->cannot('update', $company)) + { + abort(403, 'Unauthorized action'); + } + + $user = User::where('email', $request->email)->orWhere('phone', $request->phone)->first(); + if ($user) + { + if ($user->id !== auth()->id()) //если это не текущий пользователь-админ, который хочет себя сделать агентом, то ошибка + { + if (CompanyAdmin::where('user_id', $user->id)->count()) // и если этот пользователь уже админ + { + return back()->with('error', __('Admin is not unique')); + } + } + } + else + { + $user = $user = User::create($request->all()); + } + + if ($user) + { + CompanyAdmin::where('user_id', $user->id)->delete(); //на случай, если где-то этот пользователь уже был админом + $agent = CompanyAdmin::create([ + 'user_id' => $user->id, + 'company_id' => $company->id + ]); + } + + if ($request->sendToEmail) + { + $user->setForcedPassword(); + } + else + { + $password = $user->setForcedPassword(false); + return back()->with('success', 'Пароль для пользователя установлен: ' . $password); + } + return back(); + } +} diff --git a/app/Modules/Main/Http/Livewire/CreateCompanyAdminLivewire.php b/app/Modules/Main/Http/Livewire/CreateCompanyAdminLivewire.php new file mode 100644 index 0000000..900e28c --- /dev/null +++ b/app/Modules/Main/Http/Livewire/CreateCompanyAdminLivewire.php @@ -0,0 +1,32 @@ +containerId = $containerId; + $availableCompaniesIds = GetAvailableAgents('Builder')->pluck('company_id'); + $this->availableCompanies = Company::whereIn('id', $availableCompaniesIds)->get(); + if ($this->availableCompanies->count() == 1) { + $this->companyId = $this->availableCompanies->first()->id; + }; + } + + public function render() + { + return view('main::company.livewire.createAdmin', [ + ]); + } + + +} \ No newline at end of file diff --git a/app/Modules/Main/Models/Company/CompanyAdmin.php b/app/Modules/Main/Models/Company/CompanyAdmin.php index e2baf03..fcf4fa5 100644 --- a/app/Modules/Main/Models/Company/CompanyAdmin.php +++ b/app/Modules/Main/Models/Company/CompanyAdmin.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Modules\User\Models\User; use Modules\User\Models\UserRole; use Modules\User\Models\Role; @@ -19,6 +20,10 @@ public function company() { return $this->belongsTo(Company::class); } + public function user() + { + return $this->belongsTo(User::class); + } protected static function booted(): void { static::created(function (CompanyAdmin $admin) diff --git a/app/Modules/Main/Providers/ModuleServiceProvider.php b/app/Modules/Main/Providers/ModuleServiceProvider.php index 6bf4867..2d7762a 100644 --- a/app/Modules/Main/Providers/ModuleServiceProvider.php +++ b/app/Modules/Main/Providers/ModuleServiceProvider.php @@ -67,6 +67,7 @@ protected function registerLivewire() { //Livewire::component('', \Modules\\Http\Livewire\::class); Livewire::component('company.agent.create', \Modules\Main\Http\Livewire\CreateAgentLivewire::class); + Livewire::component('company.admin.create', \Modules\Main\Http\Livewire\CreateCompanyAdminLivewire::class); } protected function registerComponent() diff --git a/app/Modules/Main/Routes/web.php b/app/Modules/Main/Routes/web.php index 0ffc8ac..e83943c 100644 --- a/app/Modules/Main/Routes/web.php +++ b/app/Modules/Main/Routes/web.php @@ -22,6 +22,9 @@ { Route::get('/company/details/{company?}', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'index'])->name('company.details'); Route::post('/company/{company}/details/', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'store'])->name('company.details.store'); + + Route::post('/companies/admins/store/', Modules\Main\Http\Controllers\Company\CreateAdminController::class)->name('company.admin.store'); + Route::get('/agents/table', [Modules\Main\Http\Controllers\Company\AgentsTableController::class, 'index'])->name('company.agents.table'); //Route::post('/company/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store'); Route::post('/companies/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store'); diff --git a/app/Modules/Main/Views/company/livewire/createAdmin.blade.php b/app/Modules/Main/Views/company/livewire/createAdmin.blade.php new file mode 100644 index 0000000..3b38599 --- /dev/null +++ b/app/Modules/Main/Views/company/livewire/createAdmin.blade.php @@ -0,0 +1,67 @@ +
+ +
\ No newline at end of file