Merge branch 'master' of https://github.com/bagisto/bagisto into prashant

This commit is contained in:
prashant-webkul 2018-10-25 10:21:47 +05:30
commit 802c737a61
63 changed files with 2039 additions and 863 deletions

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

@ -64,13 +64,13 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'admin.customer.index'
])->name('admin.customer.update');
Route::get('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\CustomerController@destroy')->name('admin.customer.delete');
Route::get('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@destroy')->name('admin.customer.delete');
Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[
'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');
@ -79,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 () {
@ -264,6 +287,8 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'admin.users.index'
])->name('admin.users.update');
Route::get('/users/delete/{id}', 'Webkul\User\Http\Controllers\UserController@destroy')->name('admin.users.delete');
// User Role Routes
Route::get('/roles', 'Webkul\User\Http\Controllers\RoleController@index')->defaults('_config', [
@ -462,6 +487,9 @@ Route::group(['middleware' => ['web']], function () {
Route::put('/tax-categories/edit/{id}', 'Webkul\Tax\Http\Controllers\TaxCategoryController@update')->defaults('_config', [
'redirect' => 'admin.tax-categories.index'
])->name('admin.tax-categories.update');
Route::get('/tax-categories/delete/{id}', 'Webkul\Tax\Http\Controllers\TaxCategoryController@destroy')->name('admin.tax-categories.delete');
//tax category ends
//tax rate
@ -484,6 +512,8 @@ Route::group(['middleware' => ['web']], function () {
Route::put('tax-rates/update/{id}', 'Webkul\Tax\Http\Controllers\TaxRateController@update')->defaults('_config', [
'redirect' => 'admin.tax-rates.index'
])->name('admin.tax-rates.update');
Route::get('/tax-rates/delete/{id}', 'Webkul\Tax\Http\Controllers\TaxRateController@destroy')->name('admin.tax-rates.delete');
//tax rate ends
});
});

View File

@ -91,6 +91,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',

View File

@ -285,6 +285,7 @@ return [
'meta_title' => 'Meta Title',
'meta_description' => 'Meta Description',
'meta_keywords' => 'Meta Keywords',
'image' => 'Image',
]
],
@ -425,7 +426,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',
@ -434,7 +447,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',
@ -485,5 +499,27 @@ return [
'final-summary' => 'If you did not request a password reset, no further action is required.',
'thanks' => 'Thanks!'
]
],
'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

@ -66,6 +66,12 @@
<span class="control-error" v-if="errors.has('description')">@{{ errors.first('description') }}</span>
</div>
<div class="control-group">
<label>{{ __('admin::app.catalog.categories.image') }}
<image-wrapper :button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'" input-name="image" :multiple="false"></image-wrapper>
</div>
</div>
</accordian>

View File

@ -8,7 +8,7 @@
<div class="content">
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
<form method="POST" action="" @submit.prevent="onSubmit">
<form method="POST" action="" @submit.prevent="onSubmit" enctype="multipart/form-data">
<div class="page-header">
<div class="page-title">
@ -79,6 +79,13 @@
<span class="control-error" v-if="errors.has('{{$locale}}[description]')">@{{ errors.first('{!!$locale!!}[description]') }}</span>
</div>
<div class="control-group">
<label>{{ __('admin::app.catalog.categories.image') }}
<image-wrapper :button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'" input-name="image" :multiple="false"></image-wrapper>
</div>
</div>
</accordian>

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

@ -11,5 +11,5 @@ class Category extends TranslatableModel
public $translatedAttributes = ['name', 'description', 'slug', 'meta_title', 'meta_description', 'meta_keywords'];
protected $fillable = ['position', 'status', 'parent_id','image'];
protected $fillable = ['position', 'status', 'parent_id'];
}

View File

@ -1,7 +1,7 @@
<?php
<?php
namespace Webkul\Category\Repositories;
use Webkul\Core\Eloquent\Repository;
use Webkul\Category\Models\Category;
use Illuminate\Container\Container as App;
@ -44,7 +44,7 @@ class CategoryRepository extends Repository
{
if(isset($data['locale']) && $data['locale'] == 'all') {
$model = app()->make($this->model());
foreach(core()->getAllLocales() as $locale) {
foreach ($model->translatedAttributes as $attribute) {
if(isset($data[$attribute])) {
@ -54,7 +54,11 @@ class CategoryRepository extends Repository
}
}
return $this->model->create($data);
$category = $this->model->create($data);
$this->uploadImages($data, $category);
return $category;
}
/**
@ -99,4 +103,52 @@ class CategoryRepository extends Repository
get_class($this->model), $slug
);
}
/**
* @param array $data
* @param $id
* @param string $attribute
* @return mixed
*/
public function update(array $data, $id, $attribute = "id")
{
$category = $this->find($id);
$category->update($data);
$this->uploadImages($data, $category);
return $category;
}
/**
* @param array $data
* @param mixed $category
* @return void
*/
public function uploadImages($data, $category,$type = "image")
{
if(isset($data[$type])) {
foreach ($data[$type] as $imageId => $image) {
$file = $type . '.' . $imageId;
$dir = 'category/' . $category->id;
if(request()->hasFile($file)) {
if($category->{$type}) {
Storage::delete($category->{$type});
}
$category->{$type} = request()->file($file)->store($dir);
$category->save();
}
}
} else {
if($category->{$type}) {
Storage::delete($category->{$type});
}
$category->{$type} = null;
$category->save();
}
}
}

View File

@ -79,7 +79,7 @@ class ChannelController extends Controller
'currencies' => 'required|array|min:1',
'base_currency_id' => 'required'
]);
$this->channel->create(request()->all());
session()->flash('success', 'Channel created successfully.');

View File

@ -140,6 +140,14 @@ class ExchangeRateController extends Controller
*/
public function destroy($id)
{
$this->exchangeRate->delete($id);
if($this->exchangeRate->count() == 1) {
session()->flash('error', 'At least one Exchange rate is required.');
} else {
$this->exchangeRate->delete($id);
session()->flash('success', 'Exchange rate deleted successfully.');
}
return redirect()->back();
}
}

View File

@ -1,7 +1,7 @@
<?php
<?php
namespace Webkul\Core\Repositories;
use Webkul\Core\Eloquent\Repository;
use Illuminate\Support\Facades\Storage;
@ -72,6 +72,7 @@ class ChannelRepository extends Repository
*/
public function uploadImages($data, $channel, $type = "logo")
{
if(isset($data[$type])) {
foreach ($data[$type] as $imageId => $image) {
$file = $type . '.' . $imageId;

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

@ -4,7 +4,7 @@ namespace Webkul\Customer\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Webkul\Customer\Models\CustomersGroups;
use Webkul\Customer\Models\CustomerGroup;
use Webkul\Sales\Models\Order;
// use Webkul\User\Notifications\AdminResetPassword;
@ -36,6 +36,6 @@ class Customer extends Authenticatable
*/
public function customerGroup()
{
return $this->belongsTo(CustomersGroups::class);
return $this->belongsTo(CustomerGroup::class);
}
}

View File

@ -3,7 +3,7 @@ namespace Webkul\Customer\Models;
use Illuminate\Database\Eloquent\Model;
class CustomersAddress extends Model
class CustomerAddress extends Model
{
protected $table = 'customer_addresses';

View File

@ -3,7 +3,9 @@ namespace Webkul\Customer\Models;
use Illuminate\Database\Eloquent\Model;
class CustomersGroups extends Model
class CustomerGroup extends Model
{
protected $table = 'customer_groups';
protected $fillable = ['group_name', 'is_user_defined'];
}

View File

@ -21,7 +21,7 @@ class CustomerAddressRepository extends Repository
function model()
{
return 'Webkul\Customer\Models\CustomersAddress';
return 'Webkul\Customer\Models\CustomerAddress';
}
/**

View File

@ -21,7 +21,7 @@ class CustomerGroupRepository extends Repository
function model()
{
return 'Webkul\Customer\Models\CustomersGroups';
return 'Webkul\Customer\Models\CustomerGroup';
}
/**

View File

@ -57,8 +57,6 @@ class ProductReviewRepository extends Repository
$reviews = $this->model->where(['customer_id'=> $customerId, 'status' => 'approved'])->with('product')->get();
// dd($reviews);
return $reviews;
}
}

View File

@ -4,7 +4,7 @@
<a :href="url+'/categories/'+this.item['translations'][0].slug">{{ this.item['translations'][0].name }}&emsp;<i class="icon dropdown-right-icon"
v-if="haveChildren && item.parent_id != null"></i></a>
<i :class="[show ? 'icon icon-arrow-down mt-15' : 'icon dropdown-right-icon mt-15']"
<i :class="[show ? 'icon icon-arrow-down mt-15' : 'icon dropdown-right-icon left mt-15']"
v-if="haveChildren" @click="showOrHide"></i>
<ul v-if="haveChildren && show">

View File

@ -33,6 +33,13 @@
grid-auto-rows: auto;
}
@media only screen and (max-width: 551px) {
.product-grid-3 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 20px;
}
}
@media only screen and (max-width: 854px) {
.product-grid-4 {
grid-template-columns: 29.5% 29.5% 29.5%;
@ -121,6 +128,21 @@
}
}
@media only screen and (max-width: 425px) {
.product-card {
font-size: 90%;
.btn.btn-md {
padding: 5px;
}
}
.product-grid-4 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 10px;
}
}
.product-list {
min-height: 200px;
@ -711,16 +733,56 @@ section.slider-block {
border-top: 1px solid $border-color;
}
}
.responsive-nav {
display: none;
}
}
@media all and (max-width: 720px) {
.header-bottom {
display: none !important;
.header {
.header-bottom {
height: auto;
display: none;
.nav a {
display:inline-block;
}
ul.nav , .nav li{
height: auto;
}
.nav > li {
float: none;
}
// .nav li ul {
// padding-left: 20px;
// }
.nav li > .icon{
float: right;
display: block;
}
.nav li .left{
height: 16px;
width: 16px;
}
.nav li a > .icon{
display: none;
}
.nav ul {
position: unset;
border: none;
box-shadow: none;
}
.nav > li li:hover > ul {
margin-left: 0px;
top: 0px;
}
}
}
ul.search-container {
@ -738,51 +800,6 @@ section.slider-block {
ul.right-responsive {
display: flex !important;
}
.responsive-nav {
margin-top: 20px;
display: none;
.nav a {
display:inline-block;
color: $font-color;
text-decoration: none;
padding: 12px 4.8px 12px 8px;
text-transform: uppercase;
letter-spacing: 2px;
}
.nav li > .icon{
float: right;
}
.nav li a > .icon{
display: none;
}
.nav > li {
border-bottom: 1px solid $border-color;
}
.nav li ul {
padding-left: 30px;
}
.nav li:first-child {
border-top: 1px solid $border-color;
}
.nav > li:last-child {
float:none;
height: 45px;
display: none;
border: none;
img {
margin-right:6px;
}
}
}
}
//footer responsive with out media query.
@ -872,6 +889,100 @@ section.slider-block {
flex-direction: row;
width: 100%;
.layered-filter-wrapper {
width: 25%;
float: left;
padding-right: 20px;
min-height: 1px;
.filter-title {
border-bottom: 1px solid $border-color;
color: $font-color;
padding: 10px 0;
}
.filter-attributes {
.filter-attributes-item {
border-bottom: 1px solid $border-color;
padding-bottom: 10px;
.filter-attributes-title {
padding: 10px 40px 0 10px;
color: #5E5E5E;
cursor: pointer;
position: relative;
.remove-filter-link {
font-weight: 400;
color: $brand-color;
margin-right: 10px;
}
.icon {
background-image: url('../images/arrow-down.svg') !important;
width: 10px;
height: 10px;
position: absolute;
right: 15px;
top: 14px;
}
}
.filter-attributes-content {
padding: 10px;
display: none;
ol.items {
padding: 0;
margin: 0;
list-style: none none;
li.item {
padding: 8px 0;
color: #5E5E5E;
.checkbox {
margin: 0;
.checkbox-view {
height: 16px;
width: 16px;
background-image: url("../images/checkbox.svg");
}
input:checked + .checkbox-view {
background-image: url("../images/checkbox-checked.svg");
}
}
}
}
.price-range-wrapper {
margin-top: 21px;
}
}
&.active {
.filter-attributes-content {
display: block;
}
.filter-attributes-title .icon {
background-image: url('../images//arrow-up.svg') !important;
}
}
}
}
}
.responsive-layred-filter {
display: none;
@extend .layered-filter-wrapper;
width: 100%;
float: none;
padding-right: 0px;
}
.category-block {
width: 80%;
display: block;
@ -899,12 +1010,12 @@ section.slider-block {
color: $font-color;
line-height: 45px;
span:first-child {
display: inline;
}
span:last-child {
span {
display: none;
&:first-child {
display: inline;
}
}
}
@ -952,14 +1063,6 @@ section.slider-block {
}
}
.reponsive-sorter-limiter {
display: none;
}
.responsive-layred-filter{
display: none;
}
.bottom-toolbar {
display: block;
margin-top: 40px;
@ -968,6 +1071,55 @@ section.slider-block {
}
}
//category page responsivs css
@media only screen and (max-width: 840px) {
.main {
.layered-filter-wrapper{
display: none;
}
.category-block {
width: 100% !important;
.top-toolbar {
display: flex;
flex-direction: column;
.page-info {
border-bottom: 1px solid $border-color;
line-height: 15px;
span {
display: inline;
&:first-child{
display: none;
}
}
.sort-filter {
float: right;
cursor: pointer;
}
}
.pager {
margin-top: 20px;
display: none;
.view-mode {
display: none;
}
}
}
.responsive-layred-filter {
display: block;
}
}
}
}
// product pages css starts here
section.product-detail {
color: $font-color;
@ -1208,7 +1360,6 @@ section.product-detail {
margin-right: 0px;
.thumb-frame {
img {
height: 100%;
width: auto;
@ -1240,11 +1391,8 @@ section.product-detail {
}
@media only screen and (max-width: 510px){
section.product-detail div.layouter form {
div.product-image-group {
.product-hero-image img {
width: 100% !important;
}
@ -1740,49 +1888,37 @@ section.cart {
// review page start here
section.review {
color: $font-color;
.category-breadcrumbs {
display: inline;
}
.review-layouter {
display: flex;
flex-direction: row;
.product-info {
font-size: 24px;
.product-image {
img {
display: block;
height: 280px;
width: 280px;
}
}
.product-name {
margin-top: 20px;
span {
font-size: 24px;
}
}
.product-price {
margin-top: 10px;
.pro-price {
font-size: 24px;
color: $disc-price;
}
.pro-price-not {
margin-left: 10px;
font-size: 16px;
color: $disc-price-pro;
}
.offer {
margin-left: 10px;
font-size: 16px;
}
}
}
@ -1792,69 +1928,41 @@ section.review {
width: 49%;
.heading {
margin-top: 10px;
color: #242424;
font-weight: 600;
.btn.btn-primary.right {
.right {
float: right;
margin-top: -10px;
}
}
.rating {
margin-top : 25px;
color: $font-color-light;
span {
display: inline;
}
}
.stars {
width: 270px;
display: inline-block;
label.star {
font-size: 36px;
color: #d4d4d4;
transition: all .2s;
font-size: 25px;
color: #d4d4d4;
transition: all .2s;
}
label.star:before {
content: '\2605';
}
}
.write-review {
margin-top: 25px;
.control-group {
margin-bottom: 0px;
textarea {
margin-top: 5px;
border: 2px solid $border-color;
border-radius: 3px;
width: 600px;
height: 120px;
}
label {
color: $font-color-light;
font-size: 16px;
}
}
.submit-button {
margin-top: 10px;
button {
background: $brand-color;
font-size: 14px;
color: $background-color;
text-align: center;
width: 120px;
height: 38px;
border: none;
textarea {
margin-top: 5px;
border: 2px solid $border-color;
color: $font-color-light;
border-radius: 3px;
width: 90%;
height: 120px;
}
}
@ -1871,17 +1979,14 @@ section.review {
width: 48%;
.avg-rating-count{
span {
font-size: 34px;
text-align: center;
}
}
}
.rating-calculate {
.progress-only {
width:20px;
border: 1px solid blue;
@ -1889,10 +1994,123 @@ section.review {
}
}
}
.ratings-reviews {
display: flex;
align-items: center;
justify-content: space-between;
.left-side {
padding: 40px 20px 40px 20px;
width: 50%;
.rate {
font-size: 34px;
}
.stars.icon {
height: 16px;
width: 16px;
}
}
.right-side {
width: 50%;
.rater {
display: inline-flex;
align-items: center;
padding-top: 5px;
width: 100%;
.star-name {
margin-right: 5px;
}
.rate-number {
width:15px;
}
.percentage {
width: 15%;
margin-right: 10px;
span {
float: right;
white-space: nowrap;
}
}
.line-bar {
height: 4px;
width: 65%;
margin-right: 5px;
background: #D8D8D8;
.line-value {
background-color: #0031F0;
}
}
}
}
}
}
}
// review page end here
// review responsive css start here
@media only screen and (max-width: 770px) {
section.review {
.category-breadcrumbs{
display: none;
}
.review-layouter {
flex-direction: column;
.product-info .product-image {
max-width: 280px;
margin-left: auto;
margin-right: auto;
}
.review-form {
width: 100%;
margin-left: 0px;
.heading .right {
margin-top: 50px;
}
.ratings-reviews {
flex-direction: column;
width: 100%;
.left-side {
width: 100%;
padding: 0px 0px 40px 0px;
margin-top: -50px;
}
.right-side {
width: 100%;
.rater .line-bar {
width: 100%;
}
.rater .percentage {
width: 10%;
margin-right: 0px;
}
}
}
}
}
}
}
//review responsive css end here
//customers auth page css goes here
.auth-content {
@ -2028,6 +2246,88 @@ section.review {
.account-head {
margin-bottom: 20px;
.back-icon {
display: none;
}
}
}
}
//customer account page responsive layout
@media only screen and (max-width: 770px) {
.account-content {
flex-direction: column;
.account-side-menu {
display: none;
width:100%;
border: none;
li {
margin-left: 0%;
width: 100%;
a {
color : $font-color;
}
}
}
.responsive-side-menu {
cursor: pointer;
padding-top:13px;
display: block;
height: 46px;
border-bottom: 1px solid $border-color;
border-top: 1px solid $border-color;
.right {
float: right;
}
}
.account-layout {
margin-left: 0%;
margin-top: 20px;
.account-head {
display: flex;
justify-content: space-between;
border-bottom: 1px solid $border-color;
border-top: 1px solid $border-color;
height: 46px;
.back-icon {
display: block;
}
span {
margin-top: 12px;
font-size: 18px;
}
.horizontal-rule {
display: none;
}
}
.account-table-content {
margin-top: 2%;
table tbody tr {
display: grid;
margin-bottom: 20px;
}
}
}
.account-items-list , .edit-form {
margin-top: 20px;
}
.control-group .control {
width: 100%;
}
}
}
@ -2106,7 +2406,6 @@ section.review {
color: #8E8E8E;
}
.box-content {
color: #3A3A3A;
}
@ -2116,6 +2415,10 @@ section.review {
.qty-row {
display: block;
}
.responsive-table {
display: none;
}
}
}
@ -2152,3 +2455,72 @@ section.review {
}
}
}
@media only screen and (max-width: 770px) {
.sale-container {
.sale-section {
.section-content {
.row {
display: flex;
flex-direction: column;
.title {
line-height: 20px;
}
}
.table{
display: none;
}
.responsive-table {
border: 1px solid $border-color;
margin-top: 5px;
width: 100%;
display: block;
tbody td {
padding: 8px 5px;
&:first-child {
width: 25%;
}
&:last-child {
padding-left: 10px;
}
}
}
.totals {
.sale-summary {
width: 100%;
tr td {
&:nth-child(2) {
display: none;
}
}
}
}
.order-box-container {
display: flex;
flex-direction: column;
.box {
width: 100%;
margin: 10px auto;
}
}
}
}
}
}
// css for loader
.cp-spinner {
margin-left: 46%;
margin-top: 35%;
margin-bottom: 35%;
}

View File

@ -1,18 +1,3 @@
@media only screen and (max-width: 425px) {
.product-card {
font-size: 90%;
.btn.btn-md {
padding: 5px;
}
}
.product-grid-4 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 10px;
}
}
//wishlist icon hover properties
.add-to-wishlist {

View File

@ -125,4 +125,10 @@
background-image: url("../images/Expand-Light-On.svg");
width: 18px;
height: 18px;
}
.icon-menu-close-adj {
background-image: url("../images/cross-icon-adj.svg");
width: 32px;
height: 32px;
}

View File

@ -126,167 +126,3 @@ body {
.mt-90 {
margin-top: 90px;
}
@media only screen and (max-width: 551px) {
.product-grid-3 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 20px;
}
}
@media only screen and (max-width: 840px) {
.layered-filter-wrapper{
display: none;
}
.main {
.category-block {
width: 100% !important;
.top-toolbar {
border-bottom: 1px solid $border-color;
.page-info {
span:first-child {
display: none;
}
span:last-child {
display: inline;
}
}
.pager {
.view-mode {
margin-right: 0px;
.grid-view , .list-view {
display: none;
}
.sort-filter {
cursor: pointer;
display: inline-block;
margin-top: 10px;
}
}
.sorter , .limiter{
display: none;
}
}
}
.reponsive-sorter-limiter {
display: none;
select {
background: #FFFFFF;
border: 1px solid #C7C7C7;
border-radius: 3px;
color: #242424;
padding: 10px;
}
}
}
}
}
//layered filter wrapper styles
.layered-filter-wrapper {
width: 25%;
float: left;
padding-right: 20px;
min-height: 1px;
.filter-title {
border-bottom: 1px solid $border-color;
color: $font-color;
padding: 10px 0;
}
.filter-attributes {
.filter-attributes-item {
border-bottom: 1px solid $border-color;
padding-bottom: 10px;
.filter-attributes-title {
padding: 10px 40px 0 10px;
color: #5E5E5E;
cursor: pointer;
position: relative;
.remove-filter-link {
font-weight: 400;
color: $brand-color;
margin-right: 10px;
}
.icon {
background-image: url('../images/arrow-down.svg') !important;
width: 10px;
height: 10px;
position: absolute;
right: 15px;
top: 14px;
}
}
.filter-attributes-content {
padding: 10px;
display: none;
ol.items {
padding: 0;
margin: 0;
list-style: none none;
li.item {
padding: 8px 0;
color: #5E5E5E;
.checkbox {
margin: 0;
.checkbox-view {
height: 16px;
width: 16px;
background-image: url("../images/checkbox.svg");
}
input:checked + .checkbox-view {
background-image: url("../images/checkbox-checked.svg");
}
}
}
}
.price-range-wrapper {
margin-top: 21px;
}
}
&.active {
.filter-attributes-content {
display: block;
}
.filter-attributes-title .icon {
background-image: url('../images//arrow-up.svg') !important;
}
}
}
}
}
.responsive-layred-filter {
width: 100%;
float: none;
padding-right: 0px;
}

View File

@ -17,6 +17,9 @@ return [
'add-review-page-title' => 'Add Review',
'write-review' => 'Write a review',
'review-title' => 'Give Your Review a Title',
'product-review-page-title' => 'Product Review',
'rating-reviews' => 'Rating & Reviews',
'submit' => 'SUBMIT',
],
'customer' => [
@ -167,7 +170,12 @@ return [
'review' => [
'index' => [
'title' => 'Reviews'
'title' => 'Reviews',
'page-title' => 'Customer - Reviews'
],
'view' => [
'page-tile' => 'Review #:id',
]
]
]

View File

@ -13,6 +13,7 @@
<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

@ -9,7 +9,9 @@
<div class="account-layout">
<div class="account-head mb-15">
<div class="account-heading">{{ __('shop::app.customer.account.address.edit.title') }}</div>
<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.edit.title') }}</span>
<span></span>
</div>
<form method="post" action="{{ route('customer.address.edit') }}">

View File

@ -5,29 +5,3 @@
<h1>Account Index Page</h1>
</div>
@endsection
@push('scripts')
<script>
$(document).ready(function(){
var sideMenuTitle = document.getElementById("responsive-side-menu");
var downIcon = document.getElementById("down-icon");
var accountSideMenu = document.getElementsByClassName("account-side-menu");
sideMenuTitle.addEventListener("click", function(){
if(downIcon.className == 'icon icon-arrow-down right'){
for(let i=0 ; i < accountSideMenu.length ; i++){
accountSideMenu[i].style.display="block";
}
downIcon.classList.remove("icon","icon-arrow-down","right");
downIcon.classList.add("icon","icon-arrow-up","right");
}else{
for(let i=0 ; i < accountSideMenu.length ; i++){
accountSideMenu[i].style.display="none";
}
downIcon.classList.remove("icon","icon-arrow-up","right");
downIcon.classList.add("icon","icon-arrow-down","right");
}
});
});
@endpush

View File

@ -12,9 +12,11 @@
<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.order.index.title') }}
</span>
<span></span>
</div>
<div class="account-items-list">

View File

@ -12,9 +12,11 @@
<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.order.view.page-tile', ['order_id' => $order->id]) }}
</span>
<span></span>
</div>
<div class="sale-container">
@ -25,11 +27,11 @@
<div class="sale-section">
<div class="section-content">
<div class="row">
<span class="title">
<span class="title">
{{ __('shop::app.customer.account.order.view.placed-on') }}
</span>
<span class="value">
<span class="value">
{{ core()->formatDate($order->created_at, 'd M Y') }}
</span>
</div>
@ -89,9 +91,94 @@
<td>{{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@foreach ($order->items as $item)
<table class="responsive-table">
<tbody>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.SKU') }}
</td>
<td>
{{ $item->type == 'configurable' ? $item->child->sku : $item->sku }}
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.product-name') }}
</td>
<td>{{ $item->name }}</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.price') }}
</td>
<td>
{{ core()->formatPrice($item->price, $order->order_currency_code) }}
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.item-status') }}
</td>
<td>
<span class="qty-row">
{{ __('shop::app.customer.account.order.view.item-ordered', ['qty_ordered' => $item->qty_ordered]) }}
</span>
<span class="qty-row">
{{ $item->qty_invoiced ? __('shop::app.customer.account.order.view.item-invoice', ['qty_invoiced' => $item->qty_invoiced]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_shipped ? __('shop::app.customer.account.order.view.item-shipped', ['qty_shipped' => $item->qty_shipped]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_canceled ? __('shop::app.customer.account.order.view.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }}
</span>
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.subtotal') }}
</td>
<td>
{{ core()->formatPrice($item->total, $order->order_currency_code) }}
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.tax-percent') }}
</td>
<td>
{{ number_format($item->tax_percent, 2) }}%
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.tax-amount') }}
</td>
<td>
{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}
</td>
</tr>
<tr>
<td>
{{ __('shop::app.customer.account.order.view.grand-total') }}
</td>
<td>
{{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }}
</td>
</tr>
</tbody>
</table>
@endforeach
<div class="totals">
<table class="sale-summary">
<tbody>
@ -214,7 +301,7 @@
</div>
</div>
</div>
@endforeach
</tab>
@ -245,7 +332,7 @@
<tbody>
@foreach ($shipment->items as $item)
<tr>
<td>{{ $item->sku }}</td>
<td>{{ $item->name }}</td>
@ -320,7 +407,7 @@
</div>
</div>
</div>
</div>

View File

@ -13,4 +13,34 @@
<i class="icon angle-right-icon"></i>
</li>
@endforeach
</ul>
</ul>
@push('scripts')
<script>
$(document).ready(function(){
var sideMenuTitle = document.getElementById("responsive-side-menu");
var downIcon = document.getElementById("down-icon");
var accountSideMenu = document.getElementsByClassName("account-side-menu");
console.log(accountSideMenu);
sideMenuTitle.addEventListener("click", function(){
if(downIcon.className == 'icon icon-arrow-down right'){
for(let i=0 ; i < accountSideMenu.length ; i++){
accountSideMenu[i].style.display="block";
}
downIcon.classList.remove("icon","icon-arrow-down","right");
downIcon.classList.add("icon","icon-arrow-up","right");
}else{
for(let i=0 ; i < accountSideMenu.length ; i++){
accountSideMenu[i].style.display="none";
}
downIcon.classList.remove("icon","icon-arrow-up","right");
downIcon.classList.add("icon","icon-arrow-down","right");
}
});
});
</script>
@endpush

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

@ -1,6 +1,11 @@
@inject ('productImageHelper', 'Webkul\Product\Helpers\ProductImage')
@extends('shop::layouts.master')
@section('page_title')
{{ __('shop::app.customer.account.review.index.page-title') }}
@endsection
@section('content-wrapper')
<div class="account-content">
@include('shop::customers.account.partials.sidemenu')
@ -8,7 +13,7 @@
<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>

View File

@ -1,6 +1,11 @@
@inject ('productImageHelper', 'Webkul\Product\Helpers\ProductImage')
@extends('shop::layouts.master')
@section('page_title')
{{ __('shop::app.customer.account.review.view.page-title') }}
@endsection
@section('content-wrapper')
<div class="account-content">
@include('shop::customers.account.partials.sidemenu')

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

@ -105,7 +105,7 @@
<li class="cart-dropdown">
<span class="icon cart-icon"></span>
@include('shop::checkout.cart.mini-cart')
</li>
</ul>
@ -169,7 +169,7 @@
<li class="cart-dropdown">
<?php $cart = cart()->getCart(); ?>
@if(isset($cart))
<div>
<a href="{{ route('shop.checkout.cart.index') }}">
@ -205,9 +205,6 @@
</div> --}}
</div>
<div class="responsive-nav">
<category-nav categories='@json($categories)' url="{{url()->to('/')}}"></category-nav>
</div>
</div>
@push('scripts')
@ -216,15 +213,11 @@
var hamMenu = document.getElementById("hammenu");
var search = document.getElementById("search");
var searchResponsive = document.getElementsByClassName('search-responsive')[0];
var sortLimit = document.getElementsByClassName('reponsive-sorter-limiter')[0];
var layerFilter = document.getElementsByClassName('responsive-layred-filter')[0];
var navResponsive = document.getElementsByClassName('responsive-nav')[0];
var thumbList = document.getElementsByClassName('thumb-list')[0];
var navResponsive = document.getElementsByClassName('header-bottom')[0];
search.addEventListener("click", header);
hamMenu.addEventListener("click", header);
// for header responsive icon
function header() {
var className = document.getElementById(this.id).className;
if(className === 'icon icon-search' ) {

View File

@ -23,7 +23,7 @@
</div>
<?php $products = $productRepository->findAllByCategory($category->id); ?>
@if ($products->count())
@include ('shop::products.list.toolbar')
@ -69,9 +69,11 @@
$(document).ready(function() {
var sort = document.getElementById("sort");
var filter = document.getElementById("filter");
var sortLimit = document.getElementsByClassName('reponsive-sorter-limiter')[0];
var sortLimit = document.getElementsByClassName('pager')[0];
var layerFilter = document.getElementsByClassName('responsive-layred-filter')[0];
layerFilter.style.display ="none";
if(sort && filter) {
sort.addEventListener("click", sortFilter);
filter.addEventListener("click", sortFilter);
@ -98,6 +100,8 @@
sort.classList.add("sort-icon");
layerFilter.style.display = "block";
layerFilter.style.marginTop = "10px";
sortLimit.style.display = "none";
} else {
sort.classList.remove("icon-menu-close-adj");

View File

@ -7,7 +7,12 @@
{{ __('shop::app.products.pager-info', ['showing' => $products->firstItem() . '-' . $products->lastItem(), 'total' => $products->total()]) }}
</span>
<span>Men</span>
<span> Men </span>
<span class="sort-filter">
<i class="icon sort-icon" id="sort" ></i>
<i class="icon filter-icon" id="filter"></i>
</span>
</div>
<div class="pager">
@ -32,12 +37,6 @@
<i class="icon list-view-icon"></i>
</a>
@endif
<div class="sort-filter">
<i class="icon sort-icon" id="sort" ></i>
<i class="icon filter-icon" id="filter"></i>
</div>
</div>
<div class="sorter">
@ -76,41 +75,6 @@
</div>
<div class="reponsive-sorter-limiter mb-20">
<div class="sorter">
<label>{{ __('shop::app.products.sort-by') }}</label>
<select onchange="window.location.href = this.value">
@foreach ($toolbarHelper->getAvailableOrders() as $key => $order)
<option value="{{ $toolbarHelper->getOrderUrl($key) }}" {{ $toolbarHelper->isOrderCurrent($key) ? 'selected' : '' }}>
{{ __('shop::app.products.' . $order) }}
</option>
@endforeach
</select>
</div>
<div class="limiter">
<label>{{ __('shop::app.products.show') }}</label>
<select onchange="window.location.href = this.value">
@foreach ($toolbarHelper->getAvailableLimits() as $limit)
<option value="{{ $toolbarHelper->getLimitUrl($limit) }}" {{ $toolbarHelper->isLimitCurrent($limit) ? 'selected' : '' }}>
{{ $limit }}
</option>
@endforeach
</select>
</div>
</div>
<div class="responsive-layred-filter mb-20">
<layered-navigation></layered-navigation>

View File

@ -10,17 +10,18 @@
</div> --}}
<div class="review-layouter mb-20">
<div class="product-info">
<div class="product-image">
<img src="{{ bagisto_asset('images/jeans_big.jpg') }}" />
</div>
<div class="product-name">
<div class="product-name mt-20">
<span>{{ $product->name }}</span>
</div>
<div class="product-price">
<div class="product-price mt-10">
@inject ('priceHelper', 'Webkul\Product\Helpers\Price')
@if ($product->type == 'configurable')
@ -33,26 +34,24 @@
@endif
@endif
{{-- <span class="pro-price-not">
{{-- <span class="pro-price-not">
<strike> $45.00 </strike>
</span>
<span class="offer"> 10% Off </span> --}}
<span class="offer"> 10% Off </span> --}}
</div>
</div>
<div class="review-form">
<form method="POST" action="{{ route('shop.reviews.store', $product->id ) }}">
@csrf
<div class="heading">
<div class="heading mt-10">
<span>{{ __('shop::app.reviews.write-review') }}</span>
</div>
<div class="rating">
<span> {{ __('admin::app.customers.reviews.rating') }} </span>
</div>
<div class="rating mt-20">
<div class="rating-title"> {{ __('admin::app.customers.reviews.rating') }} </div>
<div class="stars">
<label class="star star-5" for="star-5" onclick="calculateRating(id)" id="1"></label>
<label class="star star-4" for="star-4" onclick="calculateRating(id)" id="2"></label>
@ -63,35 +62,34 @@
<label class="star star-1" for="star-1" onclick="calculateRating(id)" id="5"></label>
<input type="name" name="title" class="form-control" placeholder="{{ __('shop::app.reviews.review-title') }}">
<input type="hidden" id="rating" name="rating">
</div>
<div class="write-review">
<div>
<input type="name" name="title" class="form-control" placeholder="{{ __('shop::app.reviews.review-title') }}">
</div>
<div class="write-review mt-20">
<div class="control-group">
<label for="review">{{ __('admin::app.customers.reviews.comment') }}</label>
<textarea name="comment">
</textarea>
</div>
</div>
<div class="submit-button">
<button type="submit" class="btn btn-lg btn-primary"> SUBMIT </button>
</div>
<a type="submit" class="btn btn-lg btn-primary">
{{ __('shop::app.reviews.submit') }}
</a>
</form>
</div>
</div>
</div>
</section>
@endsection
@push('scripts')
<script>
function calculateRating(id){
@ -110,5 +108,4 @@
}
</script>
@endpush

View File

@ -1,62 +1,60 @@
@inject ('reviewHelper', 'Webkul\Product\Helpers\Review')
@inject ('priceHelper', 'Webkul\Product\Helpers\Price')
@section('page_title')
{{ __('shop::app.reviews.product-review-page-title') }} - {{ $product->name }}
@endsection
@extends('shop::layouts.master')
@section('content-wrapper')
<section class="product-review">
<section class="review">
<div class="category-breadcrumbs">
<span class="breadcrumb">Home</span> > <span class="breadcrumb">Men</span> > <span class="breadcrumb">Slit Open Jeans</span>
</div>
<div class="product-layouter">
<div class="review-layouter">
<div class="mixed-group">
<div class="single-image">
<div class="product-info">
<div class="product-image">
<img src="{{ bagisto_asset('images/jeans_big.jpg') }}" />
</div>
<div class="details">
<div class="product-name">
{{ $product->name }}
</div>
<div class="price">
@if ($product->type == 'configurable')
<span class="main-price">${{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
@else
@if ($priceHelper->haveSpecialPrice($product))
<span class="main-price">${{ core()->currency($priceHelper->getSpecialPrice($product)) }}</span>
@else
<span class="main-price">${{ core()->currency($product->price) }}</span>
@endif
@endif
<span class="real-price">
$25.00
</span>
<span class="discount">
10% Off
</span>
</div>
<div class="product-name mt-20">
<span>{{ $product->name }}</span>
</div>
<div class="product-price mt-10">
@inject ('priceHelper', 'Webkul\Product\Helpers\Price')
@if ($product->type == 'configurable')
<span class="pro-price">{{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
@else
@if ($priceHelper->haveSpecialPrice($product))
<span class="pro-price">{{ core()->currency($priceHelper->getSpecialPrice($product)) }}</span>
@else
<span class="pro-price">{{ core()->currency($product->price) }}</span>
@endif
@endif
{{-- <span class="pro-price-not">
<strike> $45.00 </strike>
</span>
<span class="offer"> 10% Off </span> --}}
</div>
</div>
<div class="rating-reviews">
<div class="review-form">
<div class="heading mt-10">
<span> {{ __('shop::app.reviews.rating-reviews') }} </span>
<div class="title-inline">
<span>Ratings & {{ __('admin::app.customers.reviews.name') }}</span>
<!-- <button class="btn btn-md btn-primary">Write Review</button> -->
<a href="{{ route('shop.reviews.create', $product->url_key) }}" class="btn btn-lg btn-primary right">Write Review</a>
</div>
<div class="overall">
<div class="ratings-reviews mt-35">
<div class="left-side">
<span class="number">
<span class="rate">
{{ $reviewHelper->getAverageRating($product) }}
</span>
@ -66,56 +64,78 @@
</span>
@endfor
<div class="total-reviews">
{{ $reviewHelper->getTotalRating($product) }} {{ __('admin::app.customers.reviews.rating') }} & {{ $reviewHelper->getTotalReviews($product) }} {{ __('admin::app.customers.reviews.name') }}
<div class="total-reviews mt-5">
{{ $reviewHelper->getTotalRating($product) }} {{ __('admin::app.customers.reviews.rating') }} & {{ $reviewHelper->getTotalReviews($product) }} {{ __('admin::app.customers.reviews.title') }}
</div>
</div>
<div class="right-side">
@foreach($reviewHelper->getPercentageRating($product) as $key=>$count)
<div class="rater 5star">
<div class="star" id={{$key}}star> Star</div>
<div class="line-bar" >
<div class="rate-number" id={{$key}}star></div>
<div class="star-name">Star</div>
<div class="line-bar">
<div class="line-value" id="{{ $key }}"></div>
</div>
<div class="percentage"> {{$count}}% </div>
<div class="percentage">
<span> {{$count}}% </span>
</div>
</div>
<br/>
@endforeach
</div>
</div>
<div class="reviews">
@foreach($reviewHelper->loadMore($product) as $review)
<div class="review">
<div class="title">
{{ $review->title }}
</div>
<div class="stars">
@for ($i = 1; $i <= $review->rating ; $i++)
<span class="icon star-icon"></span>
@endfor
</div>
<div class="message">
{{ $review->comment }}
</div>
<div class="reviewer-details">
<span class="by">
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }}
</span>
<span class="when">
{{ core()->formatDate($review->created_at) }}
</span>
</div>
<div class="rating-reviews">
{{-- <div class="rating-header">
{{ __('shop::app.products.reviews-title') }}
</div> --}}
<div class="reviews">
@foreach ($reviewHelper->getReviews($product)->paginate(10) as $review)
<div class="review">
<div class="title">
{{ $review->title }}
</div>
<span class="stars">
@for ($i = 1; $i <= $review->rating; $i++)
<span class="icon star-icon"></span>
@endfor
</span>
<div class="message">
{{ $review->comment }}
</div>
<div class="reviewer-details">
<span class="by">
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }},
</span>
<span class="when">
{{ core()->formatDate($review->created_at) }}
</span>
</div>
</div>
@endforeach
<a href="{{ route('shop.reviews.index', $product->url_key) }}" class="view-all">View All</a>
</div>
@endforeach
<div class="view-all" onclick="loadMore()">Load More</div>
</div>
</div>
</div>
</section>
@endsection
@ -131,26 +151,20 @@
<?php } ?>
var i=5;
for(var key in percentage){
width= percentage[key] * 1.58;
width= percentage[key] ;
let id =key + 'star';
document.getElementById(key).style.width = width + "px";
document.getElementById(key).style.width = width + "%";
document.getElementById(key).style.height = 4 + "px";
document.getElementById(id).innerHTML = i + '\xa0\xa0' + "star";
document.getElementById(id).innerHTML = i ;
i--;
{{-- document.getElementById(id).innerHTML = i + '\xa0\xa0' + "star"; --}}
}
})();
function loadMore(){
var segment_str = window.location.pathname;
var segment_array = segment_str.split( '/' );
var last_segment = segment_array[segment_array.length - 1];
url = segment_str.slice(0, segment_str.lastIndexOf('/'));
project = url + "/" + (parseInt(last_segment)+1) ;
location.href = project;
}
</script>
@endpush

View File

@ -14,7 +14,7 @@
<!--<div class="category-breadcrumbs">
<span class="breadcrumb">Home</span> > <span class="breadcrumb">Men</span> > <span class="breadcrumb">Slit Open Jeans</span>
</div>-->
<div class="layouter">
<form method="POST" action="{{ route('cart.add', $product->id) }}" @submit.prevent="onSubmit">
@csrf()

View File

@ -54,7 +54,7 @@ class TaxCategoryController extends Controller
* @return void
*/
public function __construct(
TaxCategory $taxCategory,
TaxCategory $taxCategory,
TaxRate $taxRate,
TaxMap $taxMap
)
@ -165,16 +165,21 @@ class TaxCategoryController extends Controller
}
/**
* Destroy a tax category
* Remove the specified resource from storage.
*
* @return mixed
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
if($this->taxCategory->count() == 1) {
session()->flash('error', 'At least one tax category is required.');
} else {
$this->taxCategorye->delete($id);
public function destroy($id) {
if($this->taxCategory()->delete($id)) {
session()->flash('success', 'The tax category is successfully deleted');
return redirect()->back();
session()->flash('success', 'Tax category deleted successfully.');
}
return redirect()->back();
}
}

View File

@ -86,7 +86,4 @@ class TaxController extends Controller
{
return view($this->_config['view']);
}
}

View File

@ -152,6 +152,25 @@ class TaxRateController extends Controller
return redirect()->back();
}
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
if($this->taxRate->count() == 1) {
session()->flash('error', 'At least one tax rate is required.');
} else {
$this->taxRate->delete($id);
session()->flash('success', 'Tax rate deleted successfully.');
}
return redirect()->back();
}
}

View File

@ -880,9 +880,7 @@ h2 {
height: 48px;
display: inline-block;
box-sizing: border-box;
position: absolute;
margin-left: 18.5%;
margin-top: 15%;
position: relative;
}
.cp-round:before {
@ -916,7 +914,6 @@ h2 {
top: 0;
left: 0;
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {

View File

@ -127,17 +127,10 @@
height: 18px;
}
@media only screen and (max-width: 425px) {
.product-card {
font-size: 90%;
}
.product-card .btn.btn-md {
padding: 5px;
}
.product-grid-4 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 10px;
}
.icon-menu-close-adj {
background-image: url("../images/cross-icon-adj.svg");
width: 32px;
height: 32px;
}
.add-to-wishlist .wishlist-icon:hover {
@ -387,143 +380,6 @@ body {
margin-top: 90px;
}
@media only screen and (max-width: 551px) {
.product-grid-3 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 20px;
}
}
@media only screen and (max-width: 840px) {
.layered-filter-wrapper {
display: none;
}
.main .category-block {
width: 100% !important;
}
.main .category-block .top-toolbar {
border-bottom: 1px solid #C7C7C7;
}
.main .category-block .top-toolbar .page-info span:first-child {
display: none;
}
.main .category-block .top-toolbar .page-info span:last-child {
display: inline;
}
.main .category-block .top-toolbar .pager .view-mode {
margin-right: 0px;
}
.main .category-block .top-toolbar .pager .view-mode .grid-view, .main .category-block .top-toolbar .pager .view-mode .list-view {
display: none;
}
.main .category-block .top-toolbar .pager .view-mode .sort-filter {
cursor: pointer;
display: inline-block;
margin-top: 10px;
}
.main .category-block .top-toolbar .pager .sorter, .main .category-block .top-toolbar .pager .limiter {
display: none;
}
.main .category-block .reponsive-sorter-limiter {
display: none;
}
.main .category-block .reponsive-sorter-limiter select {
background: #FFFFFF;
border: 1px solid #C7C7C7;
border-radius: 3px;
color: #242424;
padding: 10px;
}
}
.layered-filter-wrapper {
width: 25%;
float: left;
padding-right: 20px;
min-height: 1px;
}
.layered-filter-wrapper .filter-title {
border-bottom: 1px solid #C7C7C7;
color: #242424;
padding: 10px 0;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item {
border-bottom: 1px solid #C7C7C7;
padding-bottom: 10px;
}
.layered-filter-wrapper .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 {
font-weight: 400;
color: #0031F0;
margin-right: 10px;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .icon {
background-image: url("../images/arrow-down.svg") !important;
width: 10px;
height: 10px;
position: absolute;
right: 15px;
top: 14px;
}
.layered-filter-wrapper .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 {
padding: 0;
margin: 0;
list-style: none none;
}
.layered-filter-wrapper .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 {
margin: 0;
}
.layered-filter-wrapper .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 {
background-image: url("../images/checkbox-checked.svg");
}
.layered-filter-wrapper .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 {
display: block;
}
.layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon {
background-image: url("../images//arrow-up.svg") !important;
}
.responsive-layred-filter {
width: 100%;
float: none;
padding-right: 0px;
}
.main-container-wrapper {
max-width: 1300px;
width: auto;
@ -552,6 +408,13 @@ body {
grid-auto-rows: auto;
}
@media only screen and (max-width: 551px) {
.main-container-wrapper .product-grid-3 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 20px;
}
}
@media only screen and (max-width: 854px) {
.main-container-wrapper .product-grid-4 {
grid-template-columns: 29.5% 29.5% 29.5%;
@ -646,6 +509,19 @@ body {
background: #2ED04C;
}
@media only screen and (max-width: 425px) {
.main-container-wrapper .product-card {
font-size: 90%;
}
.main-container-wrapper .product-card .btn.btn-md {
padding: 5px;
}
.main-container-wrapper .product-grid-4 {
grid-template-columns: 48.5% 48.5%;
grid-column-gap: 10px;
}
}
.main-container-wrapper .product-list {
min-height: 200px;
}
@ -1323,13 +1199,40 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
border-top: 1px solid #C7C7C7;
}
.header .responsive-nav {
display: none;
}
@media all and (max-width: 720px) {
.header-bottom {
display: none !important;
.header .header-bottom {
height: auto;
display: none;
}
.header .header-bottom .nav a {
display: inline-block;
}
.header .header-bottom ul.nav, .header .header-bottom .nav li {
height: auto;
}
.header .header-bottom .nav > li {
float: none;
}
.header .header-bottom .nav li > .icon {
float: right;
display: block;
}
.header .header-bottom .nav li .left {
height: 16px;
width: 16px;
}
.header .header-bottom .nav li a > .icon {
display: none;
}
.header .header-bottom .nav ul {
position: unset;
border: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.header .header-bottom .nav > li li:hover > ul {
margin-left: 0px;
top: 0px;
}
ul.search-container {
display: none !important;
@ -1345,42 +1248,6 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
display: -ms-flexbox !important;
display: flex !important;
}
.responsive-nav {
margin-top: 20px;
display: none;
}
.responsive-nav .nav a {
display: inline-block;
color: #242424;
text-decoration: none;
padding: 12px 4.8px 12px 8px;
text-transform: uppercase;
letter-spacing: 2px;
}
.responsive-nav .nav li > .icon {
float: right;
}
.responsive-nav .nav li a > .icon {
display: none;
}
.responsive-nav .nav > li {
border-bottom: 1px solid #C7C7C7;
}
.responsive-nav .nav li ul {
padding-left: 30px;
}
.responsive-nav .nav li:first-child {
border-top: 1px solid #C7C7C7;
}
.responsive-nav .nav > li:last-child {
float: none;
height: 45px;
display: none;
border: none;
}
.responsive-nav .nav > li:last-child img {
margin-right: 6px;
}
}
.footer {
@ -1466,6 +1333,95 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
width: 100%;
}
.main .category-container .layered-filter-wrapper, .main .category-container .responsive-layred-filter {
width: 25%;
float: left;
padding-right: 20px;
min-height: 1px;
}
.main .category-container .layered-filter-wrapper .filter-title, .main .category-container .responsive-layred-filter .filter-title {
border-bottom: 1px solid #C7C7C7;
color: #242424;
padding: 10px 0;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item {
border-bottom: 1px solid #C7C7C7;
padding-bottom: 10px;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title {
padding: 10px 40px 0 10px;
color: #5E5E5E;
cursor: pointer;
position: relative;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .remove-filter-link, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title .remove-filter-link {
font-weight: 400;
color: #0031F0;
margin-right: 10px;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-title .icon, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-title .icon {
background-image: url("../images/arrow-down.svg") !important;
width: 10px;
height: 10px;
position: absolute;
right: 15px;
top: 14px;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content {
padding: 10px;
display: none;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items {
padding: 0;
margin: 0;
list-style: none none;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item {
padding: 8px 0;
color: #5E5E5E;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox {
margin: 0;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox .checkbox-view, .main .category-container .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");
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content ol.items li.item .checkbox input:checked + .checkbox-view, .main .category-container .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");
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item .filter-attributes-content .price-range-wrapper, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item .filter-attributes-content .price-range-wrapper {
margin-top: 21px;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-content, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item.active .filter-attributes-content {
display: block;
}
.main .category-container .layered-filter-wrapper .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon, .main .category-container .responsive-layred-filter .filter-attributes .filter-attributes-item.active .filter-attributes-title .icon {
background-image: url("../images//arrow-up.svg") !important;
}
.main .category-container .responsive-layred-filter {
display: none;
width: 100%;
float: none;
padding-right: 0px;
}
.main .category-container .category-block {
width: 80%;
display: block;
@ -1494,12 +1450,12 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
line-height: 45px;
}
.main .top-toolbar .page-info span:first-child {
display: inline;
.main .top-toolbar .page-info span {
display: none;
}
.main .top-toolbar .page-info span:last-child {
display: none;
.main .top-toolbar .page-info span:first-child {
display: inline;
}
.main .top-toolbar .pager {
@ -1545,14 +1501,6 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
display: inline-block;
}
.main .reponsive-sorter-limiter {
display: none;
}
.main .responsive-layred-filter {
display: none;
}
.main .bottom-toolbar {
display: block;
margin-top: 40px;
@ -1560,6 +1508,48 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
text-align: center;
}
@media only screen and (max-width: 840px) {
.main .layered-filter-wrapper, .main .category-container .responsive-layred-filter {
display: none;
}
.main .category-block {
width: 100% !important;
}
.main .category-block .top-toolbar {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.main .category-block .top-toolbar .page-info {
border-bottom: 1px solid #C7C7C7;
line-height: 15px;
}
.main .category-block .top-toolbar .page-info span {
display: inline;
}
.main .category-block .top-toolbar .page-info span:first-child {
display: none;
}
.main .category-block .top-toolbar .page-info .sort-filter {
float: right;
cursor: pointer;
}
.main .category-block .top-toolbar .pager {
margin-top: 20px;
display: none;
}
.main .category-block .top-toolbar .pager .view-mode {
display: none;
}
.main .category-block .responsive-layred-filter {
display: block;
}
}
section.product-detail {
color: #242424;
}
@ -2347,10 +2337,6 @@ section.cart .cart-content .right-side {
margin-right: auto;
}
section.review {
color: #242424;
}
section.review .category-breadcrumbs {
display: inline;
}
@ -2359,42 +2345,30 @@ section.review .review-layouter {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
}
section.review .review-layouter .product-info {
font-size: 24px;
}
section.review .review-layouter .product-info .product-image img {
display: block;
height: 280px;
width: 280px;
}
section.review .review-layouter .product-info .product-name {
margin-top: 20px;
}
section.review .review-layouter .product-info .product-name span {
font-size: 24px;
}
section.review .review-layouter .product-info .product-price {
margin-top: 10px;
}
section.review .review-layouter .product-info .product-price .pro-price {
font-size: 24px;
color: #FF6472;
}
section.review .review-layouter .product-info .product-price .pro-price-not {
margin-left: 10px;
font-size: 16px;
color: #A5A5A5;
}
section.review .review-layouter .product-info .product-price .offer {
margin-left: 10px;
font-size: 16px;
}
section.review .review-layouter .review-form {
@ -2403,69 +2377,44 @@ section.review .review-layouter .review-form {
}
section.review .review-layouter .review-form .heading {
margin-top: 10px;
color: #242424;
font-weight: 600;
}
section.review .review-layouter .review-form .heading .btn.btn-primary.right {
section.review .review-layouter .review-form .heading .right {
float: right;
margin-top: -10px;
}
section.review .review-layouter .review-form .rating {
margin-top: 25px;
color: #A5A5A5;
}
section.review .review-layouter .review-form .rating span {
display: inline;
}
section.review .review-layouter .review-form .stars {
width: 270px;
display: inline-block;
}
section.review .review-layouter .review-form .stars label.star {
font-size: 36px;
section.review .review-layouter .review-form .rating label.star {
font-size: 25px;
color: #d4d4d4;
-webkit-transition: all .2s;
transition: all .2s;
}
section.review .review-layouter .review-form .stars label.star:before {
section.review .review-layouter .review-form .rating label.star:before {
content: '\2605';
}
section.review .review-layouter .review-form .write-review {
margin-top: 25px;
section.review .review-layouter .review-form .write-review label {
color: #A5A5A5;
font-size: 16px;
}
section.review .review-layouter .review-form .write-review .control-group {
margin-bottom: 0px;
}
section.review .review-layouter .review-form .write-review .control-group textarea {
section.review .review-layouter .review-form .write-review textarea {
margin-top: 5px;
border: 2px solid #C7C7C7;
color: #A5A5A5;
border-radius: 3px;
width: 600px;
width: 90%;
height: 120px;
}
section.review .review-layouter .review-form .submit-button {
margin-top: 10px;
}
section.review .review-layouter .review-form .submit-button button {
background: #0031F0;
font-size: 14px;
color: #F2F2F2;
text-align: center;
width: 120px;
height: 38px;
border: none;
}
section.review .review-layouter .review-form .review-detail {
height: 150px;
border: 1px solid firebrick;
@ -2495,6 +2444,122 @@ section.review .review-layouter .review-form .review-detail .rating-calculate .p
border: 1px solid blue;
}
section.review .review-layouter .ratings-reviews {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
}
section.review .review-layouter .ratings-reviews .left-side {
padding: 40px 20px 40px 20px;
width: 50%;
}
section.review .review-layouter .ratings-reviews .left-side .rate {
font-size: 34px;
}
section.review .review-layouter .ratings-reviews .left-side .stars.icon {
height: 16px;
width: 16px;
}
section.review .review-layouter .ratings-reviews .right-side {
width: 50%;
}
section.review .review-layouter .ratings-reviews .right-side .rater {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding-top: 5px;
width: 100%;
}
section.review .review-layouter .ratings-reviews .right-side .rater .star-name {
margin-right: 5px;
}
section.review .review-layouter .ratings-reviews .right-side .rater .rate-number {
width: 15px;
}
section.review .review-layouter .ratings-reviews .right-side .rater .percentage {
width: 15%;
margin-right: 10px;
}
section.review .review-layouter .ratings-reviews .right-side .rater .percentage span {
float: right;
white-space: nowrap;
}
section.review .review-layouter .ratings-reviews .right-side .rater .line-bar {
height: 4px;
width: 65%;
margin-right: 5px;
background: #D8D8D8;
}
section.review .review-layouter .ratings-reviews .right-side .rater .line-bar .line-value {
background-color: #0031F0;
}
@media only screen and (max-width: 770px) {
section.review .category-breadcrumbs {
display: none;
}
section.review .review-layouter {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
section.review .review-layouter .product-info .product-image {
max-width: 280px;
margin-left: auto;
margin-right: auto;
}
section.review .review-layouter .review-form {
width: 100%;
margin-left: 0px;
}
section.review .review-layouter .review-form .heading .right {
margin-top: 50px;
}
section.review .review-layouter .review-form .ratings-reviews {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
width: 100%;
}
section.review .review-layouter .review-form .ratings-reviews .left-side {
width: 100%;
padding: 0px 0px 40px 0px;
margin-top: -50px;
}
section.review .review-layouter .review-form .ratings-reviews .right-side {
width: 100%;
}
section.review .review-layouter .review-form .ratings-reviews .right-side .rater .line-bar {
width: 100%;
}
section.review .review-layouter .review-form .ratings-reviews .right-side .rater .percentage {
width: 10%;
margin-right: 0px;
}
}
.auth-content {
padding-top: 15%;
padding-bottom: 15%;
@ -2651,6 +2716,80 @@ section.review .review-layouter .review-form .review-detail .rating-calculate .p
margin-bottom: 20px;
}
.account-content .account-layout .account-head .back-icon {
display: none;
}
@media only screen and (max-width: 770px) {
.account-content {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.account-content .account-side-menu {
display: none;
width: 100%;
border: none;
}
.account-content .account-side-menu li {
margin-left: 0%;
width: 100%;
}
.account-content .account-side-menu li a {
color: #242424;
}
.account-content .responsive-side-menu {
cursor: pointer;
padding-top: 13px;
display: block;
height: 46px;
border-bottom: 1px solid #C7C7C7;
border-top: 1px solid #C7C7C7;
}
.account-content .responsive-side-menu .right {
float: right;
}
.account-content .account-layout {
margin-left: 0%;
margin-top: 20px;
}
.account-content .account-layout .account-head {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
border-bottom: 1px solid #C7C7C7;
border-top: 1px solid #C7C7C7;
height: 46px;
}
.account-content .account-layout .account-head .back-icon {
display: block;
}
.account-content .account-layout .account-head span {
margin-top: 12px;
font-size: 18px;
}
.account-content .account-layout .account-head .horizontal-rule {
display: none;
}
.account-content .account-layout .account-table-content {
margin-top: 2%;
}
.account-content .account-layout .account-table-content table tbody tr {
display: grid;
margin-bottom: 20px;
}
.account-content .account-items-list, .account-content .edit-form {
margin-top: 20px;
}
.account-content .control-group .control {
width: 100%;
}
}
.account-table-content {
color: #242424;
margin-top: 1.4%;
@ -2735,6 +2874,10 @@ section.review .review-layouter .review-form .review-detail .rating-calculate .p
display: block;
}
.sale-container .sale-section .section-content .responsive-table {
display: none;
}
.sale-container .totals {
padding-top: 20px;
display: inline-block;
@ -2762,3 +2905,61 @@ section.review .review-layouter .review-form .review-detail .rating-calculate .p
.sale-container .totals .sale-summary tr.border td {
border-bottom: 1px solid #C7C7C7;
}
@media only screen and (max-width: 770px) {
.sale-container .sale-section .section-content .row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.sale-container .sale-section .section-content .row .title {
line-height: 20px;
}
.sale-container .sale-section .section-content .table {
display: none;
}
.sale-container .sale-section .section-content .responsive-table {
border: 1px solid #C7C7C7;
margin-top: 5px;
width: 100%;
display: block;
}
.sale-container .sale-section .section-content .responsive-table tbody td {
padding: 8px 5px;
}
.sale-container .sale-section .section-content .responsive-table tbody td:first-child {
width: 25%;
}
.sale-container .sale-section .section-content .responsive-table tbody td:last-child {
padding-left: 10px;
}
.sale-container .sale-section .section-content .totals .sale-summary {
width: 100%;
}
.sale-container .sale-section .section-content .totals .sale-summary tr td:nth-child(2) {
display: none;
}
.sale-container .sale-section .section-content .order-box-container {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.sale-container .sale-section .section-content .order-box-container .box {
width: 100%;
margin: 10px auto;
}
}
.cp-spinner {
margin-left: 46%;
margin-top: 35%;
margin-bottom: 35%;
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js",
"/css/shop.css": "/css/shop.css"
}
}