customer group

This commit is contained in:
rahul shukla 2018-10-22 11:17:42 +05:30
commit 5dc60d0fe1
61 changed files with 1072 additions and 376 deletions

View File

@ -19,6 +19,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
// \Illuminate\Session\Middleware\StartSession::class,
];
/**
@ -31,7 +32,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,

View File

@ -65,35 +65,35 @@ class CustomerDataGrid
'name' => 'id',
'alias' => 'ID',
'type' => 'number',
'label' => 'Customer ID',
'label' => 'ID',
'sortable' => true,
],
[
'name' => 'first_name',
'alias' => 'FirstName',
'type' => 'string',
'label' => 'Customer First Name',
'label' => 'First Name',
'sortable' => false,
],
[
'name' => 'email',
'alias' => 'Email',
'type' => 'string',
'label' => 'Customer E-Mail',
'label' => 'E-Mail',
'sortable' => false,
],
[
'name' => 'phone',
'alias' => 'Phone',
'type' => 'number',
'label' => 'Customer Phone',
'label' => 'Phone',
'sortable' => true,
],
[
'name' => 'customer_group_id',
'alias' => 'CustomerGroupId',
'type' => 'number',
'label' => 'Customer Group',
'label' => 'Group ID',
'sortable' => false,
],
],
@ -106,13 +106,13 @@ class CustomerDataGrid
'column' => 'id',
'alias' => 'ID',
'type' => 'number',
'label' => 'Customer ID',
'label' => 'ID',
],
[
'column' => 'first_name',
'alias' => 'FirstName',
'type' => 'string',
'label' => 'Customer First Name',
'label' => 'First Name',
]
],
@ -122,12 +122,12 @@ class CustomerDataGrid
[
'column' => 'FirstName',
'type' => 'string',
'label' => 'Customer First Name',
'label' => 'First Name',
],
[
'column' => 'email',
'type' => 'string',
'label' => 'Customer E-Mail',
'label' => 'E-Mail',
],
],

View File

@ -0,0 +1,163 @@
<?php
namespace Webkul\Admin\DataGrids;
use Illuminate\View\View;
use Webkul\Ui\DataGrid\Facades\DataGrid;
/**
* Customer Group DataGrid
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class CustomerGroupDataGrid
{
/**
* The Customer Group Data
* Grid implementation.
*
* @var CustomerGroupDataGrid
*/
public function createCustomerGroupDataGrid()
{
return DataGrid::make([
'name' => 'Customer Group',
'table' => 'customer_groups as cg',
'select' => 'cg.id',
'perpage' => 10,
'aliased' => true, //use this with false as default and true in case of joins
'massoperations' =>[
[
'route' => route('admin.datagrid.delete'),
'method' => 'DELETE',
'label' => 'Delete',
'type' => 'button',
],
[
'route' => route('admin.datagrid.index'),
'method' => 'POST',
'label' => 'View Grid',
'type' => 'select',
'options' =>[
1 => 'Edit',
2 => 'Set',
3 => 'Change Status'
]
],
],
'actions' => [
[
'type' => 'Edit',
'route' => route('admin.datagrid.delete'),
'confirm_text' => 'Do you really wanis?',
'icon' => 'icon pencil-lg-icon',
],
[
'type' => 'Delete',
'route' => route('admin.datagrid.delete'),
'confirm_text' => 'Do you really want to do this?',
'icon' => 'icon trash-icon',
],
],
'join' => [
// [
// 'join' => 'leftjoin',
// 'table' => 'roles as r',
// 'primaryKey' => 'u.role_id',
// 'condition' => '=',
// 'secondaryKey' => 'r.id',
// ]
],
//use aliasing on secodary columns if join is performed
'columns' => [
[
'name' => 'cg.id',
'alias' => 'ID',
'type' => 'number',
'label' => 'ID',
'sortable' => true,
],
[
'name' => 'cg.group_name',
'alias' => 'Name',
'type' => 'string',
'label' => 'Name',
'sortable' => true,
],
[
'name' => 'cg.is_user_defined',
'alias' => 'User Defined',
'type' => 'boolean',
'label' => 'User Defined',
'sortable' => true,
'wrapper' => function ($value) {
if($value == 1)
return "False";
else
return "True";
},
],
],
//don't use aliasing in case of filters
'filterable' => [
[
'column' => 'cg.group_name',
'alias' => 'Name',
'type' => 'string',
'label' => 'Name'
],
[
'column' => 'cg.id',
'alias' => 'ID',
'type' => 'number',
'label' => 'ID'
],
[
'column' => 'cg.is_user_defined',
'alias' => 'User Defined',
'type' => 'boolean',
'label' => 'User Defined'
]
],
//don't use aliasing in case of searchables
'searchable' => [
[
'column' => 'cg.code',
'type' => 'string',
'label' => 'Code'
],
[
'column' => 'cg.name',
'type' => 'string',
'label' => 'Name'
]
],
'operators' => [
'eq' => "=",
'lt' => "<",
'gt' => ">",
'lte' => "<=",
'gte' => ">=",
'neqs' => "<>",
'neqn' => "!=",
'like' => "like",
'nlike' => "not like",
],
// 'css' => []
]);
}
public function render() {
return $this->createCustomerGroupDataGrid()->render();
}
}

View File

@ -4,13 +4,13 @@ namespace Webkul\Admin\Http\Controllers\Customer;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Webkul\Admin\Http\Controllers\Controller;
use Webkul\Customer\Repositories\CustomerRepository as Customer;
use Webkul\Customer\Repositories\CustomerGroupRepository as CustomerGroup;
use Webkul\Core\Repositories\ChannelRepository as Channel;
/**
* Customer controlller for the customer
* to show customer data on admin login
* Customer controlller
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
@ -38,20 +38,30 @@ class CustomerController extends Controller
*/
protected $customerGroup;
/**
* ChannelRepository object
*
* @var array
*/
protected $channel;
/**
* Create a new controller instance.
*
* @param Webkul\Customer\Repositories\CustomerRepository as customer;
* @param Webkul\Customer\Repositories\CustomerGroupRepository as customerGroup;
* @param Webkul\Core\Repositories\ChannelRepository as Channel;
* @return void
*/
public function __construct(Customer $customer , CustomerGroup $customerGroup )
public function __construct(Customer $customer, CustomerGroup $customerGroup, Channel $channel )
{
$this->_config = request('_config');
$this->customer = $customer;
$this->customerGroup = $customerGroup;
$this->channel = $channel;
}
/**
@ -73,7 +83,9 @@ class CustomerController extends Controller
{
$customerGroup = $this->customerGroup->all();
return view($this->_config['view'],compact('customerGroup'));
$channelName = $this->channel->all();
return view($this->_config['view'],compact('customerGroup','channelName'));
}
/**
@ -81,17 +93,18 @@ class CustomerController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function store()
{
$request->validate([
$this->validate(request(), [
'channel_id' => 'required',
'first_name' => 'string|required',
'last_name' => 'string|required',
'gender' => 'required',
'phone' => 'nullable|numeric',
'phone' => 'nullable|numeric|unique:customers,phone',
'email' => 'required|unique:customers,email'
]);
$data=$request->all();
$data=request()->all();
$password = bcrypt(rand(100000,10000000));
@ -116,7 +129,9 @@ class CustomerController extends Controller
$customerGroup = $this->customerGroup->all();
return view($this->_config['view'],compact('customer','customerGroup'));
$channelName = $this->channel->all();
return view($this->_config['view'],compact('customer', 'customerGroup', 'channelName'));
}
/**
@ -128,11 +143,12 @@ class CustomerController extends Controller
*/
public function update(Request $request, $id)
{
$request->validate([
$this->validate(request(), [
'channel_id' => 'required',
'first_name' => 'string|required',
'last_name' => 'string|required',
'gender' => 'required',
'phone' => 'nullable|numeric',
'phone' => 'nullable|numeric|unique:customers,phone,'. $id,
'email' => 'required|unique:customers,email,'. $id
]);

View File

@ -0,0 +1,136 @@
<?php
namespace Webkul\Admin\Http\Controllers\Customer;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Webkul\Admin\Http\Controllers\Controller;
use Webkul\Customer\Repositories\CustomerGroupRepository as CustomerGroup;
/**
* CustomerGroup controlller
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class CustomerGroupController extends Controller
{
/**
* Contains route related configuration
*
* @var array
*/
protected $_config;
/**
* CustomerGroupRepository object
*
* @var array
*/
protected $customerGroup;
/**
* Create a new controller instance.
*
* @param Webkul\Customer\Repositories\CustomerGroupRepository as customerGroup;
* @return void
*/
public function __construct(CustomerGroup $customerGroup)
{
$this->_config = request('_config');
$this->customerGroup = $customerGroup;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view($this->_config['view']);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view($this->_config['view']);
}
/**
* Store a newly created resource in storage.
*
* @return \Illuminate\Http\Response
*/
public function store()
{
$this->validate(request(), [
'group_name' => 'string|required',
]);
$this->customerGroup->create(request()->all());
session()->flash('success', 'Customer Group created successfully.');
return redirect()->route($this->_config['redirect']);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$group = $this->customerGroup->findOneWhere(['id'=>$id]);
return view($this->_config['view'],compact('group'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate(request(), [
'group_name' => 'string|required',
]);
$this->customerGroup->update(request()->all(),$id);
session()->flash('success', 'Customer Group updated successfully.');
return redirect()->route($this->_config['redirect']);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$group = $this->customerGroup->findOneWhere(['id'=>$id]);
if($group->is_user_defined == 1) {
session()->flash('error', 'This Customer Group can not be deleted');
} else {
$this->customerGroup->delete($id);
session()->flash('success', 'Customer Group deleted successfully.');
}
return redirect()->back();
}
}

View File

@ -70,6 +70,7 @@ Route::group(['middleware' => ['web']], function () {
'view' => 'admin::customers.review.index'
])->name('admin.customer.review.index');
// Reviews Routes
Route::get('reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@edit')->defaults('_config',[
'view' => 'admin::customers.review.edit'
])->name('admin.customer.review.edit');
@ -78,6 +79,29 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'admin.customer.review.index'
])->name('admin.customer.review.update');
// Customer Groups Routes
Route::get('groups', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@index')->defaults('_config',[
'view' => 'admin::customers.group.index'
])->name('admin.groups.index');
Route::get('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@create')->defaults('_config',[
'view' => 'admin::customers.group.create'
])->name('admin.groups.create');
Route::post('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@store')->defaults('_config',[
'redirect' => 'admin.groups.index'
])->name('admin.groups.store');
Route::get('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@edit')->defaults('_config',[
'view' => 'admin::customers.group.edit'
])->name('admin.groups.edit');
Route::put('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@update')->defaults('_config',[
'redirect' => 'admin.groups.index'
])->name('admin.groups.update');
Route::get('groups/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@destroy')->name('admin.groups.delete');
// Sales Routes
Route::prefix('sales')->group(function () {
@ -403,11 +427,13 @@ Route::group(['middleware' => ['web']], function () {
])->name('admin.sliders.index');
// Admin Store Front Settings Route
Route::get('/slider/create','Webkul\Shop\Http\Controllers\SliderController@create')->defaults('_config',[
//slider create
Route::get('slider/create','Webkul\Shop\Http\Controllers\SliderController@create')->defaults('_config',[
'view' => 'admin::settings.sliders.create'
])->name('admin.sliders.create');
Route::post('/slider/create','Webkul\Shop\Http\Controllers\SliderController@store')->defaults('_config',[
Route::post('slider/create','Webkul\Shop\Http\Controllers\SliderController@store')->defaults('_config',[
'redirect' => 'admin::sliders.index'
])->name('admin.sliders.store');
@ -415,9 +441,11 @@ Route::group(['middleware' => ['web']], function () {
Route::get('slider/edit/{id}','Webkul\Shop\Http\Controllers\SliderController@edit')->defaults('_config',[
'view' => 'admin::settings.sliders.edit'
])->name('admin.sliders.edit');
Route::post('slider/edit/{id}','Webkul\Shop\Http\Controllers\SliderController@update')->defaults('_config',[
'redirect' => 'admin::sliders.index'
])->name('admin.sliders.update');
//destroy a slider item
Route::get('slider/delete/{id}', 'Webkul\Shop\Http\Controllers\SliderController@destroy');

View File

@ -38,6 +38,15 @@ class AdminServiceProvider extends ServiceProvider
);
}
/**
* Register services.
*
* @return void
*/
public function register()
{
}
/**
* Bind the the data to the views
*
@ -76,19 +85,6 @@ class AdminServiceProvider extends ServiceProvider
});
}
/**
* Register services.
*
* @return void
*/
public function register()
{
// $this->mergeConfigFrom(
// __DIR__ . '/../Config/auth.php',
// 'auth'
// );
}
/**
* Merge the given configuration with the existing configuration.
*

View File

@ -71,6 +71,12 @@ class EventServiceProvider extends ServiceProvider
'route' => 'admin.customer.review.index',
'sort' => 2,
'icon-class' => '',
], [
'key' => 'customers.groups',
'name' => 'Groups',
'route' => 'admin.groups.index',
'sort' => 3,
'icon-class' => '',
], [
'key' => 'configuration',
'name' => 'Configure',

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -526,30 +526,6 @@ body {
}
}
// customer oder css for admin start here
.sale-container {
.sale-section {

View File

@ -406,7 +406,19 @@ return [
],
],
'customers' => [
'groups' =>[
'add-title' => 'Add Group',
'edit-title' => 'Edit Group',
'save-btn-title' => 'Save Group',
'title' => 'Groups',
'save-btn-title' => 'Save Group',
'name' => 'Name',
'is_user_defined' => 'User Defined',
'yes' => 'Yes'
],
'customers' => [
'add-title' => 'Add Customer',
'edit-title' => 'Edit Customer',
'title' => 'Customers',
'first_name' => 'First Name',
'last_name' => 'Last Name',
@ -415,7 +427,8 @@ return [
'date_of_birth' => 'Date of Birth',
'phone' => 'Phone',
'customer_group' => 'Customer Group',
'save-btn-title' => 'Save Customer'
'save-btn-title' => 'Save Customer',
'channel_name' => 'Channel Name'
],
'reviews' => [
'title' => 'Reviews',
@ -459,5 +472,27 @@ return [
'carrier' => 'Carrier',
'tracking-number' => 'Tracking Number'
]
],
'error' => [
'go-to-home' => 'GO TO HOME',
'404' => [
'page-title' => 'Page not found',
'name' => '404',
'title' => 'Page Not found',
'message' => 'The Page you are looking for doesnt exist or have secrately escaped;head back to home and make a fresh move again.'
],
'403' => [
'page-title' => '403 forbidden',
'name' => '403',
'title' => 'Forbidden error',
'message' => 'You do not have permission to access this page'
],
'500' => [
'page-title' => '500 Internal Server Error',
'name' => '500',
'title' => 'Internal Server Error',
'message' => 'You do not have permission to access this page'
]
]
];

View File

@ -77,7 +77,7 @@
<input type="text" v-validate="'required'" class="control" id="sku" name="sku" value="{{ $sku ?: old('sku') }}"/>
<span class="control-error" v-if="errors.has('sku')">@{{ errors.first('sku') }}</span>
</div>
</div>
</accordian>
@ -94,7 +94,7 @@
<th></th>
</tr>
</thead>
<tbody>
@foreach($configurableFamily->configurable_attributes as $attribute)
<tr>

View File

@ -1,8 +1,12 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.customers.customers.add-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.customer.store') }}">
<form method="POST" action="{{ route('admin.customer.store') }}" @submit.prevent="onSubmit">
<div class="page-header">
<div class="page-title">
@ -45,7 +49,7 @@
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<select name="gender" class="control" v-validate="'gender'">
<select name="gender" class="control" v-validate="'required'">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
@ -64,7 +68,7 @@
</div>
<div class="control-group">
<label for="name" >{{ __('admin::app.customers.customers.customer_group') }}</label>
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
<select class="control" name="customer_group_id">
@foreach ($customerGroup as $group)
<option value="{{ $group->id }}"> {{ $group->group_name}} </>
@ -72,6 +76,16 @@
</select>
</div>
<div class="control-group" :class="[errors.has('channel_id') ? 'has-error' : '']">
<label for="channel" >{{ __('admin::app.customers.customers.channel_name') }}</label>
<select class="control" name="channel_id" v-validate="'required'">
@foreach ($channelName as $channel)
<option value="{{ $channel->id }}"> {{ $channel->name}} </>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channel_id')">@{{ errors.first('channel_id') }}</span>
</div>
</div>
</div>
</form>

View File

@ -1,5 +1,9 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.customers.customers.edit-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.customer.update', $customer->id) }}">
@ -47,7 +51,7 @@
</div>
<div class="control-group">
<label for="email" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<select name="gender" class="control" v-validate="'gender'" value="{{ $customer->gender }}" v-validate="'required'">
<option value="Male">Male</option>
<option value="Female">Female</option>
@ -67,23 +71,42 @@
</div>
<div class="control-group">
<label for="name" >{{ __('admin::app.customers.customers.customer_group') }}</label>
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
@if(!is_null($customer->customer_group_id))
<?php $selectedOption = $customer->customerGroup->id ?>
<?php $selectedCustomerOption = $customer->customerGroup->id ?>
@else
<?php $selectedCustomerOption = '' ?>
@endif
<select class="control" name="customer_group_id">
@foreach($customerGroup as $group)
<option value="{{ $group->id }}" {{ $selectedOption == $group->id ? 'selected' : '' }}>
<option value="{{ $group->id }}" {{ $selectedCustomerOption == $group->id ? 'selected' : '' }}>
{{ $group->group_name}}
</option>
@endforeach
</select>
</div>
<div class="control-group" :class="[errors.has('channel_id') ? 'has-error' : '']">
<label for="channel" >{{ __('admin::app.customers.customers.channel_name') }}</label>
@if(!is_null($customer->channel_id))
<?php $selectedChannelOption = $customer->channel_id ?>
@else
<?php $selectedChannelOption = $customer->channel_id ?>
@endif
<select class="control" name="channel_id" v-validate="'required'">
@foreach($channelName as $channel)
<option value="{{ $channel->id }}" {{ $selectedChannelOption == $channel->id ? 'selected' : '' }}>
{{ $channel->name}}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channel_id')">@{{ errors.first('channel_id') }}</span>
</div>
</div>
</accordian>

View File

@ -0,0 +1,54 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.customers.groups.add-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.groups.store') }}" @submit.prevent="onSubmit">
<div class="page-header">
<div class="page-title">
<h1>
{{ __('admin::app.customers.groups.add-title') }}
</h1>
</div>
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.groups.save-btn-title') }}
</button>
</div>
</div>
<div class="page-content">
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('group_name') ? 'has-error' : '']">
<label for="group_name" class="required">
{{ __('admin::app.customers.groups.name') }}
</label>
<input type="text" class="control" name="group_name" v-validate="'required'" value="{{ old('group_name') }}">
<span class="control-error" v-if="errors.has('group_name')">@{{ errors.first('group_name') }}</span>
</div>
<div class="control-group">
<label for="is_user_defined">
{{ __('admin::app.customers.groups.is_user_defined') }}
</label>
<span class="checkbox">
<input type="checkbox" name="is_user_defined" value="0">
<label class="checkbox-view" for="is_user_defined"></label>
{{ __('admin::app.customers.groups.yes') }}
</span>
</div>
</div>
</div>
</form>
</div>
@stop

View File

@ -0,0 +1,55 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.customers.groups.edit-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.groups.update', $group->id) }}">
<div class="page-header">
<div class="page-title">
<h1>
{{ __('admin::app.customers.groups.edit-title') }}
</h1>
</div>
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.groups.save-btn-title') }}
</button>
</div>
</div>
<div class="page-content">
<div class="form-container">
@csrf()
<input name="_method" type="hidden" value="PUT">
<div class="control-group" :class="[errors.has('group_name') ? 'has-error' : '']">
<label for="group_name" class="required">
{{ __('admin::app.customers.groups.name') }}
</label>
<input type="text" class="control" name="group_name" v-validate="'required'" value="{{ $group->group_name }}">
<span class="control-error" v-if="errors.has('group_name')">@{{ errors.first('group_name') }}</span>
</div>
<div class="control-group">
<label for="is_user_defined">
{{ __('admin::app.customers.groups.is_user_defined') }}
</label>
<span class="checkbox">
<input type="checkbox" name="is_user_defined" value="{{ $group->is_user_defined }}" {{ $group->is_user_defined ? 'checked' : '' }}>
<label class="checkbox-view" for="is_user_defined"></label>
{{ __('admin::app.customers.groups.yes') }}
</span>
</div>
</div>
</div>
</form>
</div>
@stop

View File

@ -0,0 +1,27 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.customers.groups.title') }}
@stop
@section('content')
<div class="content">
<div class="page-header">
<div class="page-title">
<h1>{{ __('admin::app.customers.groups.title') }}</h1>
</div>
<div class="page-action">
<a href="{{ route('admin.groups.create') }}" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.groups.add-title') }}
</a>
</div>
</div>
<div class="page-content">
@inject('customerGroup','Webkul\Admin\DataGrids\CustomerGroupDataGrid')
{!! $customerGroup->render() !!}
</div>
</div>
@stop

View File

@ -13,7 +13,7 @@
</div>
<div class="page-action">
<a href="{{ route('admin.customer.create') }}" class="btn btn-lg btn-primary">
{{ __('Add Customer') }}
{{ __('admin::app.customers.customers.add-title') }}
</a>
</div>
</div>

View File

@ -1,7 +1,7 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.error.403.page-title') }}
@stop
@section('content')
@ -14,11 +14,17 @@
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.403.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.403.message') }}
</div>
<a href="{{ route('admin.dashboard.index') }}">GO TO HOME</a>
<a href="{{ route('admin.dashboard.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>

View File

@ -1,7 +1,7 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.error.404.page-title') }}
@stop
@section('content')
@ -14,11 +14,17 @@
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.404.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.404.message') }}
</div>
<a href="{{ route('admin.dashboard.index') }}">GO TO HOME</a>
<a href="{{ route('admin.dashboard.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>

View File

@ -1,10 +1,11 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.error.403.page-title') }}
@stop
@section('content')
<div class="error-container" style="width: 100%; display: flex; justify-content: center;">
<div class="wrapper" style="display: flex; height: 60vh; width: 100%;
@ -14,11 +15,17 @@
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.500.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.500.message') }}
</div>
<a href="{{ route('admin.dashboard.index') }}">GO TO HOME</a>
<a href="{{ route('admin.dashboard.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>
@ -27,4 +34,5 @@
</div>
</div>
@stop

View File

@ -7,6 +7,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="icon" sizes="16x16" href="{{ asset('vendor/webkul/ui/assets/images/favicon.ico') }}" />
<link rel="stylesheet" href="{{ asset('vendor/webkul/admin/assets/css/admin.css') }}">
<link rel="stylesheet" href="{{ asset('vendor/webkul/ui/assets/css/ui.css') }}">

View File

@ -14,7 +14,7 @@
<div class="dropdown-toggle">
<div style="display: inline-block; vertical-align: middle;">
<span class="name">
{{-- {{ auth()->guard('admin')->user()->name }} --}}
{{ auth()->guard('admin')->user()->name }}
</span>
<span class="role">

View File

@ -31,11 +31,14 @@
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
</div>
<?php $channels = core()->getAllChannels() ?>
<div class="control-group" :class="[errors.has('channel_id') ? 'has-error' : '']">
<label for="channel_id">{{ __('admin::app.settings.sliders.channels') }}</label>
<select class="control" id="channel_id" name="channel_id" value="" v-validate="'required'">
@foreach($channels[0] as $channel)
<option value="{{ $channel->id }}">{{ __($channel->name) }}</option>
<select class="control" id="channel_id" name="channel_id" v-validate="'required'">
@foreach($channels as $channel)
<option value="{{ $channel->id }}" @if($channel->id == old('channel_id')) selected @endif>
{{ __($channel->name) }}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channel_id')">@{{ errors.first('channel_id') }}</span>

View File

@ -0,0 +1,69 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.settings.sliders.add-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.sliders.update', $slider->id) }}" @submit.prevent="onSubmit" enctype="multipart/form-data">
<div class="page-header">
<div class="page-title">
<h1>{{ __('admin::app.settings.sliders.add-title') }}</h1>
</div>
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.settings.sliders.save-btn-title') }}
</button>
</div>
</div>
<div class="page-content">
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('title') ? 'has-error' : '']">
<label for="title">{{ __('admin::app.settings.sliders.title') }}</label>
<input type="text" class="control" name="title" v-validate="'required'" value="{{ $slider->title ?: old('title') }}">
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
</div>
<?php $channels = core()->getAllChannels() ?>
<div class="control-group" :class="[errors.has('channel_id') ? 'has-error' : '']">
<label for="channel_id">{{ __('admin::app.settings.sliders.channels') }}</label>
<select class="control" id="channel_id" name="channel_id" value="" v-validate="'required'">
@foreach($channels as $channel)
<option value="{{ $channel->id }}" @if($channel->id == $slider->channel_id) selected @endif>
{{ __($channel->name) }}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channel_id')">@{{ errors.first('channel_id') }}</span>
</div>
<div class="control-group" :class="[errors.has('image') ? 'has-error' : '']">
<label for="new_image">{{ __('admin::app.settings.sliders.image') }}</label>
<image-upload>
<input type="file" class="control" id="add_image" name="image" value="" v-validate="'image|required'" placeholder="Upload Image" />
<span class="control-error" v-if="errors.has('image')">@{{ errors.first('image') }}</span>
</image-upload>
</div>
<div class="control-group" :class="[errors.has('content') ? 'has-error' : '']">
<label for="content">{{ __('admin::app.settings.sliders.content') }}</label>
<textarea class="control" id="add_content" name="content" v-validate="'required'" rows="5">{{ $slider->content ? : old('content') }}</textarea>
<span class="control-error" v-if="errors.has('content')">@{{ errors.first('content') }}</span>
</div>
</div>
</div>
</form>
</div>
@endsection

View File

@ -2,7 +2,10 @@
namespace Webkul\Core\Repositories;
use Illuminate\Container\Container as App;
use Webkul\Core\Eloquent\Repository;
use Webkul\Core\Repositories\ChannelRepository as Channel;
use Storage;
/**
* Slider Reposotory
@ -12,6 +15,18 @@ use Webkul\Core\Eloquent\Repository;
*/
class SliderRepository extends Repository
{
protected $channel;
public function __construct(
Channel $channel,
App $app
)
{
$this->channel = $channel;
parent::__construct($app);
}
/**
* Specify Model class name
*
@ -28,15 +43,52 @@ class SliderRepository extends Repository
*/
public function create(array $data)
{
$image = request()->file('image');
$image_name = uniqid(20).'.'.$image->getClientOriginalExtension();
$channelName = $this->channel->find($data['channel_id'])->name;
$dir = 'slider_images/' . $channelName;
$image = request()->file('image')->store($dir);
unset($data['image'], $data['_token']);
$data['path'] = $image;
$destinationPath = public_path('/vendor/webkul/shop/assets/images/slider');
$path = $image->move($destinationPath, $image_name);
$path= 'vendor/webkul/shop/assets/images/slider/'.$image_name;
$data['path'] = $path;
$this->model->create($data);
}
/**
* @param array $data
* @return mixed
*/
public function updateItem(array $data, $id)
{
$channelName = $this->channel->find($data['channel_id'])->name;
$dir = 'slider_images/' . $channelName;
$image = request()->file('image')->store($dir);
unset($data['image'], $data['_token']);
$data['path'] = $image;
$this->update($data, $id);
}
/**
* Delete a slider item and delete the image from the disk or where ever it is
*
* @return Boolean
*/
public function destroy($id) {
$sliderItem = $this->find($id);
$sliderItemImage = $sliderItem->path;
Storage::delete($sliderItemImage);
return $this->model->destroy($id);
}
}

View File

@ -16,6 +16,7 @@ class CreateCustomerGroupsTable extends Migration
Schema::create('customer_groups', function (Blueprint $table) {
$table->increments('id');
$table->string('group_name');
$table->boolean('is_user_defined')->default(true);
$table->timestamps();
});
}

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CustomersPasswordResets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('customers_password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('customers_password_resets');
}
}

View File

@ -28,7 +28,6 @@ class AddressController extends Controller
protected $customer;
protected $address;
public function __construct(CustomerRepository $customer, CustomerAddressRepository $address)
{
$this->middleware('customer');
@ -41,22 +40,9 @@ class AddressController extends Controller
}
/**
* Getting logged in
* customer helper
* @return Array
*/
private function getCustomer($id) {
$customer = collect($this->customer->findOneWhere(['id'=>$id]));
return $customer;
}
/**
* Getting logged in
* customer address
* helper
* @return Array
* Getting logged in customer address helper
*
* @return array
*/
private function getAddress($id) {
@ -66,37 +52,32 @@ class AddressController extends Controller
}
/**
* Address Route
* index page
* @return View
* Address Route index page
*
* @return view
*/
public function index() {
$id = auth()->guard('customer')->user()->id;
$customer = $this->getCustomer($id);
$address = $this->getAddress($id);
return view($this->_config['view'])->with('address', $address);
}
/**
* Show the address
* create form
* @return View
* Show the address create form
*
* @return view
*/
public function show() {
return view($this->_config['view']);
}
/**
* Create a new
* address for
* customer.
* Create a new address for customer.
*
* @return View
* @return view
*/
public function create() {
@ -144,11 +125,9 @@ class AddressController extends Controller
}
/**
* For editing the
* existing address
* of the customer
* For editing the existing address of the customer
*
* @return View
* @return view
*/
public function showEdit() {
@ -160,6 +139,12 @@ class AddressController extends Controller
}
/**
* Edits the premade resource of customer called
* Address.
*
* @return redirect
*/
public function edit() {
$id = auth()->guard('customer')->user()->id;

View File

@ -10,10 +10,7 @@ use Webkul\Customer\Models\Customer;
use Auth;
/**
* Customer controlller for the customer
* basically for the tasks of customers
* which will be done after customer
* authenticastion.
* Customer controlller for the customer basically for the tasks of customers which will be done after customer authentication.
*
* @author Prashant Singh <prashant.singh852@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
@ -36,7 +33,7 @@ class CustomerController extends Controller
protected $productReview;
/**
* Create a new controller instance.
* Create a new Repository instance.
*
* @param Webkul\Product\Repositories\ProductReviewRepository $productReview
* @return void
@ -54,9 +51,8 @@ class CustomerController extends Controller
}
/**
* For taking the customer
* to the dashboard after
* authentication
* For taking the customer to the dashboard after authentication
*
* @return view
*/
private function getCustomer($id) {
@ -65,9 +61,8 @@ class CustomerController extends Controller
}
/**
* Taking the customer
* to profile details
* page
* Taking the customer to profile details page
*
* @return View
*/
public function index() {
@ -79,8 +74,7 @@ class CustomerController extends Controller
}
/**
* For loading the
* edit form page.
* For loading the edit form page.
*
* @return View
*/
@ -93,9 +87,7 @@ class CustomerController extends Controller
}
/**
* Edit function
* for editing customer
* profile.
* Edit function for editing customer profile.
*
* @return Redirect.
*/
@ -148,23 +140,40 @@ class CustomerController extends Controller
}
}
/**
* Load the view for the customer account panel, showing orders in a table.
*
* @return Mixed
*/
public function orders() {
return view($this->_config['view']);
}
/**
* Load the view for the customer account panel, showing wishlist items.
*
* @return Mixed
*/
public function wishlist() {
return view($this->_config['view']);
}
/**
* Load the view for the customer account panel, showing approved reviews.
*
* @return Mixed
*/
public function reviews() {
$id = auth()->guard('customer')->user()->id;
$reviews = $this->productReview->getCustomerReview($id);
$reviews = $this->productReview->getCustomerReview();
return view($this->_config['view'],compact('reviews'));
}
/**
* Load the view for the customer account panel, shows the customer address.
*
* @return Mixed
*/
public function address() {
return view($this->_config['view']);
}

View File

@ -1,61 +0,0 @@
<?php
namespace Webkul\Customer\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Webkul\Customer\Repositories\CustomerRepository;
use Auth;
/**
* Customer controlller for the customer
* basically for the tasks of customers
* which will be done after customer
* authenticastion.
*
* @author Prashant Singh <prashant.singh852@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class ReviewsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
protected $_config;
protected $customer;
public function __construct(CustomerRepository $customer)
{
$this->middleware('customer');
$this->_config = request('_config');
$this->customer = $customer;
}
/**
* For taking the customer
* to the dashboard after
* authentication
* @return view
*/
private function getCustomer($id) {
$customer = collect($this->customer->findOneWhere(['id'=>$id]));
return $customer;
}
public function index() {
$id = auth()->guard('customer')->user()->id;
$customer = $this->getCustomer($id);
return view($this->_config['view'])->with('customer', $customer);
}
public function reviews() {
return view($this->_config['view']);
}
}

View File

@ -18,7 +18,7 @@ class Customer extends Authenticatable
protected $table = 'customers';
protected $fillable = ['first_name', 'last_name', 'gender', 'date_of_birth','phone','email','password','customer_group_id','subscribed_to_news_letter'];
protected $fillable = ['channel_id', 'first_name', 'last_name', 'gender', 'date_of_birth','phone','email','password','customer_group_id','subscribed_to_news_letter'];
protected $hidden = ['password','remember_token'];

View File

@ -6,4 +6,6 @@ use Illuminate\Database\Eloquent\Model;
class CustomersGroups extends Model
{
protected $table = 'customer_groups';
protected $fillable = ['group_name', 'is_user_defined'];
}

View File

@ -14,7 +14,7 @@ use Webkul\Product\Repositories\ProductRepository;
*/
class ProductReviewRepository extends Repository
{
/**
/**
* ProductImageRepository object
*
* @var array
@ -51,9 +51,13 @@ class ProductReviewRepository extends Repository
*
* @param int $customerId
*/
function getCustomerReview($customerId)
function getCustomerReview()
{
$reviews = $this->model->where('customer_id',$customerId)->with('product')->get();
$customerId = auth()->guard('customer')->user()->id;
$reviews = $this->model->where(['customer_id'=> $customerId, 'status' => 'approved'])->with('product')->get();
// dd($reviews);
return $reviews;
}

View File

@ -46,6 +46,10 @@ class ReviewController extends Controller
*/
public function __construct(Product $product, ProductReview $productReview)
{
$this->middleware('admin');
$this->middleware('customer')->only(['create', 'store']);
$this->product = $product;
$this->productReview = $productReview;
@ -118,7 +122,7 @@ class ReviewController extends Controller
return view($this->_config['view'],compact('product'));
}
/**
/**
* Show the form for editing the specified resource.
*
* @param int $id
@ -131,7 +135,7 @@ class ReviewController extends Controller
return view($this->_config['view'],compact('review'));
}
/**
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request

View File

@ -45,20 +45,50 @@ class SliderController extends controller
public function create() {
$channels = core()->getAllChannels();
return view($this->_config['view'])->with('channels',[$channels]);
return view($this->_config['view']);
}
/**
* Creates the new
* sider item
* Creates the new sider item.
*
* @return response
*/
public function store() {
$this->slider->create(request()->all());
session()->flash('success', 'Slider created successfully.');
return redirect()->back();
}
/**
/**
* Edit the previously created slider item.
*
* @return mixed
*/
public function edit($id) {
$slider = $this->slider->find($id);
return view($this->_config['view'])->with('slider', $slider);
}
/**
* Edit the previously created slider item.
*
* @return response
*/
public function update($id) {
if($this->slider->updateItem(request()->all(), $id)) {
session()->flash('success', 'Slider Item Successfully Updated');
} else {
session()->flash('error', 'Slider Cannot Be Updated');
}
return redirect()->back();
}
/**
* Delete a slider item and preserve the last one from deleting
*
* @return mixed
@ -68,8 +98,10 @@ class SliderController extends controller
session()->flash('warning', 'Cannot Delete The Last Slider Item');
} else {
$this->slider->destroy($id);
session()->flash('success', 'Slider Item Successfully Deleted');
}
return redirect()->back();
}
}

View File

@ -66,10 +66,6 @@ Route::group(['middleware' => ['web', 'theme', 'locale']], function () {
'redirect' => 'customer.reviews.index'
])->name('shop.reviews.store');
// Route::post('/reviews/create/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
// 'redirect' => 'admin.reviews.index'
// ])->name('admin.reviews.store');
// forgot Password Routes
Route::get('/forgot-password', 'Webkul\Customer\Http\Controllers\ForgotPasswordController@create')->defaults('_config', [
'view' => 'shop::customers.signup.forgot-password'

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -7,11 +7,6 @@
:item="item"
:parent="index">
</category-item>
<li>
<img src="http://localhost/bagisto/public/vendor/webkul/shop/assets/images/offer-zone.svg"/>
<span>Offer Zone</span>
</li>
</ul>
</template>

View File

@ -25,6 +25,11 @@ export default {
type: Array,
required: true,
default: () => [],
},
public_path: {
type: String,
required: true,
}
},
@ -53,8 +58,9 @@ export default {
setProps() {
var this_this = this;
this.slides.forEach(function(slider) {
this_this.images.push(slider.path);
this_this.images.push(this_this.public_path+'/storage/'+slider.path);
});
this.currentIndex = 0;

View File

@ -299,21 +299,12 @@ section.slider-block {
div.slider-control {
display: flex;
justify-content:space-between;
bottom: 48%;
bottom: 46%;
right: 0%;
width:100%;
.dark-left-icon {
margin-left: 15px;
}
.light-right-icon {
margin-right: 15px;
}
}
}
}
}
//header navigation

View File

@ -1,5 +1,3 @@
@media only screen and (max-width: 425px) {
.product-card {
font-size: 90%;

View File

@ -285,6 +285,7 @@ body {
}
.responsive-layred-filter {
@extend .layered-filter-wrapper;
width: 100%;
float: none;
padding-right: 0px;

View File

@ -13,7 +13,6 @@
<div class="account-layout">
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
<span class="account-heading">{{ __('shop::app.customer.account.address.index.title') }}</span>
@if(!$address->isEmpty())

View File

@ -1,4 +1,4 @@
<div class="responsive-side-menu" id="responsive-side-menu" style="display: none">
<div class="responsive-side-menu" id="responsive-side-menu" style="display:none">
Menu
<i class="icon icon-arrow-down right" id="down-icon"></i>
</div>

View File

@ -12,7 +12,7 @@
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
{{-- <span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span> --}}
<span class="account-heading">{{ __('shop::app.customer.account.profile.index.title') }}</span>

View File

@ -8,7 +8,8 @@
<div class="account-layout">
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
{{-- <span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span> --}}
<span class="account-heading">{{ __('shop::app.customer.account.review.index.title') }}</span>
<span></span>
<div class="horizontal-rule"></div>
@ -16,7 +17,7 @@
<div class="account-items-list">
@if(is_null($reviews))
@if(!is_null($reviews))
@foreach($reviews as $review)
<div class="account-item-card mt-15 mb-15">
<div class="media-info">

View File

@ -12,7 +12,6 @@
<div class="account-head mb-15">
<span class="account-heading">{{ __('shop::app.wishlist.title') }}</span>
<span class="account-heading">{{ __('shop::app.wishlist.title') }}</span>
@if(count($items))
<div class="account-action">
<a href="" style="margin-right: 15px;">{{ __('shop::app.wishlist.deleteall') }}</a>

View File

@ -9,13 +9,19 @@
<div class="error-box" style="width: 50%">
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }} </div>
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.403.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.403.message') }}
</div>
<a href="{{ route('shop.home.index') }}">GO TO HOME</a>
<a href="{{ route('shop.home.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>

View File

@ -11,11 +11,17 @@
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.404.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.404.message') }}
</div>
<a href="{{ route('shop.home.index') }}">GO TO HOME</a>
<a href="{{ route('shop.home.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>

View File

@ -9,13 +9,19 @@
<div class="error-box" style="width: 50%">
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }} </div>
<div class="error-title" style="font-size: 100px;color: #5E5E5E"> {{ $code }}</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">Page Not Found</div>
<div class="error-messgae" style="font-size: 24px;color: #5E5E5E">
{{ __('admin::app.error.500.title') }}
</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">The Page you are looking for doesnt exist or have secrately escaped;head backm to home and make a fresh move again.</div>
<div class="error-description" style="margin-top: 20px;margin-bottom: 20px;color: #242424">
{{ __('admin::app.error.500.message') }}
</div>
<a href="{{ route('shop.home.index') }}">GO TO HOME</a>
<a href="{{ route('shop.home.index') }}">
{{ __('admin::app.error.go-to-home') }}
</a>
</div>

View File

@ -1,3 +1,3 @@
<section class="slider-block">
<image-slider :slides='@json($sliderData)'> </image-slider>
<image-slider :slides='@json($sliderData)' public_path="{{ url()->to('/') }}"></image-slider>
</section>

View File

@ -1,11 +1,14 @@
<div class="header" id="header">
<div class="header-top">
<div class="left-content">
<ul class="logo-container">
<li>
<a href="{{ route('shop.home.index') }}">
<img class="logo" src="{{ asset('vendor/webkul/shop/assets/images/logo.svg') }}" />
@if ($logo = core()->getCurrentChannel()->logo_url)
<img class="logo" src="{{ $logo }}" />
@else
<img class="logo" src="{{ bagisto_asset('images/logo.svg') }}" />
@endif
</a>
</li>
</ul>
@ -13,6 +16,7 @@
<ul class="search-container">
<li class="search-group">
<input type="search" class="search-field" placeholder="Search for products">
<div class="search-icon-wrapper">
<span class="icon icon-search"></span>
</div>
@ -29,6 +33,7 @@
<i class="icon arrow-down-icon active"></i>
</div>
</div>
@guest('customer')
<div class="dropdown-list bottom-right" style="display: none;">
<div class="dropdown-container">
@ -44,6 +49,7 @@
</div>
@endguest
@auth('customer')
<div class="dropdown-list bottom-right" style="display: none; max-width: 230px;">
<div class="dropdown-container">
@ -70,6 +76,7 @@
@endauth
</li>
</ul>
<ul class="cart-dropdown-container">
<?php $cart = cart()->getCart(); ?>
@ -79,27 +86,30 @@
<li class="cart-dropdown">
<span class="icon cart-icon"></span>
@if($cart)
@php
$items = $cart->items;
@endphp
<?php $items = $cart->items; ?>
<div class="dropdown-toggle">
<div style="display: inline-block; cursor: pointer;">
@if($cart->items_qty - intval($cart->items_qty) > 0)
<span class="name">
Cart
<span class="count"> ({{ $cart->items_qty }})</span>
</span>
@else
<span class="name">
Cart
<span class="count"> ({{ intval($cart->items_qty) }})</span>
</span>
@endif
</div>
<i class="icon arrow-down-icon active"></i>
</div>
<div class="dropdown-list" style="display: none; top: 50px; right: 0px">
<div class="dropdown-container">
<div class="dropdown-cart">
@ -110,41 +120,45 @@
<div class="dropdown-content">
@foreach($items as $item)
@if($item->type == "configurable")
<div class="item">
<div class="item-image" >
@php
$images = $productImageHelper->getProductBaseImage($item->child->product);
@endphp
<img src="{{ $images['small_image_url'] }}" />
<div class="item">
<div class="item-image" >
@php
$images = $productImageHelper->getProductBaseImage($item->child->product);
@endphp
<img src="{{ $images['small_image_url'] }}" />
</div>
<div class="item-details">
<div class="item-name">{{ $item->child->name }}</div>
<div class="item-price">{{ $item->total }}</div>
<div class="item-qty">Quantity - {{ $item->quantity }}</div>
</div>
</div>
<div class="item-details">
<div class="item-name">{{ $item->child->name }}</div>
<div class="item-price">{{ $item->total }}</div>
<div class="item-qty">Quantity - {{ $item->quantity }}</div>
</div>
</div>
@else
<div class="item">
<div class="item-image" >
@php
$images = $productImageHelper->getProductBaseImage($item->product);
@endphp
<img src="{{ $images['small_image_url'] }}" />
<div class="item">
<div class="item-image" >
@php
$images = $productImageHelper->getProductBaseImage($item->product);
@endphp
<img src="{{ $images['small_image_url'] }}" />
</div>
<div class="item-details">
<div class="item-name">{{ $item->name }}</div>
<div class="item-price">{{ $item->total }}</div>
<div class="item-qty">Quantity - {{ $item->quantity }}</div>
</div>
</div>
<div class="item-details">
<div class="item-name">{{ $item->name }}</div>
<div class="item-price">{{ $item->total }}</div>
<div class="item-qty">Quantity - {{ $item->quantity }}</div>
</div>
</div>
@endif
@endforeach
</div>
@ -157,7 +171,9 @@
</div>
</div>
</div>
@else
<div class="dropdown-toggle">
<div style="display: inline-block; cursor: pointer;">
@ -193,6 +209,7 @@
</div>
</div>
@endguest
@auth('customer')
<div class="dropdown-list bottom-right" style="display: none;">
<div class="dropdown-container">
@ -221,6 +238,7 @@
@endauth
</li>
</ul>
<ul class="resp-cart-dropdown-container">
<li class="cart-dropdown">
@ -277,23 +295,23 @@
hamMenu.addEventListener("click", header);
// for header responsive icon
function header(){
function header() {
var className = document.getElementById(this.id).className;
if(className === 'icon icon-search' ){
if(className === 'icon icon-search' ) {
search.classList.remove("icon-search");
search.classList.add("icon-menu-close");
hamMenu.classList.remove("icon-menu-close");
hamMenu.classList.add("icon-menu");
searchResponsive.style.display = 'block';
navResponsive.style.display = 'none';
}else if(className === 'icon icon-menu'){
} else if(className === 'icon icon-menu') {
hamMenu.classList.remove("icon-menu");
hamMenu.classList.add("icon-menu-close");
search.classList.remove("icon-menu-close");
search.classList.add("icon-search");
searchResponsive.style.display = 'none';
navResponsive.style.display = 'block';
}else{
} else {
search.classList.remove("icon-menu-close");
search.classList.add("icon-search");
hamMenu.classList.remove("icon-menu-close");

View File

@ -11,6 +11,12 @@
<link rel="stylesheet" href="{{ bagisto_asset('css/shop.css') }}">
<link rel="stylesheet" href="{{ asset('vendor/webkul/ui/assets/css/ui.css') }}">
@if ($favicon = core()->getCurrentChannel()->favicon_url)
<link rel="icon" sizes="16x16" href="{{ $favicon }}" />
@else
<link rel="icon" sizes="16x16" href="{{ bagisto_asset('images/favicon.ico') }}" />
@endif
@yield('head')
@section('seo')

View File

@ -23,7 +23,7 @@
</div>
<?php $products = $productRepository->findAllByCategory($category->id); ?>
@if ($products->count())
@include ('shop::products.list.toolbar')
@ -84,7 +84,7 @@
sort.classList.remove("sort-icon");
sort.classList.add("icon-menu-close-adj");
filter.classList.remove("icon-menu-close-adj");
filter.classList.remove("icon-menu-close");
filter.classList.add("filter-icon");
sortLimit.style.display = "flex";

View File

@ -80,24 +80,22 @@
@endsection
@push('scripts')
<script>
<script>
document.onreadystatechange = function () {
var state = document.readyState
var galleryTemplate = document.getElementById('product-gallery-template');
var addTOButton = document.getElementsByClassName('add-to-buttons')[0];
document.onreadystatechange = function () {
var state = document.readyState
var galleryTemplate = document.getElementById('product-gallery-template');
var addTOButton = document.getElementsByClassName('add-to-buttons')[0];
if(galleryTemplate){
if (state == 'interactive') {
galleryTemplate.style.display="none";
} else {
document.getElementById('loader').style.display="none";
addTOButton.style.display="flex";
if(galleryTemplate){
if (state == 'interactive') {
galleryTemplate.style.display="none";
} else {
document.getElementById('loader').style.display="none";
// addTOButton.style.display="flex";
}
}
}
}
</script>
</script>
@endpush

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -29,16 +29,23 @@
mounted: function() {
this.sample = "";
var element = this.$el.getElementsByTagName("input")[0];
var this_this = this;
element.onchange = function() {
var fReader = new FileReader();
fReader.readAsDataURL(element.files[0]);
fReader.onload = function(event) {
this.img = document.getElementsByTagName("input")[0];
this.img.src = event.target.result;
this_this.newImage = this.img.src;
this_this.changePreview();
};
}

View File

@ -574,7 +574,12 @@ h2 {
}
.accordian {
display: inline-block;
width: 100%;
.accordian-header {
width: 100%;
display: inline-block;
font-size: 18px;
color: $font-color;
border-bottom: solid 1px $border-color;

View File

@ -388,7 +388,7 @@ body {
}
@media only screen and (max-width: 840px) {
.layered-filter-wrapper {
.layered-filter-wrapper, .responsive-layred-filter {
display: none;
}
.main .category-block {
@ -429,38 +429,38 @@ body {
}
}
.layered-filter-wrapper {
.layered-filter-wrapper, .responsive-layred-filter {
width: 25%;
float: left;
padding-right: 20px;
min-height: 1px;
}
.layered-filter-wrapper .filter-title {
.layered-filter-wrapper .filter-title, .responsive-layred-filter .filter-title {
border-bottom: 1px solid #C7C7C7;
color: #242424;
padding: 10px 0;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item {
.layered-filter-wrapper .filter-attributes .filter-attributes-item, .responsive-layred-filter .filter-attributes .filter-attributes-item {
border-bottom: 1px solid #C7C7C7;
padding-bottom: 10px;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title {
padding: 10px 40px 0 10px;
color: #5E5E5E;
cursor: pointer;
position: relative;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .remove-filter-link {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .remove-filter-link, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title .remove-filter-link {
font-weight: 400;
color: #0031F0;
margin-right: 10px;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .icon {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .icon, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title .icon {
background-image: url("../images/arrow-down.svg") !important;
width: 10px;
height: 10px;
@ -469,45 +469,45 @@ body {
top: 14px;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content {
padding: 10px;
display: none;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items {
padding: 0;
margin: 0;
list-style: none none;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item {
padding: 8px 0;
color: #5E5E5E;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox {
margin: 0;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox .checkbox-view {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox .checkbox-view, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox .checkbox-view {
height: 16px;
width: 16px;
background-image: url("../images/checkbox.svg");
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox input:checked + .checkbox-view {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox input:checked + .checkbox-view, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox input:checked + .checkbox-view {
background-image: url("../images/checkbox-checked.svg");
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content .price-range-wrapper {
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content .price-range-wrapper, .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content .price-range-wrapper {
margin-top: 21px;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-content {
.layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-content, .responsive-layred-filter .filter-attributes .filter-attributes-item.active .filter-attributes-content {
display: block;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon {
.layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon, .responsive-layred-filter .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon {
background-image: url("../images//arrow-up.svg") !important;
}
@ -834,16 +834,10 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
bottom: 48%;
bottom: 46%;
right: 0%;
width: 100%;
}
section.slider-block div.slider-content div.slider-control .dark-left-icon {
margin-left: 15px;
}
section.slider-block div.slider-content div.slider-control .light-right-icon {
margin-right: 15px;
}
}
.header {

View File

@ -30693,11 +30693,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
//
//
//
//
//
//
//
//
// define the item component
/* harmony default export */ __webpack_exports__["default"] = ({
@ -30735,36 +30730,15 @@ var render = function() {
return _c(
"ul",
{ staticClass: "nav" },
[
_vm._l(_vm.items, function(item, index) {
return _c("category-item", {
key: index,
attrs: { url: _vm.url, item: item, parent: index }
})
}),
_vm._v(" "),
_vm._m(0)
],
2
_vm._l(_vm.items, function(item, index) {
return _c("category-item", {
key: index,
attrs: { url: _vm.url, item: item, parent: index }
})
})
)
}
var staticRenderFns = [
function() {
var _vm = this
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c("li", [
_c("img", {
attrs: {
src:
"http://localhost/bagisto/public/vendor/webkul/shop/assets/images/offer-zone.svg"
}
}),
_vm._v(" "),
_c("span", [_vm._v("Offer Zone")])
])
}
]
var staticRenderFns = []
render._withStripped = true
module.exports = { render: render, staticRenderFns: staticRenderFns }
if (false) {
@ -31404,6 +31378,11 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
default: function _default() {
return [];
}
},
public_path: {
type: String,
required: true
}
},
@ -31431,8 +31410,9 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
setProps: function setProps() {
var this_this = this;
this.slides.forEach(function (slider) {
this_this.images.push(slider.path);
this_this.images.push(this_this.public_path + '/storage/' + slider.path);
});
this.currentIndex = 0;