[WIP] Admin for Families, Genres and Species

This commit is contained in:
Ludovic CANDELLIER
2020-04-13 01:43:04 +02:00
parent 134e04d197
commit b7edcd402f
37 changed files with 655 additions and 334 deletions

View File

@@ -31,7 +31,7 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
try {
window.$ = window.jQuery = require('jquery');
require('datatables.net');
require('bootstrap');
require('datatables.net-bs4');
require('datatables.net-buttons-bs4');
} catch (e) {}

View File

@@ -21,6 +21,42 @@ return [
'successdel' => 'La catégorie a été correctement effacée',
'confirmdelete' => 'Confirmez-vous la suppression de la catégorie ?',
],
'families' => [
'title' => 'Familles',
'description' => 'Gérer les familles',
'list' => 'Liste des familles',
'add' => 'Ajouter une famille',
'edit' => 'Editer une famille',
'del' => 'Effacer une famille',
'successadd' => 'La famille a été correctement ajoutée',
'successmod' => 'La famille a été correctement modifiée',
'successdel' => 'La famille a été correctement effacée',
'confirmdelete' => 'Confirmez-vous la suppression de la famille ?',
],
'species' => [
'title' => 'Espèces',
'description' => 'Gérer les espèce',
'list' => 'Liste des espèces',
'add' => 'Ajouter une espèce',
'edit' => 'Editer une espèce',
'del' => 'Effacer une espèce',
'successadd' => 'L\'espèce a été correctement ajoutée',
'successmod' => 'L\'espèce a été correctement modifiée',
'successdel' => 'L\'espèce a été correctement effacée',
'confirmdelete' => 'Confirmez-vous la suppression de l\'espèce ?',
],
'genres' => [
'title' => 'Genres',
'description' => 'Gérer les genres',
'list' => 'Liste des genres',
'add' => 'Ajouter un genre',
'edit' => 'Editer un genre',
'del' => 'Effacer un genre',
'successadd' => 'Le genre a été correctement ajoutée',
'successmod' => 'Le genre a été correctement modifiée',
'successdel' => 'Le genre a été correctement effacée',
'confirmdelete' => 'Confirmez-vous la suppression du genre ?',
],
'products' => [
'title' => 'Gestion des produits',
'description' => 'Gérer les produits',

View File

@@ -1,4 +1,3 @@
TEST
<nav class="main-header navbar navbar-expand navbar-{{ config('boilerplate.theme.navbar.bg') }} navbar-{{ config('boilerplate.theme.navbar.type') }} {{ config('boilerplate.theme.navbar.border') ? "" : "border-bottom-0" }}">
<ul class="nav navbar-nav">
<li class="nav-item">

View File

@@ -13,8 +13,10 @@
</head>
<body class="layout-fixed layout-navbar-fixed sidebar-mini">
<div class="wrapper">
@include('layout.header')
@include('boilerplate::layout.mainsidebar')
<div class="content-wrapper">
@include('layout.contentheader')
<section class="content">
@@ -23,7 +25,9 @@
</div>
</section>
</div>
@includeWhen(config('boilerplate.theme.footer.visible', true), 'layout.footer')
<aside class="control-sidebar control-sidebar-{{ config('boilerplate.theme.sidebar.type') }} elevation-{{ config('boilerplate.theme.sidebar.shadow') }}">
<button class="btn btn-sm" data-widget="control-sidebar"><span class="fa fa-times"></span></button>
<div class="control-sidebar-content">
@@ -32,6 +36,7 @@
</div>
</div>
</aside>
<div class="control-sidebar-bg"></div>
</div>
<script src="{{ mix('/bootstrap.min.js', '/assets/vendor/boilerplate') }}"></script>

View File

@@ -8,14 +8,7 @@
@section('content')
{{ Form::open(['route' => 'Shop.Admin.families.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
<div class="row">
<div class="col-12 text-right">
@include('components.button-save')
</div>
</div>
{{ Form::open(['route' => 'Shop.Admin.families.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
@include('Shop.Admin.families.form')
</form>

View File

@@ -1,39 +1,16 @@
@extends('layout.index', [
'title' => 'Familles',
'subtitle' => 'Edition d\'une famille',
'title' => __('shop.families.title'),
'subtitle' => __('shop.families.edit'),
'breadcrumb' => ['Familles']
])
@include('boilerplate::load.icheck')
@include('boilerplate::load.fileinput')
@prepend('js')
@include('components.js', ['js' => '/js/main.min.js'])
@endprepend
@push('css')
@include('components.css', ['css' => '/css/main.min.css'])
@endpush
@section('content')
{{ Form::open(['route' => 'Shop.Admin.Families.update', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }}
<div class="row">
<div class="col-sm-12 mbl">
<a href="{{ route("Shop.Admin.Families.index") }}" class="btn btn-default">
{{ __('families.list.title') }}
</a>
<span class="btn-group pull-right">
@include('components.button-save')
</span>
</div>
</div>
<input type="hidden" name="id" value="{{ $id }}">
{{ Form::open(['route' => 'Shop.Admin.Families.store', 'id' => 'form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $family['id'] }}">
@include('Shop.Admin.Families.form')
</form>
@endsection

View File

@@ -1,38 +1,21 @@
<div class="row">
<div class="col-md-8">
{{ Form::label('name', 'Nom') }}
@include('components.input', ['name' => 'name', 'value' => (isset($section['name'])) ? $section['name'] : null, 'required' => true])
@include('components.input', ['name' => 'name', 'value' => (isset($family['name'])) ? $family['name'] : null, 'required' => true])
{{ Form::label('description', 'Description') }}
@include('components.textarea', ['name' => 'description', 'id_name' => 'description', 'value' => (isset($section['description'])) ? $section['description'] : null, 'required' => true])
{{ Form::label('alias', 'Alias') }}
@include('components.input', ['name' => 'alias', 'value' => (isset($family['alias'])) ? $family['alias'] : null, 'required' => true])
{{ Form::label('description', 'Rubrique parente') }}
</div>
<div class="col-md-4">
<div class="row">
<div class="col-md-12 row-new-lot-photo row-lot-photo mt-3">
{{ Form::label('latin', 'Nom latin') }}
@include('components.input', ['name' => 'latin', 'value' => (isset($family['latin'])) ? $family['latin'] : null, 'required' => true])
<!--
<p>
<button type="button" class="btn btn-danger delete-new-lot-photo-btn"><i class="fa fa-minus-circle"></i></button>
Photo <span class="row-photo-number"></span>
</p>
-->
<input name="lot_photos[][file]" type="file" class="file" data-show-upload="false" data-show-caption="true" data-msg-placeholder="Choisissez une photo">
</div>
</div>
</div>
@include('boilerplate::load.tinymce')
@push('js')
<script>
$(function() {
$('#description').tinymce({});
})
</script>
@endpush
<div class="row">
<div class="col-md-8">
<div class="float-right mt-3">
@include('components.button-save')
</div>
</div>
</div>

View File

@@ -1,5 +1,6 @@
@extends('layout.index', [
'title' => __('shop.families.title'),
'subtitle' => __('shop.families.list'),
'breadcrumb' => [__('shop.families.title')]
])
@@ -17,4 +18,36 @@
@push('scripts')
{{$dataTable->scripts()}}
<script>
$('#families-table').on( 'draw.dt', function () {
$('.btn-edit').click(function() {
url = '/Shop/Admin/Families/edit/' + $(this).data('id');
window.location = url;
});
$('.btn-del').on('click', '.destroy', function (e) {
e.preventDefault();
bootbox.confirm("{{ __('boilerplate::shop.admin.families.list.confirmdelete') }}", function (result) {
if (result === false) return;
$.ajax({
url: href,
method: 'delete',
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
success: function(){
line.remove();
growl("{{ __('boilerplate::shop.admin.families.list.deletesuccess') }}", 'success');
}
});
});
});
});
</script>
@endpush

View File

@@ -0,0 +1,13 @@
@extends('layout.index', [
'title' => __('shop.genres.title'),
'subtitle' => __('shop.genres.add'),
'breadcrumb' => [__('shop.genres.title'), __('shop.genres.add')]
])
@section('content')
{{ Form::open(['route' => 'Shop.Admin.genres.store', 'id' => 'form', 'autocomplete' => 'off']) }}
@include('Shop.Admin.genres.form')
</form>
@endsection

View File

@@ -0,0 +1,16 @@
@extends('layout.index', [
'title' => __('shop.genres.title'),
'subtitle' => __('shop.genres.edit'),
'breadcrumb' => ['Familles']
])
@section('content')
{{ Form::open(['route' => 'Shop.Admin.Genres.store', 'id' => 'form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $genre['id'] }}">
@include('Shop.Admin.Genres.form')
</form>
@endsection

View File

@@ -0,0 +1,24 @@
<div class="row">
<div class="col-md-8">
{{ Form::label('name', 'Nom') }}
@include('components.input', ['name' => 'name', 'value' => (isset($genre['name'])) ? $genre['name'] : null, 'required' => true])
{{ Form::label('alias', 'Alias') }}
@include('components.input', ['name' => 'alias', 'value' => (isset($genre['alias'])) ? $genre['alias'] : null, 'required' => true])
{{ Form::label('latin', 'Nom latin') }}
@include('components.input', ['name' => 'latin', 'value' => (isset($genre['latin'])) ? $genre['latin'] : null, 'required' => true])
{{ Form::label('description', 'Description') }}
@include('components.textarea', ['name' => 'description', 'value' => (isset($genre['description'])) ? $genre['description'] : null, 'class' => 'editor', 'required' => false])
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="float-right mt-3">
@include('components.button-save')
</div>
</div>
</div>

View File

@@ -0,0 +1,32 @@
@extends('layout.index', [
'title' => __('shop.genres.title'),
'subtitle' => __('shop.genres.list'),
'breadcrumb' => [__('shop.genres.title')]
])
@section('content')
<div class="row pb-3">
<div class="col text-right">
<a href="{{ route('Shop.Admin.Genres.create') }}" class="btn btn-sm btn-success">{{ __('shop.genres.add') }} <i class="fa fa-plus"></i></a>
</div>
</div>
{{$dataTable->table()}}
@endsection
@push('scripts')
{{$dataTable->scripts()}}
<script>
$('#genres-table').on( 'draw.dt', function () {
$('.btn-edit').click(function() {
url = '/Shop/Admin/Genres/edit/' + $(this).data('id');
window.location = url;
});
});
</script>
@endpush

View File

@@ -0,0 +1,30 @@
@extends('layout.index', [
'title' => __('products.title'),
'subtitle' => __('products.title'),
'breadcrumb' => [__('products.title')]
])
@section('content')
<div class="row">
<div class="col-md-offset-2 col-md-8">
<div class="box box-info">
<div class="box-body">
<div class="col-md-6">
<h3>{{ name }}</h3>
<h4>
{{ $product.section.name }}<br>
</h4>
</div>
<div class="col-md-12">
@include('components.carousel')
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -1,22 +1,16 @@
@extends('boilerplate::layout.index', [
'title' => __('shop.families.title'),
'subtitle' => __('shop.families.add'),
'breadcrumb' => [__('shop.families.title'), __('shop.families.add')]
@extends('layout.index', [
'title' => __('shop.species.title'),
'subtitle' => __('shop.species.add'),
'breadcrumb' => [__('shop.species.title'), __('shop.species.add')]
])
@include('boilerplate::load.fileinput')
@section('content')
{{ Form::open(['route' => 'Shop.Admin.families.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
{{ Form::open(['route' => 'Shop.Admin.species.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
<div class="row">
<div class="col-12 text-right">
@include('components.button-save')
</div>
</div>
@include('Shop.Admin.families.form')
@include('Shop.Admin.species.form')
</form>
@endsection

View File

@@ -1,39 +1,16 @@
@extends('layout.index', [
'title' => 'Familles',
'subtitle' => 'Edition d\'une famille',
'title' => __('shop.species.title'),
'subtitle' => __('shop.species.edit'),
'breadcrumb' => ['Familles']
])
@include('boilerplate::load.icheck')
@include('boilerplate::load.fileinput')
@prepend('js')
@include('components.js', ['js' => '/js/main.min.js'])
@endprepend
@push('css')
@include('components.css', ['css' => '/css/main.min.css'])
@endpush
@section('content')
{{ Form::open(['route' => 'Shop.Admin.Families.update', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }}
<div class="row">
<div class="col-sm-12 mbl">
<a href="{{ route("Shop.Admin.Families.index") }}" class="btn btn-default">
{{ __('families.list.title') }}
</a>
<span class="btn-group pull-right">
@include('components.button-save')
</span>
</div>
</div>
<input type="hidden" name="id" value="{{ $id }}">
@include('Shop.Admin.Families.form')
{{ Form::open(['route' => 'Shop.Admin.Species.store', 'id' => 'form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $specie['id'] }}">
@include('Shop.Admin.Species.form')
</form>
@endsection

View File

@@ -1,38 +1,24 @@
<div class="row">
<div class="col-md-8">
{{ Form::label('name', 'Nom') }}
@include('components.input', ['name' => 'name', 'value' => (isset($section['name'])) ? $section['name'] : null, 'required' => true])
@include('components.input', ['name' => 'name', 'value' => (isset($specie['name'])) ? $specie['name'] : null, 'required' => true])
{{ Form::label('alias', 'Alias') }}
@include('components.input', ['name' => 'alias', 'value' => (isset($specie['alias'])) ? $specie['alias'] : null, 'required' => true])
{{ Form::label('latin', 'Nom latin') }}
@include('components.input', ['name' => 'latin', 'value' => (isset($specie['latin'])) ? $specie['latin'] : null, 'required' => true])
{{ Form::label('description', 'Description') }}
@include('components.textarea', ['name' => 'description', 'id_name' => 'description', 'value' => (isset($section['description'])) ? $section['description'] : null, 'required' => true])
@include('components.textarea', ['name' => 'description', 'value' => (isset($specie['description'])) ? $specie['description'] : null, 'class' => 'editor', 'required' => false])
{{ Form::label('description', 'Rubrique parente') }}
</div>
<div class="col-md-4">
<div class="row">
<div class="col-md-12 row-new-lot-photo row-lot-photo mt-3">
<!--
<p>
<button type="button" class="btn btn-danger delete-new-lot-photo-btn"><i class="fa fa-minus-circle"></i></button>
Photo <span class="row-photo-number"></span>
</p>
-->
<input name="lot_photos[][file]" type="file" class="file" data-show-upload="false" data-show-caption="true" data-msg-placeholder="Choisissez une photo">
</div>
</div>
</div>
@include('boilerplate::load.tinymce')
@push('js')
<script>
$(function() {
$('#description').tinymce({});
})
</script>
@endpush
<div class="row">
<div class="col-md-8">
<div class="float-right mt-3">
@include('components.button-save')
</div>
</div>
</div>

View File

@@ -1,62 +1,32 @@
@extends('boilerplate::layout.index', [
@extends('layout.index', [
'title' => __('shop.species.title'),
'subtitle' => __('shop.species.list'),
'breadcrumb' => [__('shop.species.title')]
])
@section('content')
<div class="box">
<div class="box-body">
<table class="table table-striped table-hover va-middle" id="species-table">
<thead>
<tr>
<th>
<input type="text" class="form-control-sm" style="max-width: 100px;">
</th>
<th>
</th>
<th class="text-right">
<a href="{{ route('Shop.Admin.Species.create') }}" class="btn btn-sm btn-success">{{ __('shop.species.add') }} <i class="fa fa-plus"></i></a>
</th>
</tr>
<tr>
<th>Nom</th>
<th>Nb produits</th>
<th></th>
</tr>
</thead>
</table>
<div class="row pb-3">
<div class="col text-right">
<a href="{{ route('Shop.Admin.Species.create') }}" class="btn btn-sm btn-success">{{ __('shop.species.add') }} <i class="fa fa-plus"></i></a>
</div>
</div>
{{$dataTable->table()}}
@endsection
@include('boilerplate::load.datatables')
@push('scripts')
{{$dataTable->scripts()}}
@push('js')
<script>
$(function () {
<script>
$('#species-table').on( 'draw.dt', function () {
$('.btn-edit').click(function() {
url = '/Shop/Admin/Species/edit/' + $(this).data('id');
window.location = url;
});
});
</script>
$('#species-table').dataTable();
@endpush
$('#species-table').on('click', '.destroy', function (e) {
e.preventDefault();
var href = $(this).attr('href');
var line = $(this).closest('tr');
bootbox.confirm("{{ __('boilerplate::shop.admin.species.list.confirmdelete') }}", function (result) {
if (result === false) return;
$.ajax({
url: href,
method: 'delete',
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
success: function(){
line.remove();
growl("{{ __('boilerplate::shop.admin.species.list.deletesuccess') }}", 'success');
}
});
});
});
});
</script>
@endpush