Compare commits

...

9 Commits

11 changed files with 2862 additions and 735 deletions
@@ -3,9 +3,81 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\TravelTypeStoreRequest;
use App\Http\Requests\TravelTypeUpdateRequest;
use App\Models\TravelType;
use Illuminate\Http\Request;
class TravelTypeController extends Controller
{
/**
* لیست + جستجو + صفحه‌بندی انواع سفر
*/
public function index(Request $request)
{
abort_unless(auth('admin')->user()->canManageTravelTypes('view'), 403);
$query = TravelType::query();
// جستجو بر اساس عنوان / اسلاگ
if ($request->filled('search')) {
$query->where(function ($q) use ($request) {
$q->where('title', 'like', '%' . $request->search . '%')
->orWhere('slug', 'like', '%' . $request->search . '%');
});
}
// فیلتر وضعیت (1=فعال، 0=غیرفعال)
if ($request->filled('status')) {
$query->where('status', $request->status);
}
$travelTypes = $query->latest()->paginate(10)->withQueryString();
return view('admin.travel_types.index', compact('travelTypes'));
}
public function create()
{
abort_unless(auth('admin')->user()->canManageTravelTypes('create'), 403);
return view('admin.travel_types.create');
}
public function store(TravelTypeStoreRequest $request)
{
abort_unless(auth('admin')->user()->canManageTravelTypes('create'), 403);
TravelType::create($request->validated());
return redirect()->route('admin.travelTypes.index')
->with('success', 'نوع سفر با موفقیت ثبت شد.');
}
public function edit(TravelType $travelType)
{
abort_unless(auth('admin')->user()->canManageTravelTypes('edit'), 403);
return view('admin.travel_types.edit', compact('travelType'));
}
public function update(TravelTypeUpdateRequest $request, TravelType $travelType)
{
abort_unless(auth('admin')->user()->canManageTravelTypes('edit'), 403);
$travelType->update($request->validated());
return redirect()->route('admin.travelTypes.index')
->with('success', 'نوع سفر با موفقیت ویرایش شد.');
}
public function destroy(TravelType $travelType)
{
abort_unless(auth('admin')->user()->canManageTravelTypes('delete'), 403);
$travelType->delete();
return redirect()->route('admin.travelTypes.index')
->with('success', 'نوع سفر با موفقیت حذف شد.');
}
}
+2 -1
View File
@@ -12,7 +12,8 @@
"php": "^8.2",
"hekmatinasser/verta": "^9.0",
"laravel/framework": "^12.0",
"laravel/tinker": "^2.10.1"
"laravel/tinker": "^2.10.1",
"maatwebsite/excel": "^4.0"
},
"require-dev": {
"fakerphp/faker": "^1.23",
+376
View File
@@ -0,0 +1,376 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1:3308
-- Generation Time: Aug 17, 2026 at 04:32 PM
-- Server version: 8.4.7
-- PHP Version: 8.3.28
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `airline_agency`
--
-- --------------------------------------------------------
--
-- Table structure for table `admins`
--
DROP TABLE IF EXISTS `admins`;
CREATE TABLE IF NOT EXISTS `admins` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`full_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`username` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT '1' COMMENT '0:disable 1:enable',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `admins`
--
INSERT INTO `admins` (`id`, `full_name`, `username`, `email`, `mobile`, `password`, `status`, `created_at`, `updated_at`) VALUES
(2, 'شهرزاد زندی', 'shahrzad', 'shahrzad.zandi@gmail.com', '09359359350', '$2y$12$KpHLJK1kIz/TxVUOn4FV7udVA3xGLLDtEknPZyfh13Z2WPkRmHwni', 1, '2026-08-17 07:24:19', '2026-08-17 07:24:19'),
(3, 'مدیر سیستم', 'admin', 'admin@gmail.com', '09123456789', '$2y$12$ElsUA1CqyK6euG6adWhXRuayR/Jzcq1zH28eoN3ypfeVrmTIr/zAe', 1, '2026-08-17 07:44:25', '2026-08-17 09:12:14');
-- --------------------------------------------------------
--
-- Table structure for table `admin_permission`
--
DROP TABLE IF EXISTS `admin_permission`;
CREATE TABLE IF NOT EXISTS `admin_permission` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`admin_id` bigint UNSIGNED NOT NULL,
`permission_id` bigint UNSIGNED NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk1_admin_permission` (`permission_id`),
KEY `fk2_admin_permission` (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `airports`
--
DROP TABLE IF EXISTS `airports`;
CREATE TABLE IF NOT EXISTS `airports` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`city` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`country` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`code` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `comments`
--
DROP TABLE IF EXISTS `comments`;
CREATE TABLE IF NOT EXISTS `comments` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` bigint UNSIGNED NOT NULL,
`commentable_id` bigint UNSIGNED NOT NULL,
`commentable_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`body` text COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT '0',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
KEY `fk1_ comments` (`user_id`),
KEY `fk2_ comments` (`commentable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `favorites`
--
DROP TABLE IF EXISTS `favorites`;
CREATE TABLE IF NOT EXISTS `favorites` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` bigint UNSIGNED NOT NULL,
`favoritable_id` bigint UNSIGNED NOT NULL,
`favoritable_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
KEY `fk1_favorites` (`user_id`),
KEY `fk2_favorites` (`favoritable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `files`
--
DROP TABLE IF EXISTS `files`;
CREATE TABLE IF NOT EXISTS `files` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`fileable_id` bigint DEFAULT NULL,
`fileable_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`extension` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`size` bigint UNSIGNED NOT NULL,
`original_name` varchar(350) COLLATE utf8mb4_unicode_ci NOT NULL,
`path` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `flights`
--
DROP TABLE IF EXISTS `flights`;
CREATE TABLE IF NOT EXISTS `flights` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`travel_type_id` bigint UNSIGNED NOT NULL,
`flight_number` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`airline_name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`origin` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`destination` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`departure_date` date NOT NULL,
`departure_time` time NOT NULL,
`arrival_date` date NOT NULL,
`arrival_time` time NOT NULL,
`duration` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`price` decimal(12,2) NOT NULL,
`capacity` int UNSIGNED NOT NULL,
`status` tinyint NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `flights`
--
INSERT INTO `flights` (`id`, `travel_type_id`, `flight_number`, `airline_name`, `origin`, `destination`, `departure_date`, `departure_time`, `arrival_date`, `arrival_time`, `duration`, `price`, `capacity`, `status`, `created_at`, `updated_at`) VALUES
(1, 2, 'IR-725', 'ایران ایر', 'تهران', 'مشهد', '1405-06-03', '14:30:00', '1405-06-03', '16:00:00', '1 ساعت و 30 دقیقه', 2500000.00, 180, 0, '2026-08-17 13:52:44', '2026-08-17 13:56:00'),
(2, 3, 'TK-182', 'ترکیش ایرلاینز', 'تهران', 'استانبول', '2026-08-28', '20:00:00', '2026-08-29', '07:31:00', '11 ساعت و 31', 18500000.00, 220, 1, '2026-08-17 14:01:19', '2026-08-17 14:01:19'),
(3, 4, 'CH-401', 'وارش', 'تهران', 'کیش', '2026-09-01', '10:30:00', '2026-09-01', '20:33:00', '10 ساعت و3 دقیقه', 4200000.00, 160, 1, '2026-08-17 14:04:34', '2026-08-17 14:04:34');
-- --------------------------------------------------------
--
-- Table structure for table `payments`
--
DROP TABLE IF EXISTS `payments`;
CREATE TABLE IF NOT EXISTS `payments` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` bigint UNSIGNED NOT NULL,
`payable_id` bigint UNSIGNED NOT NULL,
`amount` decimal(12,2) NOT NULL,
`authority` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`transaction_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint NOT NULL COMMENT 'pending:0 | success:1| failed:2 | canceled:3',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `permissions`
--
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE IF NOT EXISTS `permissions` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `settings`
--
DROP TABLE IF EXISTS `settings`;
CREATE TABLE IF NOT EXISTS `settings` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`code` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`value` text COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `tours`
--
DROP TABLE IF EXISTS `tours`;
CREATE TABLE IF NOT EXISTS `tours` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`travel_type_id` bigint UNSIGNED NOT NULL,
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`image` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8mb4_unicode_ci NOT NULL,
`duration` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_date` date NOT NULL,
`end_date` date NOT NULL,
`price` decimal(12,2) NOT NULL,
`capacity` int UNSIGNED NOT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
KEY `fk1_tours` (`travel_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `tour_flights`
--
DROP TABLE IF EXISTS `tour_flights`;
CREATE TABLE IF NOT EXISTS `tour_flights` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`tour_id` bigint UNSIGNED NOT NULL,
`flight_id` bigint UNSIGNED NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
KEY `fk1_tour_flights` (`flight_id`),
KEY `fk2_tour_flights` (`tour_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `travel_types`
--
DROP TABLE IF EXISTS `travel_types`;
CREATE TABLE IF NOT EXISTS `travel_types` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `travel_types`
--
INSERT INTO `travel_types` (`id`, `title`, `slug`, `status`, `created_at`, `updated_at`) VALUES
(2, 'تور داخلی', 'domestic-tour', 1, '2026-08-17 11:36:22', '2026-08-17 11:36:22'),
(3, 'تور خارجی', 'international-tour', 1, '2026-08-17 11:46:33', '2026-08-17 11:46:33'),
(4, 'تور چارتر', 'charter-tour', 1, '2026-08-17 11:46:59', '2026-08-17 11:46:59'),
(5, 'تور ترکیبی', 'combined-tour', 1, '2026-08-17 11:47:41', '2026-08-17 11:47:41'),
(6, 'پرواز خارجی', 'international-flight', 1, '2026-08-17 11:48:19', '2026-08-17 11:48:19'),
(7, 'پرواز داخلی', 'domestic-flight', 1, '2026-08-17 11:48:44', '2026-08-17 11:48:44'),
(8, 'تور لحظه آخری', 'last-minute', 1, '2026-08-17 11:49:11', '2026-08-17 11:49:11'),
(9, 'پیشنویس نمونه', 'draft-sample', 0, '2026-08-17 11:49:33', '2026-08-17 11:56:13');
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`first_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`last_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`national_code` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`birth_date` date DEFAULT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `admin_permission`
--
ALTER TABLE `admin_permission`
ADD CONSTRAINT `fk1_admin_permission` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
ADD CONSTRAINT `fk2_admin_permission` FOREIGN KEY (`admin_id`) REFERENCES `admins` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
--
-- Constraints for table `comments`
--
ALTER TABLE `comments`
ADD CONSTRAINT `fk1_ comments` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
ADD CONSTRAINT `fk2_ comments` FOREIGN KEY (`commentable_id`) REFERENCES `comments` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
--
-- Constraints for table `favorites`
--
ALTER TABLE `favorites`
ADD CONSTRAINT `fk1_favorites` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
ADD CONSTRAINT `fk2_favorites` FOREIGN KEY (`favoritable_id`) REFERENCES `favorites` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
--
-- Constraints for table `tours`
--
ALTER TABLE `tours`
ADD CONSTRAINT `fk1_tours` FOREIGN KEY (`travel_type_id`) REFERENCES `travel_types` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
--
-- Constraints for table `tour_flights`
--
ALTER TABLE `tour_flights`
ADD CONSTRAINT `fk1_tour_flights` FOREIGN KEY (`flight_id`) REFERENCES `flights` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
ADD CONSTRAINT `fk2_tour_flights` FOREIGN KEY (`tour_id`) REFERENCES `tours` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
@@ -0,0 +1,3 @@
<div>
<!-- An unexamined life is not worth living. - Socrates -->
</div>
@@ -0,0 +1,3 @@
<div>
<!-- Knowing is not enough; we must apply. Being willing is not enough; we must do. - Leonardo da Vinci -->
</div>
@@ -0,0 +1,3 @@
<div>
<!-- If you do not have a consistent goal in life, you can not live it in a consistent way. - Marcus Aurelius -->
</div>
@@ -0,0 +1,3 @@
<div>
<!-- Very little is needed to make a happy life. - Marcus Aurelius -->
</div>
+306 -1
View File
@@ -1,3 +1,308 @@
@extends('admin.layouts.app')
@section('title', 'ایجاد مدیر جدید')
@section('breadcrumb')
<div>
<!-- Nothing worth having comes easy. - Theodore Roosevelt -->
<h1 class="page-title fw-medium fs-18 mb-2">
ایجاد مدیر جدید
</h1>
<nav>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item">
<a href="{{ route('admin.dashboard.index') }}">
داشبورد
</a>
</li>
<li class="breadcrumb-item">
<a href="{{ route('admin.admins.index') }}">
مدیران
</a>
</li>
<li class="breadcrumb-item active">
ایجاد مدیر
</li>
</ol>
</nav>
</div>
@endsection
@section('content')
<div class="container-fluid pt-4">
<form
action="{{ route('admin.admins.store') }}"
method="POST"
>
@csrf
<div class="row">
<div class="col-xl-8">
<div class="card custom-card">
<div class="card-header">
<h5 class="mb-0">
اطلاعات مدیر
</h5>
</div>
<div class="card-body">
<div class="row">
{{-- نام کامل --}}
<div class="col-md-6 mb-3">
<label class="form-label">
نام و نام خانوادگی
</label>
<input
type="text"
name="full_name"
class="form-control @error('full_name') is-invalid @enderror"
value="{{ old('full_name') }}"
>
@error('full_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- نام کاربری --}}
<div class="col-md-6 mb-3">
<label class="form-label">
نام کاربری
</label>
<input
type="text"
name="username"
class="form-control @error('username') is-invalid @enderror"
value="{{ old('username') }}"
>
@error('username')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- ایمیل --}}
<div class="col-md-6 mb-3">
<label class="form-label">
ایمیل
</label>
<input
type="email"
name="email"
class="form-control @error('email') is-invalid @enderror"
value="{{ old('email') }}"
>
@error('email')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- موبایل --}}
<div class="col-md-6 mb-3">
<label class="form-label">
موبایل
</label>
<input
type="text"
name="mobile"
class="form-control @error('mobile') is-invalid @enderror"
value="{{ old('mobile') }}"
>
@error('mobile')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- رمز --}}
<div class="col-md-6 mb-3">
<label class="form-label">
رمز عبور
</label>
<input
type="password"
name="password"
class="form-control @error('password') is-invalid @enderror"
>
@error('password')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- تکرار رمز --}}
<div class="col-md-6 mb-3">
<label class="form-label">
تکرار رمز عبور
</label>
<input
type="password"
name="password_confirmation"
class="form-control"
>
</div>
</div>
</div>
</div>
</div>
{{-- ستون سمت چپ --}}
<div class="col-xl-4">
{{-- وضعیت --}}
<div class="card custom-card mb-3">
<div class="card-header">
وضعیت
</div>
<div class="card-body">
<select
name="status"
class="form-select"
>
<option value="1">
فعال
</option>
<option value="0">
غیرفعال
</option>
</select>
</div>
</div>
{{-- دسترسی‌ها --}}
<div class="card custom-card mb-3">
<div class="card-header">
دسترسی‌ها
</div>
<div class="card-body">
@foreach($permissions ?? [] as $permission)
<div class="form-check mb-2">
<input
class="form-check-input"
type="checkbox"
name="permissions[]"
value="{{ $permission->id }}"
>
<label class="form-check-label">
{{ $permission->title }}
</label>
</div>
@endforeach
</div>
</div>
{{-- دکمه ها --}}
<div class="card custom-card">
<div class="card-body d-grid gap-2">
<button
type="submit"
class="btn btn-primary"
>
<i class="ri-save-line me-1"></i>
ذخیره مدیر
</button>
<a
href="{{ route('admin.admins.index') }}"
class="btn btn-light"
>
بازگشت
</a>
</div>
</div>
</div>
</div>
</form>
</div>
@endsection
+425 -1
View File
@@ -1,3 +1,427 @@
@extends('admin.layouts.app')
@section('title', 'ویرایش مدیر')
@section('breadcrumb')
<div>
<!-- He who is contented is rich. - Laozi -->
<h1 class="page-title fw-medium fs-18 mb-2">
ویرایش مدیر
</h1>
<nav>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item">
<a href="{{ route('admin.dashboard.index') }}">
داشبورد
</a>
</li>
<li class="breadcrumb-item">
<a href="{{ route('admin.admins.index') }}">
مدیریت مدیران
</a>
</li>
<li class="breadcrumb-item active">
ویرایش مدیر
</li>
</ol>
</nav>
</div>
@endsection
@section('content')
<div class="container-fluid pt-4">
<form action="{{ route('admin.admins.update', $admin) }}"
method="POST">
@csrf
@method('PUT')
<div class="row">
{{-- اطلاعات مدیر --}}
<div class="col-xl-8">
<div class="card custom-card">
<div class="card-header">
<div class="card-title">
اطلاعات مدیر
</div>
</div>
<div class="card-body">
<div class="row gy-3">
{{-- نام --}}
<div class="col-xl-6">
<label class="form-label">
نام و نام خانوادگی
<span class="text-danger">*</span>
</label>
<input type="text"
name="full_name"
value="{{ old('full_name', $admin->full_name) }}"
class="form-control @error('full_name') is-invalid @enderror"
placeholder="نام و نام خانوادگی">
@error('full_name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- username --}}
<div class="col-xl-6">
<label class="form-label">
نام کاربری
<span class="text-danger">*</span>
</label>
<input type="text"
name="username"
value="{{ old('username', $admin->username) }}"
class="form-control @error('username') is-invalid @enderror"
placeholder="نام کاربری">
@error('username')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- email --}}
<div class="col-xl-6">
<label class="form-label">
ایمیل
<span class="text-danger">*</span>
</label>
<input type="email"
name="email"
value="{{ old('email', $admin->email) }}"
class="form-control @error('email') is-invalid @enderror"
placeholder="example@gmail.com"
dir="ltr">
@error('email')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- mobile --}}
<div class="col-xl-6">
<label class="form-label">
موبایل
<span class="text-danger">*</span>
</label>
<input type="text"
name="mobile"
value="{{ old('mobile', $admin->mobile) }}"
class="form-control @error('mobile') is-invalid @enderror"
placeholder="09123456789"
dir="ltr">
@error('mobile')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- password --}}
<div class="col-xl-6">
<label class="form-label">
رمز عبور جدید
</label>
<input type="password"
name="password"
class="form-control @error('password') is-invalid @enderror"
placeholder="در صورت تغییر وارد کنید">
<small class="text-muted d-block mt-1">
اگر نمی‌خواهید رمز تغییر کند، این قسمت را خالی بگذارید.
</small>
@error('password')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
{{-- password confirmation --}}
<div class="col-xl-6">
<label class="form-label">
تکرار رمز عبور جدید
</label>
<input type="password"
name="password_confirmation"
class="form-control"
placeholder="تکرار رمز جدید">
</div>
{{-- status --}}
<div class="col-xl-6">
<label class="form-label">
وضعیت
</label>
<select name="status"
class="form-select @error('status') is-invalid @enderror">
<option value="1"
@selected(old('status', $admin->status) == 1)>
فعال
</option>
<option value="0"
@selected(old('status', $admin->status) == 0)>
غیرفعال
</option>
</select>
@error('status')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
</div>
</div>
</div>
</div>
{{-- دسترسی‌ها --}}
<div class="col-xl-4">
<div class="card custom-card">
<div class="card-header">
<div>
<div class="card-title mb-1">
سطح دسترسی
</div>
<small class="text-muted">
دسترسی‌های مدیر را مدیریت کنید.
</small>
</div>
</div>
<div class="card-body">
@php
$selectedPermissions = old(
'permissions',
$admin->permissions->pluck('id')->toArray()
);
@endphp
@error('permissions')
<div class="alert alert-danger py-2">
{{ $message }}
</div>
@enderror
@forelse($permissions as $permission)
<div class="form-check form-check-lg mb-3">
<input class="form-check-input"
type="checkbox"
name="permissions[]"
value="{{ $permission->id }}"
id="permission_{{ $permission->id }}"
@checked(in_array(
$permission->id,
$selectedPermissions
))>
<label class="form-check-label"
for="permission_{{ $permission->id }}">
<span class="fw-semibold">
{{ $permission->name }}
</span>
@if($permission->description)
<small class="text-muted d-block mt-1">
{{ $permission->description }}
</small>
@endif
</label>
</div>
@empty
<div class="text-center text-muted py-4">
<i class="ri-shield-keyhole-line fs-2 d-block mb-2"></i>
هنوز دسترسی‌ای تعریف نشده است.
</div>
@endforelse
</div>
</div>
</div>
</div>
{{-- دکمه‌ها --}}
<div class="card custom-card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<div class="text-muted fs-12">
<i class="ri-information-line me-1"></i>
آخرین ویرایش:
@if($admin->updated_at)
<td>{{ $type->updated_at ? $type->updated_at->toJalali()->format('Y/m/d H:i') : '-' }}</td>
@else
-
@endif
</div>
<div class="d-flex gap-2">
<a href="{{ route('admin.admins.index') }}"
class="btn btn-light">
انصراف
</a>
<button type="submit"
class="btn btn-primary">
<i class="ri-save-line me-1"></i>
ذخیره تغییرات
</button>
</div>
</div>
</div>
</div>
</form>
</div>
@endsection
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff