diff --git a/app/Modules/Admin/Http/Controllers/AdminDocsController.php b/app/Modules/Admin/Http/Controllers/AdminDocsController.php new file mode 100644 index 0000000..9daa1c4 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/AdminDocsController.php @@ -0,0 +1,72 @@ +get(); + return view('admin::docs.index', [ + 'docs' => $docs + ]); + } + + + public function store(Request $request) + { + $validated = $request->validate([ + 'name' => 'required', + 'description' => '', + 'file' => 'required|mimes:pdf,zip' + ]); + $path = $request->file('file')->store('docs', ['disk' => 'local']); + $request['path'] = $path; + $document = Document::create( + $request->only(['name', 'description', 'path']) + ); + return to_route('admin.docs'); + } + + public function edit(Document $document) + { + return view('admin::docs.edit', [ + 'document' => $document + ]); + } + + public function update(Request $request, Document $document) + { + $validated = $request->validate([ + 'name' => 'required', + 'description' => '', + 'file' => 'mimes:pdf,zip' + ]); + + if ($request->file('file')) + { + $path = $request->file('file')->store('docs', ['disk' => 'local']); + $request['path'] = $path; + } + else + { + $reuqest['path'] = $document->path; + } + $document = $document->update( + $request->only(['name', 'description', 'path']) + ); + return to_route('admin.docs'); + } + + public function delete(Document $document) + { + $document->delete(); + return to_route('admin.docs'); + } +} diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index a848172..9e33fa1 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -48,4 +48,10 @@ Route::post('/admin/post/{post}/update', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'update'])->name('admin.posts.update'); Route::post('/admin/post/{post}/delete', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'delete'])->name('admin.posts.delete'); + Route::get('/admin/docs', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'index'])->name('admin.docs'); + Route::get('/admin/docs/{document}/edit', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'edit'])->name('admin.docs.edit'); + Route::post('/admin/docs/create', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'store'])->name('admin.docs.create'); + Route::get('/admin/docs/{document}/edit', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'edit'])->name('admin.docs.edit'); + Route::post('/admin/docs/{document}/update', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'update'])->name('admin.docs.update'); + Route::post('/admin/docs/{document}/delete', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'delete'])->name('admin.docs.delete'); }); \ No newline at end of file diff --git a/app/Modules/Admin/Views/docs/edit.blade.php b/app/Modules/Admin/Views/docs/edit.blade.php new file mode 100644 index 0000000..95d9d75 --- /dev/null +++ b/app/Modules/Admin/Views/docs/edit.blade.php @@ -0,0 +1,35 @@ +@php($title = 'Документы / ' . $document->name) +@extends('layouts.admin') +@section('content') +
+ @csrf + @csrf +
+ + + @error('name') +
{{ $message }}
+ @enderror +
+
+ + + @error('description') +
{{ $message }}
+ @enderror +
+
+ +
+ +
+ + + + @error('file') +
{{ $message }}
+ @enderror +
+ +
+@endsection diff --git a/app/Modules/Admin/Views/docs/index.blade.php b/app/Modules/Admin/Views/docs/index.blade.php new file mode 100644 index 0000000..5915cef --- /dev/null +++ b/app/Modules/Admin/Views/docs/index.blade.php @@ -0,0 +1,100 @@ +@php($title = 'Документы') +@extends('layouts.admin') +@section('content') +
+
+ +
+
+
+ + + + + + + + + + @foreach ($docs as $document) + + + + + + + @endforeach + +
НазваниеОписаниеДата создания +
+ {{ $document->name }} + + {{ $document->description }} + + {{ $document->created_at ? $document->created_at->diffForHumans() : '' }} + + +
+
+ + + +@endsection diff --git a/app/Modules/Admin/Views/menu/index.blade.php b/app/Modules/Admin/Views/menu/index.blade.php index fecb6fd..fb9a403 100644 --- a/app/Modules/Admin/Views/menu/index.blade.php +++ b/app/Modules/Admin/Views/menu/index.blade.php @@ -34,6 +34,12 @@ class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" +
  • + +
  • + @endif diff --git a/app/Modules/Docs/Config/config.php b/app/Modules/Docs/Config/config.php new file mode 100644 index 0000000..ce09543 --- /dev/null +++ b/app/Modules/Docs/Config/config.php @@ -0,0 +1,5 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->string('path'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('docs'); + } +}; diff --git a/app/Modules/Docs/Http/Components/DocumentComponent.php b/app/Modules/Docs/Http/Components/DocumentComponent.php new file mode 100644 index 0000000..7e96a43 --- /dev/null +++ b/app/Modules/Docs/Http/Components/DocumentComponent.php @@ -0,0 +1,32 @@ + Document::find($this->id) + ] + ); + } +} diff --git a/app/Modules/Docs/Http/Controllers/DocsController.php b/app/Modules/Docs/Http/Controllers/DocsController.php new file mode 100644 index 0000000..f9f867f --- /dev/null +++ b/app/Modules/Docs/Http/Controllers/DocsController.php @@ -0,0 +1,24 @@ +get(); + return view('docs::index', [ + 'docs' => $docs + ]); + } + public function download(Document $document) + { + $ext = explode('.', $document->path); + $ext = end($ext); + return Storage::download($document->path, $document->name . '.' . $ext); + } +} \ No newline at end of file diff --git a/app/Modules/Docs/Models/Document.php b/app/Modules/Docs/Models/Document.php new file mode 100644 index 0000000..8c02482 --- /dev/null +++ b/app/Modules/Docs/Models/Document.php @@ -0,0 +1,20 @@ +app->register(RouteServiceProvider::class); + } + + public function boot() + { + $this->registerViews(); + $this->registerLivewireViews(); + $this->registerMigrations(); + $this->registerConfig(); + $this->registerComponent(); + $this->registerLivewire(); + } + + protected function registerViews() + { + $moduleViewsPath = __DIR__ . '/../Views'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerLivewireViews() + { + $moduleViewsPath = __DIR__ . '/../Views/livewire'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerMigrations() + { + $this->loadMigrationsFrom( + app_path('Modules/' . $this->moduleName . '/Database/Migrations') + ); + } + + protected function registerConfig() + { + $path = app_path('Modules/' . $this->moduleName . '/Config/config.php'); + $this->mergeConfigFrom( + $path, + strtolower($this->moduleName) + ); + } + + protected function registerLivewire() + { + //Livewire::component('', \Modules\\Http\Livewire\::class); + } + + protected function registerComponent() + { + Blade::component('document', \Modules\Docs\Http\Components\DocumentComponent::class); + } +} \ No newline at end of file diff --git a/app/Modules/Docs/Providers/RouteServiceProvider.php b/app/Modules/Docs/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..4d56b91 --- /dev/null +++ b/app/Modules/Docs/Providers/RouteServiceProvider.php @@ -0,0 +1,24 @@ +registerWebRoutes(); + } + + protected function registerWebRoutes() + { + //Add Web Routes with web Guard + Route::middleware('web') + //Set Default Controllers Namespace + ->namespace('Modules\\Docs\\Http\\Controllers') + ->group(app_path('Modules/Docs/Routes/web.php')); + } +} \ No newline at end of file diff --git a/app/Modules/Docs/Routes/web.php b/app/Modules/Docs/Routes/web.php new file mode 100644 index 0000000..536347e --- /dev/null +++ b/app/Modules/Docs/Routes/web.php @@ -0,0 +1,12 @@ +group(function () +{ + + Route::get('/doc', [DocsController::class, 'index'])->name('docs.index'); + Route::get('/docs/{document}/download', [DocsController::class, 'download'])->name('docs.download'); + +}); \ No newline at end of file diff --git a/app/Modules/Docs/Views/components/document.blade.php b/app/Modules/Docs/Views/components/document.blade.php new file mode 100644 index 0000000..0f853c7 --- /dev/null +++ b/app/Modules/Docs/Views/components/document.blade.php @@ -0,0 +1,18 @@ +
    +
    +

    {{ $document->name }}

    +
    + {{ $document->description }} +
    +
    Загружен: {{ $document->created_at->diffForHumans() }}
    +
    + +
    diff --git a/app/Modules/Docs/Views/index.blade.php b/app/Modules/Docs/Views/index.blade.php new file mode 100644 index 0000000..68e95b8 --- /dev/null +++ b/app/Modules/Docs/Views/index.blade.php @@ -0,0 +1,12 @@ +@php($title = 'Документы') +@extends('layouts.app') +@section('content') +
    + @foreach ($docs as $document) +
    +
    +
    + @endforeach +
    + +@endsection diff --git a/app/Modules/Post/Http/Controllers/PostController.php b/app/Modules/Post/Http/Controllers/PostController.php index 89415ac..890bfe5 100644 --- a/app/Modules/Post/Http/Controllers/PostController.php +++ b/app/Modules/Post/Http/Controllers/PostController.php @@ -3,13 +3,22 @@ namespace Modules\Post\Http\Controllers; use Modules\Post\Models\Post; - +use Modules\Post\Models\PostCategory; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PostController extends Controller { + + public function index(Request $request) + { + return view('post::index', [ + 'categories' => PostCategory::cases(), + 'filter' => $request->filter ? $request->filter : [] + ]); + } + public function open(Post $post) { return view('post::list.card', [ diff --git a/app/Modules/Post/Http/Livewire/PostsList.php b/app/Modules/Post/Http/Livewire/PostsList.php index 8bf507c..d44bad1 100644 --- a/app/Modules/Post/Http/Livewire/PostsList.php +++ b/app/Modules/Post/Http/Livewire/PostsList.php @@ -10,7 +10,7 @@ class PostsList extends Component { public $count; - public $filter; + public $category; public function mount() { @@ -22,7 +22,15 @@ public function open($id) } public function render() { - $posts = Post::all(); + $posts = Post::orderBy('id', 'desc'); + if ($this->category && $this->category != 'all') + $posts = $posts->where('category', $this->category); + + if ($this->count) + $posts = $posts->take($this->count)->get(); + else + $posts = $posts->take(10)->get(); + return view('post::list.cards', [ 'posts' => $posts ]); diff --git a/app/Modules/Post/Routes/web.php b/app/Modules/Post/Routes/web.php index 50ce40a..2a055cc 100644 --- a/app/Modules/Post/Routes/web.php +++ b/app/Modules/Post/Routes/web.php @@ -4,8 +4,5 @@ Route::middleware(['auth'])->group(function () { - - Route::get('/post/{post}', [Modules\Post\Http\Controllers\PostController::class, 'open'])->name('post.open'); - - + Route::get('/news', [Modules\Post\Http\Controllers\PostController::class, 'index'])->name('posts'); }); \ No newline at end of file diff --git a/app/Modules/Post/Views/index.blade.php b/app/Modules/Post/Views/index.blade.php index f8198cf..caa45f6 100644 --- a/app/Modules/Post/Views/index.blade.php +++ b/app/Modules/Post/Views/index.blade.php @@ -1,4 +1,53 @@ @extends('layouts.app') - @section('content') -

    Example views

    - @endsection \ No newline at end of file + +@section('content') + +
    +
    +
    +
    + + + + @foreach ($categories as $category) + value ? 'checked' : '' }}> + + @endforeach +
    + +
    + + +
    + +
    +
    + +
    + @livewire('posts.list', $filter) +
    +
    +@endsection diff --git a/app/Traits/ConfirmDelete.php b/app/Traits/ConfirmDelete.php new file mode 100644 index 0000000..038386b --- /dev/null +++ b/app/Traits/ConfirmDelete.php @@ -0,0 +1,19 @@ +all()); + //return false; + }); + } +} diff --git a/resources/css/docs.css b/resources/css/docs.css new file mode 100644 index 0000000..abcedd5 --- /dev/null +++ b/resources/css/docs.css @@ -0,0 +1,20 @@ +.document-card { + transition: box-shadow .3s; +} + +.document-card:hover { + box-shadow: 0 0 11px rgba(33, 33, 33, .2); +} + +.document-card .download { + width: 70px; + background-color: #b3b3b3 +} + +.document-card:hover .download { + background-color: #e6662a !important +} + +.document-card:hover h4 { + color: #e6662a !important +} \ No newline at end of file diff --git a/resources/views/clients/table.blade.php b/resources/views/clients/table.blade.php index 8a622eb..385adf4 100644 --- a/resources/views/clients/table.blade.php +++ b/resources/views/clients/table.blade.php @@ -18,10 +18,10 @@ уникальные
    - @foreach ($cities as $city) - + @endforeach
    @@ -48,7 +48,8 @@ - diff --git a/resources/views/components/document.blade.php b/resources/views/components/document.blade.php new file mode 100644 index 0000000..0bbfcc4 --- /dev/null +++ b/resources/views/components/document.blade.php @@ -0,0 +1,3 @@ +
    + +
    \ No newline at end of file diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php index 10b95ab..e44b5c4 100644 --- a/resources/views/layouts/admin.blade.php +++ b/resources/views/layouts/admin.blade.php @@ -15,7 +15,7 @@ - @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css']) + @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css', 'resources/css/docs.css']) diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 5f07e00..bbc2eae 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -15,7 +15,7 @@ - @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css']) + @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css', 'resources/css/docs.css']) @@ -27,7 +27,8 @@ Logo -
    +
    @isset($title) {{ $title }} @endisset diff --git a/resources/views/livewire/main-menu.blade.php b/resources/views/livewire/main-menu.blade.php index d1b5d95..f852c7c 100644 --- a/resources/views/livewire/main-menu.blade.php +++ b/resources/views/livewire/main-menu.blade.php @@ -27,7 +27,7 @@ class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" ar @endif @endif + + @if (in_array($roles::SUPER_ADMIN, $userRoles)) @endif diff --git a/resources/views/makets/news.blade.php b/resources/views/makets/news.blade.php deleted file mode 100644 index 4315b7b..0000000 --- a/resources/views/makets/news.blade.php +++ /dev/null @@ -1,107 +0,0 @@ -@extends('layouts.app') - -@section('content') - -
    -
    -
    -
    - - - - - - - - - - - -
    -
    - - -
    -
    - -
    - -
    - @for ($i = 0; $i <= 3; $i++) -
    -
    -
    - ... -
    - Новость -
    -
    -
    -
    - Рассрочка на 3 года -
    -

    Быстро подберите вариант для клиента из нашего каталога

    -

    10 августа 2024 г.

    -
    -
    -
    -
    - ... -
    - Новость -
    -
    -
    -
    - Рассрочка на 3 года -
    -

    Быстро подберите вариант для клиента из нашего каталога

    -

    10 августа 2024 г.

    -
    -
    -
    -
    - ... -
    - Новость -
    -
    -
    -
    - Рассрочка на 3 года -
    -

    Быстро подберите вариант для клиента из нашего каталога

    -

    10 августа 2024 г.

    -
    -
    -
    - @endfor -
    -
    -@endsection diff --git a/resources/views/user/dashboard.blade.php b/resources/views/user/dashboard.blade.php index c15d54b..26e47ef 100644 --- a/resources/views/user/dashboard.blade.php +++ b/resources/views/user/dashboard.blade.php @@ -78,7 +78,9 @@ class="list-group-item list-group-item-action p-3 bg-white rounded border border
    Новости
    Смотреть все
    - @livewire(name: 'posts.list') + @livewire('posts.list', [ + 'count' => 3, + ])
    diff --git a/routes/web.php b/routes/web.php index d41ca19..a936758 100644 --- a/routes/web.php +++ b/routes/web.php @@ -56,11 +56,6 @@ return view(view: 'makets.projects'); }); -Route::get('news', function () -{ - return view(view: 'makets.news'); -}); - Route::get('profile', function () { return view(view: 'user.profile'); diff --git a/vite.config.js b/vite.config.js index ba008c1..fa92396 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,6 +8,7 @@ export default defineConfig({ 'resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css', + 'resources/css/docs.css', ], refresh: true, }),