From 5af127d5f938d64c964284b8f3f663ee82e6559b Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Tue, 1 Jul 2025 16:32:56 -0600 Subject: [PATCH 1/2] Se crearon los crud de Puntajes, Departamentos y Role principal --- .../Admin/DepartmentController.php | 73 ++++++++ .../Controllers/Admin/MainRoleController.php | 42 +++++ .../Controllers/Admin/ScoreController.php | 71 ++++++++ app/Http/Requests/StoreDepartment.php | 39 +++++ app/Http/Requests/StoreMainRole.php | 39 +++++ app/Http/Requests/StoreScore.php | 40 +++++ app/Http/Requests/UpdateDepartment.php | 40 +++++ app/Http/Requests/UpdateMainRole.php | 39 +++++ app/Http/Requests/UpdateScore.php | 41 +++++ app/Models/Score.php | 30 ++++ app/Models/department.php | 37 ++++ app/Models/main_role.php | 43 +++++ .../migrations/2025_07_01_104541_scores.php | 34 ++++ ..._07_01_151711_create_departments_table.php | 29 ++++ ...25_07_01_151840_create_main_role_table.php | 30 ++++ package-lock.json | 2 +- resources/js/Lang/es.js | 21 ++- resources/js/Layouts/DashboardLayout.vue | 22 ++- resources/js/Pages/Admin/App/Component.js | 15 ++ resources/js/Pages/Admin/App/Create.vue | 84 ++++++++++ resources/js/Pages/Admin/App/Destroy.vue | 43 +++++ resources/js/Pages/Admin/App/Edit.vue | 73 ++++++++ resources/js/Pages/Admin/App/Index.vue | 158 ++++++++++++++++++ resources/js/Pages/Admin/App/Show.vue | 41 +++++ .../js/Pages/Admin/Departments/Component.js | 15 ++ .../js/Pages/Admin/Departments/Create.vue | 74 ++++++++ .../js/Pages/Admin/Departments/Destroy.vue | 43 +++++ resources/js/Pages/Admin/Departments/Edit.vue | 67 ++++++++ .../js/Pages/Admin/Departments/Index.vue | 145 ++++++++++++++++ resources/js/Pages/Admin/Departments/Show.vue | 41 +++++ routes/web.php | 20 ++- 31 files changed, 1475 insertions(+), 16 deletions(-) create mode 100644 app/Http/Controllers/Admin/DepartmentController.php create mode 100644 app/Http/Controllers/Admin/MainRoleController.php create mode 100644 app/Http/Controllers/Admin/ScoreController.php create mode 100644 app/Http/Requests/StoreDepartment.php create mode 100644 app/Http/Requests/StoreMainRole.php create mode 100644 app/Http/Requests/StoreScore.php create mode 100644 app/Http/Requests/UpdateDepartment.php create mode 100644 app/Http/Requests/UpdateMainRole.php create mode 100644 app/Http/Requests/UpdateScore.php create mode 100644 app/Models/Score.php create mode 100644 app/Models/department.php create mode 100644 app/Models/main_role.php create mode 100644 database/migrations/2025_07_01_104541_scores.php create mode 100644 database/migrations/2025_07_01_151711_create_departments_table.php create mode 100644 database/migrations/2025_07_01_151840_create_main_role_table.php create mode 100644 resources/js/Pages/Admin/App/Component.js create mode 100644 resources/js/Pages/Admin/App/Create.vue create mode 100644 resources/js/Pages/Admin/App/Destroy.vue create mode 100644 resources/js/Pages/Admin/App/Edit.vue create mode 100644 resources/js/Pages/Admin/App/Index.vue create mode 100644 resources/js/Pages/Admin/App/Show.vue create mode 100644 resources/js/Pages/Admin/Departments/Component.js create mode 100644 resources/js/Pages/Admin/Departments/Create.vue create mode 100644 resources/js/Pages/Admin/Departments/Destroy.vue create mode 100644 resources/js/Pages/Admin/Departments/Edit.vue create mode 100644 resources/js/Pages/Admin/Departments/Index.vue create mode 100644 resources/js/Pages/Admin/Departments/Show.vue diff --git a/app/Http/Controllers/Admin/DepartmentController.php b/app/Http/Controllers/Admin/DepartmentController.php new file mode 100644 index 0000000..933df53 --- /dev/null +++ b/app/Http/Controllers/Admin/DepartmentController.php @@ -0,0 +1,73 @@ + + * + * @version 1.0.0 + */ +class DepartmentController extends VueController +{ + + public function __construct() + { + $this->vueRoot('admin.departments'); + } + + + public function index() + { + $q = request()->get('q'); + + return $this->vuew('index', [ + 'departments' => department::where('name', 'LIKE', "%{$q}%") + ->orWhere('description', 'LIKE', "%{$q}%") + ->select([ + 'id', + 'name', + 'description', + ]) + ->paginate(config('app.pagination')) + ]); + } + + public function create() + { + return $this->vuew('create'); + } + + public function store(StoreDepartment $request) + { + $data = $request->all(); + + department::create($data); + + return $this->index(); + } + + public function update(UpdateDepartment $request, $department) + { + $data = $request->all(); + + department::find($department)->update($data); + } + + public function destroy($department) + { + department::find($department)->delete(); + + return $this->index(); + } +} diff --git a/app/Http/Controllers/Admin/MainRoleController.php b/app/Http/Controllers/Admin/MainRoleController.php new file mode 100644 index 0000000..6c31f1c --- /dev/null +++ b/app/Http/Controllers/Admin/MainRoleController.php @@ -0,0 +1,42 @@ + + * + * @version 1.0.0 + */ +class MainRoleController extends VueController +{ + public function __construct() + { + $this->vueRoot('admin.main-role'); + } + + public function index() + { + $q = request()->get('q'); + + return $this->vuew('index', [ + 'roles' => MainRole::where('name', 'LIKE', "%{$q}%") + ->orWhere('description', 'LIKE', "%{$q}%") + ->select([ + 'id', + 'name', + 'description', + ]) + ->paginate(config('app.pagination')) + ]); + } +} diff --git a/app/Http/Controllers/Admin/ScoreController.php b/app/Http/Controllers/Admin/ScoreController.php new file mode 100644 index 0000000..281d06d --- /dev/null +++ b/app/Http/Controllers/Admin/ScoreController.php @@ -0,0 +1,71 @@ + + * + * @version 1.0.0 + */ +class ScoreController extends VueController +{ + + public function __construct() + { + $this->vueRoot('admin.app'); + } + + public function index() + { + $q = request()->get('q'); + + return $this->vuew('index', [ + 'scores' => Score::where('alias', 'LIKE', "%{$q}%") + ->orWhere('value', 'LIKE', "%{$q}%") + ->select([ + 'id', + 'alias', + 'value', + 'description', + ]) + ->paginate(config('app.pagination')) + ]); + } + + public function create() + { + return $this->vuew('create'); + } + + public function store(StoreScore $request) + { + $data = $request->all(); + + Score::create($data); + + return $this->index(); + } + + public function update(UpdateScore $request, $score) + { + $data = $request->all(); + + Score::find($score)->update($data); + } + + public function destroy($score) + { + Score::find($score)->delete(); + + return $this->index(); + } + +} diff --git a/app/Http/Requests/StoreDepartment.php b/app/Http/Requests/StoreDepartment.php new file mode 100644 index 0000000..7c196d3 --- /dev/null +++ b/app/Http/Requests/StoreDepartment.php @@ -0,0 +1,39 @@ + + * + * @version 1.0.0 + */ +class StoreDepartment extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'name' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Http/Requests/StoreMainRole.php b/app/Http/Requests/StoreMainRole.php new file mode 100644 index 0000000..b798988 --- /dev/null +++ b/app/Http/Requests/StoreMainRole.php @@ -0,0 +1,39 @@ + + * + * @version 1.0.0 + */ +class StoreMainRole extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'name' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Http/Requests/StoreScore.php b/app/Http/Requests/StoreScore.php new file mode 100644 index 0000000..1151350 --- /dev/null +++ b/app/Http/Requests/StoreScore.php @@ -0,0 +1,40 @@ + + * + * @version 1.0.0 + */ +class StoreScore extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'alias' => ['required', 'string'], + 'value' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Http/Requests/UpdateDepartment.php b/app/Http/Requests/UpdateDepartment.php new file mode 100644 index 0000000..ffe9878 --- /dev/null +++ b/app/Http/Requests/UpdateDepartment.php @@ -0,0 +1,40 @@ + + * + * @version 1.0.0 + */ +class UpdateDepartment extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'name' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Http/Requests/UpdateMainRole.php b/app/Http/Requests/UpdateMainRole.php new file mode 100644 index 0000000..0968dcc --- /dev/null +++ b/app/Http/Requests/UpdateMainRole.php @@ -0,0 +1,39 @@ + + * + * @version 1.0.0 + */ +class UpdateMainRole extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'name' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Http/Requests/UpdateScore.php b/app/Http/Requests/UpdateScore.php new file mode 100644 index 0000000..1e9fe54 --- /dev/null +++ b/app/Http/Requests/UpdateScore.php @@ -0,0 +1,41 @@ + + * + * @version 1.0.0 + */ +class UpdateScore extends FormRequest +{ + /** + * Determinar si el usuario esta autorizado + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Reglas de validación + * + * @return array + */ + public function rules() + { + return [ + 'alias' => ['required', 'string'], + 'value' => ['required', 'string'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Models/Score.php b/app/Models/Score.php new file mode 100644 index 0000000..cad93f4 --- /dev/null +++ b/app/Models/Score.php @@ -0,0 +1,30 @@ + + * + * @version 1.0.0 + */ +class Score extends Model +{ + use HasFactory, + ModelExtend; + + /** + * Atributos llenables masivamente + */ + protected $fillable = [ + 'alias', + 'value', + 'description', + ]; +} diff --git a/app/Models/department.php b/app/Models/department.php new file mode 100644 index 0000000..5de561b --- /dev/null +++ b/app/Models/department.php @@ -0,0 +1,37 @@ + + * + * @version 1.0.0 + */ +class department extends Model +{ + use HasFactory, + ModelExtend; + + /** + * Atributos llenables masivamente + */ + protected $fillable = [ + 'name', + 'description' + ]; + + /** + * Un departamento tiene muchos main roles + */ + public function mainRoles() + { + return $this->hasMany(MainRole::class); + } +} diff --git a/app/Models/main_role.php b/app/Models/main_role.php new file mode 100644 index 0000000..b72cc32 --- /dev/null +++ b/app/Models/main_role.php @@ -0,0 +1,43 @@ + + * + * @version 1.0.0 + */ +class MainRole extends Model +{ + use HasFactory, + ModelExtend; + + /** + * Nombre de la tabla + */ + protected $table = 'main_role'; + + /** + * Atributos llenables masivamente + */ + protected $fillable = [ + 'name', + 'description', + 'department_id' + ]; + + /** + * Un main role pertenece a un departamento + */ + public function department() + { + return $this->belongsTo(Department::class); + } +} diff --git a/database/migrations/2025_07_01_104541_scores.php b/database/migrations/2025_07_01_104541_scores.php new file mode 100644 index 0000000..b864651 --- /dev/null +++ b/database/migrations/2025_07_01_104541_scores.php @@ -0,0 +1,34 @@ +id(); + $table->string('alias'); + $table->integer('value'); + $table->string('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('scores'); + } +}; diff --git a/database/migrations/2025_07_01_151711_create_departments_table.php b/database/migrations/2025_07_01_151711_create_departments_table.php new file mode 100644 index 0000000..2b5e993 --- /dev/null +++ b/database/migrations/2025_07_01_151711_create_departments_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('departments'); + } +}; diff --git a/database/migrations/2025_07_01_151840_create_main_role_table.php b/database/migrations/2025_07_01_151840_create_main_role_table.php new file mode 100644 index 0000000..4992c6c --- /dev/null +++ b/database/migrations/2025_07_01_151840_create_main_role_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->foreignId('department_id')->constrained('departments')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('main_role'); + } +}; diff --git a/package-lock.json b/package-lock.json index 9fbf9e7..6f0249d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "template-laravel-vuejs", + "name": "Scores", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/resources/js/Lang/es.js b/resources/js/Lang/es.js index ac1cb5b..78b1c51 100644 --- a/resources/js/Lang/es.js +++ b/resources/js/Lang/es.js @@ -224,5 +224,24 @@ export default { system:'Usuarios del sistema', title:'Usuarios', }, + + scores:{ + system: 'Sistema de puntuación', + create:{ + title:'Crear puntuación', + description:'Permite crear nuevas puntuaciones para los usuarios.', + onSuccess:'Puntuación creada exitosamente', + onError:'Error al crear la puntuación', + } + }, + department:{ + system: 'Sistema de departamentos', + create:{ + title:'Crear departamento', + description:'Permite crear nuevos departamentos para los usuarios.', + onSuccess:'Departamento creado exitosamente', + onError:'Error al crear el departamento', + } + }, version:'Versión', -} \ No newline at end of file +} diff --git a/resources/js/Layouts/DashboardLayout.vue b/resources/js/Layouts/DashboardLayout.vue index 0b72714..682b8c0 100644 --- a/resources/js/Layouts/DashboardLayout.vue +++ b/resources/js/Layouts/DashboardLayout.vue @@ -35,7 +35,7 @@ onMounted(()=> { :title="title" />
- -
diff --git a/resources/js/Pages/Admin/App/Component.js b/resources/js/Pages/Admin/App/Component.js new file mode 100644 index 0000000..e647589 --- /dev/null +++ b/resources/js/Pages/Admin/App/Component.js @@ -0,0 +1,15 @@ +import { t } from '@/Lang/i18n'; +import { hasPermission } from '@/rolePermission.js'; + +// Obtener ruta +const goTo = (route) => `admin.scores.${route}` +// Obtener traducción del componente +const transl = (lang) => t(`scores.${lang}`) +// Determina si un usuario puede hacer algo no en base a los permisos +const can = (permission) => hasPermission(`users.${permission}`) + +export { + can, + goTo, + transl +} diff --git a/resources/js/Pages/Admin/App/Create.vue b/resources/js/Pages/Admin/App/Create.vue new file mode 100644 index 0000000..0bed155 --- /dev/null +++ b/resources/js/Pages/Admin/App/Create.vue @@ -0,0 +1,84 @@ + + + diff --git a/resources/js/Pages/Admin/App/Destroy.vue b/resources/js/Pages/Admin/App/Destroy.vue new file mode 100644 index 0000000..a7846db --- /dev/null +++ b/resources/js/Pages/Admin/App/Destroy.vue @@ -0,0 +1,43 @@ + + + diff --git a/resources/js/Pages/Admin/App/Edit.vue b/resources/js/Pages/Admin/App/Edit.vue new file mode 100644 index 0000000..0789fcf --- /dev/null +++ b/resources/js/Pages/Admin/App/Edit.vue @@ -0,0 +1,73 @@ + + diff --git a/resources/js/Pages/Admin/App/Index.vue b/resources/js/Pages/Admin/App/Index.vue new file mode 100644 index 0000000..0b69590 --- /dev/null +++ b/resources/js/Pages/Admin/App/Index.vue @@ -0,0 +1,158 @@ + + + diff --git a/resources/js/Pages/Admin/App/Show.vue b/resources/js/Pages/Admin/App/Show.vue new file mode 100644 index 0000000..8211c9e --- /dev/null +++ b/resources/js/Pages/Admin/App/Show.vue @@ -0,0 +1,41 @@ + + diff --git a/resources/js/Pages/Admin/Departments/Component.js b/resources/js/Pages/Admin/Departments/Component.js new file mode 100644 index 0000000..311acf5 --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Component.js @@ -0,0 +1,15 @@ +import { t } from '@/Lang/i18n'; +import { hasPermission } from '@/rolePermission.js'; + +// Obtener ruta +const goTo = (route) => `admin.departments.${route}` +// Obtener traducción del componente +const transl = (lang) => t(`department.${lang}`) +// Determina si un usuario puede hacer algo no en base a los permisos +const can = (permission) => hasPermission(`users.${permission}`) + +export { + can, + goTo, + transl +} diff --git a/resources/js/Pages/Admin/Departments/Create.vue b/resources/js/Pages/Admin/Departments/Create.vue new file mode 100644 index 0000000..4803c4f --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Create.vue @@ -0,0 +1,74 @@ + + + diff --git a/resources/js/Pages/Admin/Departments/Destroy.vue b/resources/js/Pages/Admin/Departments/Destroy.vue new file mode 100644 index 0000000..698d010 --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Destroy.vue @@ -0,0 +1,43 @@ + + + diff --git a/resources/js/Pages/Admin/Departments/Edit.vue b/resources/js/Pages/Admin/Departments/Edit.vue new file mode 100644 index 0000000..76a4df2 --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Edit.vue @@ -0,0 +1,67 @@ + + diff --git a/resources/js/Pages/Admin/Departments/Index.vue b/resources/js/Pages/Admin/Departments/Index.vue new file mode 100644 index 0000000..2bf392e --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Index.vue @@ -0,0 +1,145 @@ + + + diff --git a/resources/js/Pages/Admin/Departments/Show.vue b/resources/js/Pages/Admin/Departments/Show.vue new file mode 100644 index 0000000..8211c9e --- /dev/null +++ b/resources/js/Pages/Admin/Departments/Show.vue @@ -0,0 +1,41 @@ + + diff --git a/routes/web.php b/routes/web.php index 2ad00e1..ff80d72 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,23 +1,25 @@ name('dashboard.')->middleware([ @@ -44,7 +46,7 @@ /** * Rutas de administrador - * + * * Estas ubicaciones son del administrador, sin embargo el desarrollador * puede acceder a ellas. */ @@ -52,7 +54,9 @@ 'auth:sanctum', config('jetstream.auth_session') ])->group(function () { - Route::resource('users', UserController::class); + Route::resource('users', UserController::class); + Route::resource('scores', ScoreController::class); + Route::resource('departments', DepartmentController::class); Route::prefix('/users')->name('users.')->group(function() { @@ -64,7 +68,7 @@ /** * Rutas solo del desarrollador - * + * * Son ubicaciones o funciones que pueden llegar a ser muy sensibles en el sistema, por lo que * solo el desarrollador debe de ser capaz de modificarlas o actualizarlas. */ @@ -77,9 +81,9 @@ /** * Elementos de la plantilla - * + * * Estos son elementos que existen y pueden ser usados en la plantilla, vienen ejemplos de uso. - * + * * Estas rutas pueden ser comentadas o eliminadas cuando se finalice un proyecto. Por default estan ocultas * en el dashboard. */ @@ -89,4 +93,4 @@ config('jetstream.auth_session') ])->group(function () { Route::get('/', [ExampleIndexController::class, 'index'])->name('index'); -}); \ No newline at end of file +}); -- 2.45.2 From 6934fa6b28f872f6c0a0d1d6218cc41bacca8a7e Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Wed, 2 Jul 2025 13:05:48 -0600 Subject: [PATCH 2/2] =?UTF-8?q?Se=20complet=C3=B3=20la=20taxonomia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/MainRoleController.php | 52 ++++-- app/Http/Requests/StoreMainRole.php | 1 + app/Http/Requests/UpdateMainRole.php | 1 + app/Models/{main_role.php => mainRole.php} | 2 +- resources/js/Lang/es.js | 10 ++ resources/js/Layouts/DashboardLayout.vue | 5 + .../js/Pages/Admin/Departments/Create.vue | 1 - .../js/Pages/Admin/Departments/Index.vue | 7 - .../js/Pages/Admin/MainRole/Component.js | 15 ++ resources/js/Pages/Admin/MainRole/Create.vue | 89 +++++++++++ resources/js/Pages/Admin/MainRole/Destroy.vue | 43 +++++ resources/js/Pages/Admin/MainRole/Edit.vue | 67 ++++++++ resources/js/Pages/Admin/MainRole/Index.vue | 151 ++++++++++++++++++ resources/js/Pages/Admin/MainRole/Show.vue | 41 +++++ routes/web.php | 2 + 15 files changed, 468 insertions(+), 19 deletions(-) rename app/Models/{main_role.php => mainRole.php} (94%) create mode 100644 resources/js/Pages/Admin/MainRole/Component.js create mode 100644 resources/js/Pages/Admin/MainRole/Create.vue create mode 100644 resources/js/Pages/Admin/MainRole/Destroy.vue create mode 100644 resources/js/Pages/Admin/MainRole/Edit.vue create mode 100644 resources/js/Pages/Admin/MainRole/Index.vue create mode 100644 resources/js/Pages/Admin/MainRole/Show.vue diff --git a/app/Http/Controllers/Admin/MainRoleController.php b/app/Http/Controllers/Admin/MainRoleController.php index 6c31f1c..f765755 100644 --- a/app/Http/Controllers/Admin/MainRoleController.php +++ b/app/Http/Controllers/Admin/MainRoleController.php @@ -6,8 +6,12 @@ * @copyright Copyright (c) 2023 Notsoweb (https://notsoweb.com) - All rights reserved. */ -use App\Models\MainRole; +use App\Http\Requests\StoreMainRole; +use App\Http\Requests\UpdateMainRole; +use App\Models\department; +use App\Models\mainRole; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Notsoweb\Core\Http\Controllers\VueController; /** @@ -21,22 +25,50 @@ class MainRoleController extends VueController { public function __construct() { - $this->vueRoot('admin.main-role'); + $this->vueRoot('admin.mainRole'); } public function index() { $q = request()->get('q'); + $mainRoles = mainRole::orderBy('name', 'ASC') + ->where('name', 'LIKE', "%{$q}%") + ->with('department:id,name') + ->paginate(config('app.pagination')); + return $this->vuew('index', [ - 'roles' => MainRole::where('name', 'LIKE', "%{$q}%") - ->orWhere('description', 'LIKE', "%{$q}%") - ->select([ - 'id', - 'name', - 'description', - ]) - ->paginate(config('app.pagination')) + 'mainRoles' => $mainRoles, ]); } + + public function create() + { + $department = department::orderBy('name', 'ASC')->get(); + + return $this->vuew('create', [ + 'departments' => $department, + ]); + } + + public function store(StoreMainRole $request) + { + mainRole::create($request->all()); + + return $this->index(); + } + + public function update(UpdateMainRole $request, mainRole $mainRole) + { + $mainRole->update($request->all()); + } + + public function destroy(mainRole $mainRole) + { try{ + $mainRole = mainRole::find($mainRole); + $mainRole->delete(); + }catch (\Throwable $th) { + Log::channel('mainRole')->error($th->getMessage()); + } + } } diff --git a/app/Http/Requests/StoreMainRole.php b/app/Http/Requests/StoreMainRole.php index b798988..3bc0ec7 100644 --- a/app/Http/Requests/StoreMainRole.php +++ b/app/Http/Requests/StoreMainRole.php @@ -34,6 +34,7 @@ public function rules() return [ 'name' => ['required', 'string'], 'description' => ['nullable', 'string'], + 'department_id' => ['required', 'integer'], ]; } } diff --git a/app/Http/Requests/UpdateMainRole.php b/app/Http/Requests/UpdateMainRole.php index 0968dcc..2fb4d8b 100644 --- a/app/Http/Requests/UpdateMainRole.php +++ b/app/Http/Requests/UpdateMainRole.php @@ -34,6 +34,7 @@ public function rules() return [ 'name' => ['required', 'string'], 'description' => ['nullable', 'string'], + 'department_id' => ['required', 'integer','exists:departments,id'], ]; } } diff --git a/app/Models/main_role.php b/app/Models/mainRole.php similarity index 94% rename from app/Models/main_role.php rename to app/Models/mainRole.php index b72cc32..9ef8cc2 100644 --- a/app/Models/main_role.php +++ b/app/Models/mainRole.php @@ -38,6 +38,6 @@ class MainRole extends Model */ public function department() { - return $this->belongsTo(Department::class); + return $this->belongsTo(department::class); } } diff --git a/resources/js/Lang/es.js b/resources/js/Lang/es.js index 78b1c51..644b7a2 100644 --- a/resources/js/Lang/es.js +++ b/resources/js/Lang/es.js @@ -236,6 +236,7 @@ export default { }, department:{ system: 'Sistema de departamentos', + title: 'Departamentos', create:{ title:'Crear departamento', description:'Permite crear nuevos departamentos para los usuarios.', @@ -243,5 +244,14 @@ export default { onError:'Error al crear el departamento', } }, + mainRole: { + system: 'Sistema de roles principales', + create:{ + title:'Crear rol principal', + description:'Permite crear nuevos roles principales para los usuarios.', + onSuccess:'Rol principal creado exitosamente', + onError:'Error al crear el rol principal', + }, + }, version:'Versión', } diff --git a/resources/js/Layouts/DashboardLayout.vue b/resources/js/Layouts/DashboardLayout.vue index 682b8c0..dc1bf11 100644 --- a/resources/js/Layouts/DashboardLayout.vue +++ b/resources/js/Layouts/DashboardLayout.vue @@ -80,6 +80,11 @@ onMounted(()=> { name="Departamentos" to="admin.departments.index" /> + form.post(route(goTo('store')), { onSuccess: () => Notify.success(transl('create.onSuccess')), onError: () => Notify.error(transl('create.onError')), - onFinish: () => form.reset('password') }); diff --git a/resources/js/Pages/Admin/Departments/Index.vue b/resources/js/Pages/Admin/Departments/Index.vue index 2bf392e..a400033 100644 --- a/resources/js/Pages/Admin/Departments/Index.vue +++ b/resources/js/Pages/Admin/Departments/Index.vue @@ -86,13 +86,6 @@ const query = ref(Searcher.query);
- `admin.mainRoles.${route}` +// Obtener traducción del componente +const transl = (lang) => t(`mainRole.${lang}`) +// Determina si un usuario puede hacer algo no en base a los permisos +const can = (permission) => hasPermission(`users.${permission}`) + +export { + can, + goTo, + transl +} diff --git a/resources/js/Pages/Admin/MainRole/Create.vue b/resources/js/Pages/Admin/MainRole/Create.vue new file mode 100644 index 0000000..8c02a53 --- /dev/null +++ b/resources/js/Pages/Admin/MainRole/Create.vue @@ -0,0 +1,89 @@ + + + diff --git a/resources/js/Pages/Admin/MainRole/Destroy.vue b/resources/js/Pages/Admin/MainRole/Destroy.vue new file mode 100644 index 0000000..698d010 --- /dev/null +++ b/resources/js/Pages/Admin/MainRole/Destroy.vue @@ -0,0 +1,43 @@ + + + diff --git a/resources/js/Pages/Admin/MainRole/Edit.vue b/resources/js/Pages/Admin/MainRole/Edit.vue new file mode 100644 index 0000000..76a4df2 --- /dev/null +++ b/resources/js/Pages/Admin/MainRole/Edit.vue @@ -0,0 +1,67 @@ + + diff --git a/resources/js/Pages/Admin/MainRole/Index.vue b/resources/js/Pages/Admin/MainRole/Index.vue new file mode 100644 index 0000000..24651c7 --- /dev/null +++ b/resources/js/Pages/Admin/MainRole/Index.vue @@ -0,0 +1,151 @@ + + + diff --git a/resources/js/Pages/Admin/MainRole/Show.vue b/resources/js/Pages/Admin/MainRole/Show.vue new file mode 100644 index 0000000..8211c9e --- /dev/null +++ b/resources/js/Pages/Admin/MainRole/Show.vue @@ -0,0 +1,41 @@ + + diff --git a/routes/web.php b/routes/web.php index ff80d72..92074ed 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Dashboard\IndexController; use App\Http\Controllers\Dashboard\NotificationController; use App\Http\Controllers\Admin\DepartmentController; +use App\Http\Controllers\Admin\MainRoleController; use App\Http\Controllers\Developer\RoleController; use App\Http\Controllers\Example\IndexController as ExampleIndexController; use Illuminate\Support\Facades\Route; @@ -57,6 +58,7 @@ Route::resource('users', UserController::class); Route::resource('scores', ScoreController::class); Route::resource('departments', DepartmentController::class); + Route::resource('mainRoles', MainRoleController::class); Route::prefix('/users')->name('users.')->group(function() { -- 2.45.2