update: super-admin page

This commit is contained in:
Cauê Faleiros
2026-02-03 11:32:40 -03:00
parent e9333c8341
commit c93a0af3d7
7 changed files with 57 additions and 29 deletions

View File

@@ -41,6 +41,33 @@ class TenantController extends Controller
->with('success', 'Tenant created successfully.'); ->with('success', 'Tenant created successfully.');
} }
public function edit($id)
{
$tenant = Tenant::findOrFail($id);
return view('super-admin.tenants.edit', compact('tenant'));
}
public function update(Request $request, $id)
{
$tenant = Tenant::findOrFail($id);
$validated = $request->validate([
'domain' => 'required|string|unique:mysql.domains,domain,' . $tenant->domains->first()->id,
]);
// Update domain
$tenant->domains()->update([
'domain' => $validated['domain'],
]);
$tenant->update([
'last_updated_by' => Auth::user()->name ?? 'Super Admin',
]);
return redirect()->route('super-admin.tenants.index')
->with('success', 'Tenant updated successfully.');
}
public function destroy($id) public function destroy($id)
{ {
$tenant = Tenant::findOrFail($id); $tenant = Tenant::findOrFail($id);

View File

@@ -30,13 +30,13 @@ class Kernel extends HttpKernel
*/ */
protected $middlewareGroups = [ protected $middlewareGroups = [
'web' => [ 'web' => [
\App\Http\Middleware\UniversalTenancy::class,
\App\Http\Middleware\EncryptCookies::class, \App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class, \App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\UniversalTenancy::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Routing\Middleware\SubstituteBindings::class,
], ],

View File

@@ -5,10 +5,15 @@ version: "3.7"
########################################################## ##########################################################
services: services:
# ===== KRAYIN CRM ===== # ===== KRAYIN CRM =====
krayin: crm:
image: growup:latest # Sua imagem customizada image: ghcr.io/blyzer/growup-crm:latest
deploy:
update_config:
order: start-first
failure_action: rollback
delay: 10s
ports: ports:
- "8090:80" # Ajuste a porta externa conforme necessário - "8090:80" # Ajuste a porta externa conforme necessário
volumes: volumes:
@@ -73,7 +78,7 @@ services:
# ===== REDIS ===== # ===== REDIS =====
redis: redis:
image: redis:latest image: redis:latest
command: command:
[ [
"redis-server", "redis-server",
"--appendonly", "--appendonly",

View File

@@ -23,19 +23,13 @@
@include('super-admin.layouts.header') @include('super-admin.layouts.header')
<div class="group/container sidebar-collapsed flex h-[calc(100vh-62px)]"> <div class="group/container sidebar-collapsed flex h-screen">
@include('super-admin.layouts.sidebar') @include('super-admin.layouts.sidebar')
<div class="flex flex-1 flex-col overflow-y-auto bg-gray-100 pt-3 transition-all duration-300 dark:bg-gray-950"> <div class="flex flex-1 flex-col overflow-hidden bg-gray-100 pt-3 transition-all duration-300 dark:bg-gray-950">
<div class="px-4 pb-6 flex-1"> <div class="flex-1 overflow-y-auto px-4 pb-6">
@yield('content') @yield('content')
</div> </div>
<div class="mt-auto pt-6">
<div class="border-t bg-white py-5 text-center text-sm font-normal dark:border-gray-800 dark:bg-gray-900 dark:text-white max-md:py-3">
<p>Desenvolvido por <a href="https://blyzer.com.br" style="color: #0E90D9;" class="hover:underline" target="_blank">Blyzer</a></p>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,10 +1,10 @@
@extends('super-admin.layouts.app') @extends('super-admin.layouts.master')
@section('content') @section('content')
<div class="md:flex md:items-center md:justify-between mb-6"> <div class="md:flex md:items-center md:justify-between mb-6">
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h2 class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:truncate"> <h2 class="text-2xl font-bold leading-7 text-gray-900 dark:text-white sm:text-3xl sm:truncate">
Edit Tenant Editar Empresa
</h2> </h2>
</div> </div>
</div> </div>
@@ -14,27 +14,27 @@
@csrf @csrf
@method('PUT') @method('PUT')
<div class="shadow overflow-hidden sm:rounded-md"> <div class="shadow overflow-hidden sm:rounded-md">
<div class="px-4 py-5 bg-white sm:p-6"> <div class="px-4 py-5 bg-white dark:bg-gray-900 sm:p-6">
<div class="grid grid-cols-6 gap-6"> <div class="grid grid-cols-6 gap-6">
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="id" class="block text-sm font-medium text-gray-700">Tenant ID</label> <label for="id" class="block text-sm font-medium text-gray-700 dark:text-gray-300">ID da Empresa</label>
<input type="text" name="id" id="id" value="{{ $tenant->id }}" readonly class="mt-1 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md p-2 border bg-gray-100 cursor-not-allowed"> <input type="text" name="id" id="id" value="{{ $tenant->id }}" readonly class="mt-1 block w-full shadow-sm sm:text-sm border-gray-300 dark:border-gray-700 rounded-md p-2 border bg-gray-100 dark:bg-gray-800 dark:text-gray-400 cursor-not-allowed">
<p class="mt-2 text-sm text-gray-500">Tenant ID cannot be changed.</p> <p class="mt-2 text-sm text-gray-500 dark:text-gray-400">O ID da empresa não pode ser alterado.</p>
</div> </div>
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="domain" class="block text-sm font-medium text-gray-700">Domain</label> <label for="domain" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Domínio</label>
<input type="text" name="domain" id="domain" value="{{ $tenant->domains->first()->domain ?? '' }}" autocomplete="off" class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md p-2 border" placeholder="e.g. tenant1.localhost"> <input type="text" name="domain" id="domain" value="{{ $tenant->domains->first()->domain ?? '' }}" autocomplete="off" class="mt-1 focus:ring-blue-500 focus:border-blue-500 block w-full shadow-sm sm:text-sm border-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:text-white rounded-md p-2 border" placeholder="ex: empresa1.growuppro.com.br">
<p class="mt-2 text-sm text-gray-500">Full domain for the tenant.</p> <p class="mt-2 text-sm text-gray-500 dark:text-gray-400">Domínio completo da empresa.</p>
</div> </div>
</div> </div>
</div> </div>
<div class="px-4 py-3 bg-gray-50 text-right sm:px-6"> <div class="flex items-center justify-end gap-x-2 px-4 py-3 bg-gray-50 dark:bg-gray-800 sm:px-6">
<a href="{{ route('super-admin.tenants.index') }}" class="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 mr-2"> <a href="{{ route('super-admin.tenants.index') }}" class="inline-flex justify-center py-2 px-4 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
Cancel Cancelar
</a> </a>
<button type="submit" class="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"> <button type="submit" class="primary-button">
Update Atualizar
</button> </button>
</div> </div>
</div> </div>

View File

@@ -31,6 +31,8 @@ Route::group(['prefix' => 'super-admin', 'as' => 'super-admin.', 'middleware' =>
Route::get('tenants', [TenantController::class, 'index'])->name('tenants.index'); Route::get('tenants', [TenantController::class, 'index'])->name('tenants.index');
Route::get('tenants/create', [TenantController::class, 'create'])->name('tenants.create'); Route::get('tenants/create', [TenantController::class, 'create'])->name('tenants.create');
Route::post('tenants', [TenantController::class, 'store'])->name('tenants.store'); Route::post('tenants', [TenantController::class, 'store'])->name('tenants.store');
Route::get('tenants/{id}/edit', [TenantController::class, 'edit'])->name('tenants.edit');
Route::put('tenants/{id}', [TenantController::class, 'update'])->name('tenants.update');
Route::delete('tenants/{id}', [TenantController::class, 'destroy'])->name('tenants.destroy'); Route::delete('tenants/{id}', [TenantController::class, 'destroy'])->name('tenants.destroy');
}); });
}); });

0
storage/test_write Normal file
View File