Merge pull request #249 from bagisto/rahul

Rahul
This commit is contained in:
JItendra Singh 2018-11-29 18:14:32 +05:30 committed by GitHub
commit 66639afb6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 53574 additions and 126 deletions

View File

@ -20,6 +20,7 @@
"konekt/concord": "^1.2", "konekt/concord": "^1.2",
"laravel/framework": "5.6.*", "laravel/framework": "5.6.*",
"laravel/tinker": "^1.0", "laravel/tinker": "^1.0",
"maatwebsite/excel": "3.1.x-dev",
"nwidart/laravel-modules": "^3.2", "nwidart/laravel-modules": "^3.2",
"prettus/l5-repository": "^2.6", "prettus/l5-repository": "^2.6",
"propaganistas/laravel-intl": "^2.0" "propaganistas/laravel-intl": "^2.0"

View File

@ -194,6 +194,9 @@ return [
//Laravel Intervention //Laravel Intervention
Intervention\Image\ImageServiceProvider::class, Intervention\Image\ImageServiceProvider::class,
//Laravel Maatwebsite
Maatwebsite\Excel\ExcelServiceProvider::class,
//Repository //Repository
Prettus\Repository\Providers\RepositoryServiceProvider::class, Prettus\Repository\Providers\RepositoryServiceProvider::class,
Konekt\Concord\ConcordServiceProvider::class, Konekt\Concord\ConcordServiceProvider::class,
@ -274,5 +277,6 @@ return [
'Core' => Webkul\Core\Facades\Core::class, 'Core' => Webkul\Core\Facades\Core::class,
'DbView' => Flynsarmy\DbBladeCompiler\Facades\DbView::class, 'DbView' => Flynsarmy\DbBladeCompiler\Facades\DbView::class,
'PDF' => Barryvdh\DomPDF\Facade::class, 'PDF' => Barryvdh\DomPDF\Facade::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
], ],
]; ];

112
config/excel.php Normal file
View File

@ -0,0 +1,112 @@
<?php
use Maatwebsite\Excel\Excel;
return [
'exports' => [
/*
|--------------------------------------------------------------------------
| Chunk size
|--------------------------------------------------------------------------
|
| When using FromQuery, the query is automatically chunked.
| Here you can specify how big the chunk should be.
|
*/
'chunk_size' => 1000,
/*
|--------------------------------------------------------------------------
| Temporary path
|--------------------------------------------------------------------------
|
| When exporting files, we use a temporary file, before storing
| or downloading. Here you can customize that path.
|
*/
'temp_path' => sys_get_temp_dir(),
/*
|--------------------------------------------------------------------------
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
*/
'pre_calculate_formulas' => false,
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV exports.
|
*/
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => false,
'include_separator_line' => false,
'excel_compatibility' => false,
],
],
'imports' => [
'read_only' => true,
'heading_row' => [
/*
|--------------------------------------------------------------------------
| Heading Row Formatter
|--------------------------------------------------------------------------
|
| Configure the heading row formatter.
| Available options: none|slug|custom
|
*/
'formatter' => 'slug',
],
],
/*
|--------------------------------------------------------------------------
| Extension detector
|--------------------------------------------------------------------------
|
| Configure here which writer type should be used when
| the package needs to guess the correct type
| based on the extension alone.
|
*/
'extension_detector' => [
'xlsx' => Excel::XLSX,
'xlsm' => Excel::XLSX,
'xltx' => Excel::XLSX,
'xltm' => Excel::XLSX,
'xls' => Excel::XLS,
'xlt' => Excel::XLS,
'ods' => Excel::ODS,
'ots' => Excel::ODS,
'slk' => Excel::SLK,
'xml' => Excel::XML,
'gnumeric' => Excel::GNUMERIC,
'htm' => Excel::HTML,
'html' => Excel::HTML,
'csv' => Excel::CSV,
'tsv' => Excel::TSV,
/*
|--------------------------------------------------------------------------
| PDF Extension
|--------------------------------------------------------------------------
|
| Configure here which Pdf driver should be used by default.
| Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
|
*/
'pdf' => Excel::DOMPDF,
],
];

View File

@ -25,18 +25,18 @@ class CustomerDataGrid
return DataGrid::make([ return DataGrid::make([
'name' => 'Customer', 'name' => 'Customer',
'table' => 'customers', 'table' => 'customers as cus',
'select' => 'id', 'select' => 'cus.id',
'perpage' => 10, 'perpage' => 10,
'aliased' => true, //use this with false as default and true in case of joins 'aliased' => true, //use this with false as default and true in case of joins
'massoperations' =>[ 'massoperations' =>[
// [ [
// 'route' => route('admin.datagrid.delete'), 'route' => route('admin.datagrid.delete'),
// 'method' => 'DELETE', 'method' => 'DELETE',
// 'label' => 'Delete', 'label' => 'Delete',
// 'type' => 'button', //select || button only 'type' => 'button', //select || button only
// ], ],
], ],
'actions' => [ 'actions' => [
@ -54,13 +54,19 @@ class CustomerDataGrid
], ],
'join' => [ 'join' => [
[
'join' => 'leftjoin',
'table' => 'customer_groups as cg',
'primaryKey' => 'cus.customer_group_id',
'condition' => '=',
'secondaryKey' => 'cg.id',
]
], ],
//use aliasing on secodary columns if join is performed //use aliasing on secodary columns if join is performed
'columns' => [ 'columns' => [
[ [
'name' => 'id', 'name' => 'cus.id',
'alias' => 'ID', 'alias' => 'ID',
'type' => 'number', 'type' => 'number',
'label' => 'ID', 'label' => 'ID',
@ -78,10 +84,10 @@ class CustomerDataGrid
'label' => 'Email', 'label' => 'Email',
'sortable' => false, 'sortable' => false,
], [ ], [
'name' => 'customer_group_id', 'name' => 'cg.name',
'alias' => 'CustomerGroupId', 'alias' => 'CustomerGroupName',
'type' => 'number', 'type' => 'string',
'label' => 'Group ID', 'label' => 'Group Name',
'sortable' => false, 'sortable' => false,
], ],
], ],
@ -89,7 +95,7 @@ class CustomerDataGrid
//don't use aliasing in case of filters //don't use aliasing in case of filters
'filterable' => [ 'filterable' => [
[ [
'column' => 'id', 'column' => 'cus.id',
'alias' => 'ID', 'alias' => 'ID',
'type' => 'number', 'type' => 'number',
'label' => 'ID', 'label' => 'ID',

View File

@ -22,6 +22,7 @@ class Handler extends ExceptionHandler
*/ */
public function render($request, Exception $exception) public function render($request, Exception $exception)
{ {
if ($exception instanceof HttpException) { if ($exception instanceof HttpException) {
$statusCode = $exception->getStatusCode(); $statusCode = $exception->getStatusCode();
if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false) { if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false) {
@ -53,27 +54,26 @@ class Handler extends ExceptionHandler
return response()->view('shop::errors.500', [], 500); return response()->view('shop::errors.500', [], 500);
} }
} }
} else if ($exception instanceof ModelNotFoundException) { } else if ($exception instanceof \ModelNotFoundException) {
if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false){ if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false){
return response()->view('admin::errors.404', [], 404); return response()->view('admin::errors.404', [], 404);
}else { }else {
return response()->view('shop::errors.404', [], 404); return response()->view('shop::errors.404', [], 404);
} }
} else if ($exception instanceof PDOException) { } else if ($exception instanceof \PDOException) {
if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false){ if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false){
return response()->view('admin::errors.500', [], 500); return response()->view('admin::errors.500', [], 500);
} else { } else {
return response()->view('shop::errors.500', [], 500); return response()->view('shop::errors.500', [], 500);
} }
} }
// else if ($exception instanceof ErrorException) { // else if ($exception instanceof \ErrorException) {
// if(strpos($_SERVER['REQUEST_URI'], 'admin') !== false){ // if(strpos($_SERVER['REQUEST_URI'], 'admin') !== false){
// return response()->view('admin::errors.500', [], 500); // return response()->view('admin::errors.500', [], 500);
// }else { // }else {
// return response()->view('shop::errors.500', [], 500); // return response()->view('shop::errors.500', [], 500);
// } // }
// } // }
return parent::render($request, $exception); return parent::render($request, $exception);

View File

@ -0,0 +1,53 @@
<?php
namespace Webkul\Admin\Exports;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
/**
* DataGridExport class
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class DataGridExport implements FromView, ShouldAutoSize
{
/**
* DataGrid instance
*
* @var mixed
*/
public $gridData;
/**
* Create a new instance.
*
* @param mixed DataGrid
* @return void
*/
public function __construct($gridData)
{
$this->gridData = $gridData;
}
public function view(): View
{
$results = $this->gridData->render();
$header = [];
foreach($results->columns as $col) {
$header[] = $col->label;
}
return view('admin::export.export', [
'results' => $this->gridData->render()->results,
'columns' => $this->gridData->render()->columns,
'header' => $header
]);
}
}

View File

@ -9,6 +9,10 @@ use Webkul\Customer\Repositories\CustomerRepository as Customer;
use Webkul\Customer\Repositories\CustomerGroupRepository as CustomerGroup; use Webkul\Customer\Repositories\CustomerGroupRepository as CustomerGroup;
use Webkul\Core\Repositories\ChannelRepository as Channel; use Webkul\Core\Repositories\ChannelRepository as Channel;
use Webkul\Admin\DataGrids\CustomerDataGrid as CustomerDataGrid;
use Webkul\Admin\Exports\DataGridExport;
use Excel;
/** /**
* Customer controlller * Customer controlller
* *
@ -45,23 +49,36 @@ class CustomerController extends Controller
*/ */
protected $channel; protected $channel;
/**
* CustomerDataGrid object
*
* @var array
*/
protected $customerDataGrid;
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
* @param Webkul\Customer\Repositories\CustomerRepository as customer; * @param Webkul\Customer\Repositories\CustomerRepository as customer;
* @param Webkul\Customer\Repositories\CustomerGroupRepository as customerGroup; * @param Webkul\Customer\Repositories\CustomerGroupRepository as customerGroup;
* @param Webkul\Core\Repositories\ChannelRepository as Channel; * @param Webkul\Core\Repositories\ChannelRepository as Channel;
* @param Webkul\Admin\DataGrids\CustomerDataGrid as customerDataGrid;
* @return void * @return void
*/ */
public function __construct(Customer $customer, CustomerGroup $customerGroup, Channel $channel ) public function __construct(Customer $customer, CustomerGroup $customerGroup, Channel $channel, CustomerDataGrid $customerDataGrid)
{ {
$this->_config = request('_config'); $this->_config = request('_config');
$this->middleware('admin');
$this->customer = $customer; $this->customer = $customer;
$this->customerGroup = $customerGroup; $this->customerGroup = $customerGroup;
$this->channel = $channel; $this->channel = $channel;
$this->customerDataGrid = $customerDataGrid;
} }
/** /**
@ -173,4 +190,15 @@ class CustomerController extends Controller
return redirect()->back(); return redirect()->back();
} }
/**
* function to export datagrid
*
*/
public function export()
{
$data = $this->customerDataGrid;
return Excel::download(new DataGridExport($data), 'customers.xlsx');
}
} }

View File

@ -39,6 +39,8 @@ class CustomerGroupController extends Controller
{ {
$this->_config = request('_config'); $this->_config = request('_config');
$this->middleware('admin');
$this->customerGroup = $customerGroup; $this->customerGroup = $customerGroup;
} }

View File

@ -66,6 +66,9 @@ Route::group(['middleware' => ['web']], function () {
Route::get('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@destroy')->name('admin.customer.delete'); Route::get('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@destroy')->name('admin.customer.delete');
//DataGrid Export
Route::get('customer-export', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@export')->name('admin.customer.export');
Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[ Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[
'view' => 'admin::customers.review.index' 'view' => 'admin::customers.review.index'
])->name('admin.customer.review.index'); ])->name('admin.customer.review.index');

View File

@ -531,7 +531,8 @@ return [
'channel_name' => 'Channel Name', 'channel_name' => 'Channel Name',
'state' => 'State', 'state' => 'State',
'select-state' => 'Select a region, state or province.', 'select-state' => 'Select a region, state or province.',
'country' => 'Country' 'country' => 'Country',
'export' => 'Export'
], ],
'reviews' => [ 'reviews' => [
'title' => 'Reviews', 'title' => 'Reviews',

View File

@ -15,9 +15,14 @@
<a href="{{ route('admin.customer.create') }}" class="btn btn-lg btn-primary"> <a href="{{ route('admin.customer.create') }}" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.customers.add-title') }} {{ __('admin::app.customers.customers.add-title') }}
</a> </a>
<a href="{{ route('admin.customer.export') }}" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.customers.export') }}
</a>
</div> </div>
</div> </div>
<div class="page-content"> <div class="page-content">
@inject('customer','Webkul\Admin\DataGrids\CustomerDataGrid') @inject('customer','Webkul\Admin\DataGrids\CustomerDataGrid')
{!! $customer->render() !!} {!! $customer->render() !!}

View File

@ -0,0 +1,18 @@
<table>
<thead>
<tr>
@foreach($header as $col)
<th> {{ $col}} </th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($results as $result)
<tr>
@foreach ($columns as $column)
<td class="">{!! $column->render($result) !!}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>

View File

@ -1,8 +1,8 @@
const { mix } = require("laravel-mix"); const { mix } = require("laravel-mix");
require("laravel-mix-merge-manifest"); require("laravel-mix-merge-manifest");
var publicPath = 'publishable/assets'; // var publicPath = 'publishable/assets';
// var publicPath = "../../../public/vendor/webkul/admin/assets"; var publicPath = "../../../public/vendor/webkul/admin/assets";
mix.setPublicPath(publicPath).mergeManifest(); mix.setPublicPath(publicPath).mergeManifest();
mix.disableNotifications(); mix.disableNotifications();

View File

@ -55,7 +55,7 @@ class ProductReviewRepository extends Repository
{ {
$customerId = auth()->guard('customer')->user()->id; $customerId = auth()->guard('customer')->user()->id;
$reviews = $this->model->where(['customer_id'=> $customerId, 'status' => 'approved'])->with('product')->get(); $reviews = $this->model->where(['customer_id'=> $customerId])->with('product')->get();
return $reviews; return $reviews;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,16 @@
{ {
<<<<<<< HEAD
"/js/shop.js": "/js/shop.js",
"/css/shop.css": "/css/shop.css"
}
=======
<<<<<<< HEAD
"/js/shop.js": "/js/shop.js",
"/css/shop.css": "/css/shop.css"
}
=======
"/js/shop.js": "/js/shop.js?id=c6ba9f43bd31f175a665", "/js/shop.js": "/js/shop.js?id=c6ba9f43bd31f175a665",
"/css/shop.css": "/css/shop.css?id=2a9e3addb8dd8df86f03" "/css/shop.css": "/css/shop.css?id=2a9e3addb8dd8df86f03"
} }
>>>>>>> 2a2b1e8ec4f3e110fca0b4926f090ed506b81ce5
>>>>>>> master

View File

@ -11,4 +11,15 @@ $disc-price: #FF6472;
$danger-color: #FF6472; $danger-color: #FF6472;
$disc-price-pro: #A5A5A5; $disc-price-pro: #A5A5A5;
$other-font-color: #5E5E5E; $other-font-color: #5E5E5E;
$title-color: #8E8E8E;
$address-card-border-color: #E8E8E8;
$bold-color: #3A3A3A;
$sticker-color: #2ED04C;
$stock-color: #4CAF50;
$rating-color: #FC6868;
$star-color: #d4d4d4;
$error-color: #ff5656;
$line-bar-color: #D8D8D8;
$btn-background-color: #fff;
$info-color: #204d74;
//shop variables ends here //shop variables ends here

View File

@ -148,7 +148,7 @@ input {
//components //components
.bold { .bold {
font-weight: bold; font-weight: bold;
color: #3A3A3A; color: $bold-color;
} }
/* The container */ /* The container */
@ -178,7 +178,7 @@ input {
height: 16px; height: 16px;
width: 16px; width: 16px;
background-color: white; background-color: white;
border: 2px solid #FF6472; border: 2px solid $disc-price;
border-radius: 50%; border-radius: 50%;
} }
/* Create the indicator (the dot/circle - hidden when not checked) */ /* Create the indicator (the dot/circle - hidden when not checked) */
@ -194,19 +194,10 @@ input {
width: 8px; width: 8px;
height: 8px; height: 8px;
border-radius: 50%; border-radius: 50%;
background: #FF6472; background: $disc-price;
} }
} }
/* Verify Email */
.verify-account {
width: 100%;
height: 30px;
background-color: $border-color;
line-height: 30px;
text-align: center;
}
/* Show the indicator (dot/circle) when checked */ /* Show the indicator (dot/circle) when checked */
.radio-container input:checked ~ .checkmark:after { .radio-container input:checked ~ .checkmark:after {
display: block; display: block;
@ -233,13 +224,13 @@ input {
} }
.regular-price { .regular-price {
color: #A5A5A5; color: $font-color-light;
text-decoration: line-through; text-decoration: line-through;
margin-right: 10px; margin-right: 10px;
} }
.special-price { .special-price {
color: #FF6472; color: $disc-price;
} }
} }
@ -374,7 +365,7 @@ input {
max-height: 350px; max-height: 350px;
max-width: 280px; max-width: 280px;
margin-bottom: 10px; margin-bottom: 10px;
background: #F2F2F2; background: $background-color;
img { img {
display: block; display: block;
@ -435,15 +426,15 @@ input {
text-transform: uppercase; text-transform: uppercase;
padding: 4px 13px; padding: 4px 13px;
font-size: 14px; font-size: 14px;
color: #fff; color: $btn-background-color;
box-shadow: 1px 1px 1px #cccccc; box-shadow: 1px 1px 1px #cccccc;
&.sale { &.sale {
background: #FF6472; background: $disc-price;
} }
&.new { &.new {
background: #2ED04C; background: $sticker-color;
} }
} }
} }
@ -600,13 +591,6 @@ input {
} }
} }
@media only screen and (max-width: 530px) {
.main-container-wrapper {
padding-left: 0px;
padding-right: 0px;
}
}
//slider styles //slider styles
section.slider-block { section.slider-block {
display: block; display: block;
@ -773,7 +757,7 @@ section.slider-block {
border-bottom-right-radius: 3px; border-bottom-right-radius: 3px;
button { button {
background: #fff; background: $btn-background-color;
border: 0; border: 0;
padding: 3px 5px; padding: 3px 5px;
} }
@ -927,7 +911,7 @@ section.slider-block {
} }
.dropdown-content .item-details{ .dropdown-content .item-details{
max-height: 125px; height: 75px;
} }
.item-details .item-name { .item-details .item-name {
@ -980,7 +964,7 @@ section.slider-block {
} }
li:last-child { li:last-child {
margin-right: 0px; margin-right: -2px;
} }
ul { ul {
@ -1145,7 +1129,6 @@ section.slider-block {
@media all and (max-width: 720px) { @media all and (max-width: 720px) {
.header { .header {
.currency-switcher { .currency-switcher {
display: none !important; display: none !important;
} }
@ -1245,7 +1228,7 @@ section.slider-block {
padding-top: 25px; padding-top: 25px;
a { a {
color: #242424; color: $font-color;
} }
li { li {
@ -1319,12 +1302,16 @@ section.slider-block {
width: 100%; width: 100%;
height: 120px; height: 120px;
font-size: 16px; font-size: 16px;
color: #A5A5A5; color: $font-color-light;
letter-spacing: -0.26px; letter-spacing: -0.26px;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
p {
padding: 0px 15px;
}
} }
//category page //category page
@ -1353,7 +1340,7 @@ section.slider-block {
.filter-attributes-title { .filter-attributes-title {
padding: 10px 40px 0 10px; padding: 10px 40px 0 10px;
color: #5E5E5E; color: $other-font-color;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
@ -1384,7 +1371,7 @@ section.slider-block {
li.item { li.item {
padding: 8px 0; padding: 8px 0;
color: #5E5E5E; color: $other-font-color;
.checkbox { .checkbox {
margin: 0; margin: 0;
@ -1426,6 +1413,7 @@ section.slider-block {
width: 100%; width: 100%;
float: none; float: none;
padding-right: 0px; padding-right: 0px;
margin-top: -25px !important;
} }
.category-block { .category-block {
@ -1657,7 +1645,6 @@ section.product-detail {
width: 100%; width: 100%;
max-height: 480px; max-height: 480px;
height: 100%; height: 100%;
box-shadow: 1px 1px 2px $border-color;
img { img {
width: 100%; width: 100%;
@ -1754,10 +1741,10 @@ section.product-detail {
.stock-status { .stock-status {
margin-bottom: 15px; margin-bottom: 15px;
font-weight: 600; font-weight: 600;
color: #FC6868; color: $rating-color;
&.active { &.active {
color: #4CAF50; color: $stock-color;
} }
} }
@ -1812,7 +1799,7 @@ section.product-detail {
// product pages responsive css start here // product pages responsive css start here
@media only screen and (max-width: 720px) { @media only screen and (max-width: 720px) {
section.product-detail div.layouter form { section.product-detail div.layouter .form-container {
flex-direction: column; flex-direction: column;
div.product-image-group { div.product-image-group {
@ -1856,6 +1843,15 @@ section.product-detail {
width: 480px; width: 480px;
} }
} }
.wrap {
flex-direction: row;
width: 100% !important;
}
}
.add-to-buttons {
width: 100%;
} }
} }
@ -1867,7 +1863,7 @@ section.product-detail {
} }
@media only screen and (max-width: 510px) { @media only screen and (max-width: 510px) {
section.product-detail div.layouter form { section.product-detail div.layouter .form-container {
div.product-image-group { div.product-image-group {
.product-hero-image img { .product-hero-image img {
width: 100% !important; width: 100% !important;
@ -1876,11 +1872,15 @@ section.product-detail {
} }
} }
@media only screen and (max-width: 510px) { @media only screen and (max-width: 480px) {
section.product-detail div.layouter form { section.product-detail div.layouter .form-container .details {
.details { margin-top: 0px;
margin-top: -90px;
} }
}
@media only screen and (max-width: 360px) {
section.product-detail div.layouter .form-container .details {
margin-top: -120px;
} }
} }
@ -2521,7 +2521,7 @@ section.review {
} }
.product-name a { .product-name a {
color: #242424; color: $font-color;
} }
.product-price { .product-price {
@ -2547,7 +2547,7 @@ section.review {
width: 49%; width: 49%;
.heading { .heading {
color: #242424; color: $font-color;
font-weight: 600; font-weight: 600;
.right { .right {
@ -2557,18 +2557,19 @@ section.review {
} }
.rating { .rating {
color: $font-color-light; color: $bold-color;
font-size: 15px;
.rating-title::after { .rating-title::after {
content: "*"; content: "*";
color: #FC6868; color: $rating-color;
font-weight: 700; font-weight: 700;
display: inline-block; display: inline-block;
} }
label.star { label.star {
font-size: 25px; font-size: 25px;
color: #d4d4d4; color: $star-color;
transition: all .2s; transition: all .2s;
} }
@ -2578,36 +2579,16 @@ section.review {
} }
.control-group { .control-group {
label {
color: $font-color-light;
font-size: 16px;
}
.control { .control {
width: 90%; width: 90%;
color: $font-color-light;
} }
} }
.control-error { .control-error {
color: #ff5656; color: $error-color;
font-size: 14px; font-size: 14px;
} }
.write-review {
label {
color: $font-color-light;
font-size: 16px;
}
textarea {
margin-top: 5px;
border: 2px solid $border-color;
color: $font-color-light;
border-radius: 3px;
width: 90%;
height: 120px;
}
}
.review-detail{ .review-detail{
height: 150px; height: 150px;
border: 1px solid firebrick; border: 1px solid firebrick;
@ -2689,10 +2670,10 @@ section.review {
width: calc(100% - 100px); width: calc(100% - 100px);
margin-right: 5px; margin-right: 5px;
margin-left: 5px; margin-left: 5px;
background: #D8D8D8; background: $line-bar-color;
.line-value { .line-value {
background-color: #0031F0; background-color: $brand-color;
} }
} }
} }
@ -2724,9 +2705,13 @@ section.review {
width: 100%; width: 100%;
margin-left: 0px; margin-left: 0px;
.heading .right { .heading {
margin-bottom: 70px;
.right {
margin-top: 50px; margin-top: 50px;
} }
}
.ratings-reviews { .ratings-reviews {
flex-direction: column; flex-direction: column;
@ -2750,7 +2735,6 @@ section.review {
} }
} }
} }
//review responsive css end here //review responsive css end here
@ -2778,7 +2762,7 @@ section.review {
border: 1px solid $border-color; border: 1px solid $border-color;
flex-direction: column; flex-direction: column;
max-width: 500px; max-width: 500px;
min-width: 380px; min-width: 320px;
padding: 25px; padding: 25px;
.login-text { .login-text {
@ -2844,7 +2828,7 @@ section.review {
text-align: center; text-align: center;
a { a {
color: #5E5E5E; color: $other-font-color;
} }
.icon { .icon {
@ -3095,13 +3079,13 @@ section.review {
} }
.sale-container { .sale-container {
color: #5E5E5E; color: $other-font-color;
.sale-section { .sale-section {
.secton-title { .secton-title {
font-size: 18px; font-size: 18px;
color: #8E8E8E; color: $title-color;
padding: 15px 0; padding: 15px 0;
border-bottom: 1px solid $border-color; border-bottom: 1px solid $border-color;
} }
@ -3109,7 +3093,7 @@ section.review {
.section-content { .section-content {
display: block; display: block;
padding: 20px 0; padding: 20px 0;
border-bottom: 1px solid #E8E8E8; border-bottom: 1px solid $address-card-border-color;
.row { .row {
display: block; display: block;
@ -3138,11 +3122,11 @@ section.review {
.box-title { .box-title {
padding: 10px 0; padding: 10px 0;
font-size: 18px; font-size: 18px;
color: #8E8E8E; color: $title-color;
} }
.box-content { .box-content {
color: #3A3A3A; color: $bold-color;
} }
} }
} }
@ -3161,7 +3145,7 @@ section.review {
padding-top: 20px; padding-top: 20px;
display: inline-block; display: inline-block;
width: 100%; width: 100%;
border-top: solid 1px #E8E8E8; border-top: solid 1px $address-card-border-color;
.sale-summary { .sale-summary {
height: 130px; height: 130px;
@ -3173,7 +3157,7 @@ section.review {
td { td {
padding: 5px 8px; padding: 5px 8px;
width: auto; width: auto;
color: #3A3A3A; color: $bold-color;
} }
&.bold { &.bold {
@ -3253,6 +3237,20 @@ section.review {
} }
} }
//verify account
.verify-account {
text-align: center;
background: $info-color;
width: 200px;
margin-right: auto;
margin-left: auto;
border-radius: 4px;
a {
color: $btn-background-color !important;
}
}
// css for loader // css for loader
.cp-spinner { .cp-spinner {
position: absolute; position: absolute;
@ -3269,3 +3267,493 @@ section.review {
} }
} }
//css for responsive error pages
@media only screen and (max-width: 720px) {
.error-container .wrapper {
flex-direction: column-reverse !important;
margin: 10px 0px 20px 0px !important;
align-items: start !important;
height: 100% !important;
}
}
/// rtl css start here
.rtl {
direction: rtl;
//header css start here
.header {
.header-top {
div.left-content {
ul.logo-container {
margin-right: 0px;
margin-left: 12px;
}
ul.search-container li.search-group {
.search-field {
border-left: none;
border-right: 2px solid $border-color;
padding-right: 12px;
padding-left: 0px;
}
.search-icon-wrapper {
border: 2px solid $border-color;
}
}
}
div.right-content {
.currency-switcher .dropdown-list {
left: 0px;
right: auto;
}
ul.cart-dropdown-container {
float: left;
margin-left: 0px;
li.cart-dropdown {
.cart-icon {
margin-right: 0px;
margin-left: 8px;
}
.dropdown-list {
left: 0px !important;
right: auto !important;
}
.dropdown-container .dropdown-content .item img {
margin-right: 0px;
}
}
}
}
}
.header-bottom {
.nav > li {
float: right;
margin-right: 0px;
margin-left: 1px;
}
.nav a {
padding: 0.8em 0.5em 0.8em 0.3em !important;
}
.nav li a > .icon {
transform: rotate(180deg);
}
.nav > li li:hover > ul {
left: unset !important;
right: 100% !important;
}
}
.search-responsive .search-content .right {
float: left;
}
}
.dropdown-list {
text-align: right;
&.bottom-right {
left: 0px;
right: auto;
}
}
@media only screen and (max-width: 720px) {
.header{
.header-top ul.right-responsive {
margin-left: 0px;
li {
margin: 0px;
&:last-child {
margin-right: 5px;
margin-left: -2px;
}
}
ul {
margin: 0px;
}
}
.header-bottom {
.nav > li {
float: none;
}
.nav li > .icon {
float: left;
transform: rotate(180deg);
}
.icon.icon-arrow-down {
margin-left: 5px;
}
}
}
}
// header css end here
// slider start
section.slider-block div.slider-content div.slider-control {
left: 2%;
right: auto;
}
@media only screen and (max-width: 720px) {
section.slider-block div.slider-content div.slider-control {
left: 0%;
}
}
//slider end
// product card
.main-container-wrapper .product-card .sticker {
left: auto;
right: 10px;
}
.main-container-wrapper .product-card .cart-wish-wrap .addtocart {
margin-right: 0px;
margin-left: 10px;
}
// product card end
// product page start here
section.product-detail div.layouter .form-container {
div.product-image-group {
margin-right: 0px;
margin-left: 30px;
}
div .thumb-list {
margin-left: 4px;
margin-right: 0px;
}
.details .product-ratings .total-reviews {
margin-left: 0px;
margin-right: 15px;
}
}
@media only screen and (max-width: 720px) {
section.product-detail div.layouter .form-container div.product-image-group {
margin-right: 0px;
margin-left: 0px;
}
}
// product page end here
//category page start here
.main .category-container .layered-filter-wrapper, .main .category-container .responsive-layred-filter {
padding-right: 0px;
padding-left: 20px;
}
.main .top-toolbar {
.pager {
float: left;
.view-mode {
margin-right: 0px;
margin-left: 20px;
}
.sorter {
margin-right: 0px;
margin-left: 10px;
}
label {
margin-right: 0px;
margin-left: 5px;
}
}
.page-info {
float: right;
}
}
//category page end here
//product review page
section.review .review-layouter .review-form {
margin-left: 0px;
margin-right: 20px;
.heading .right {
float: left;
}
.ratings-reviews .right-side .rater {
.star-name {
margin-right: 0px;
margin-left: 5px;
}
}
}
@media only screen and (max-width: 770px) {
section.review .review-layouter .review-form {
margin-right: 0px;
}
}
//product review page end here
//add to cart start here
section.cart .cart-content {
.left-side {
width: 70%;
float: right;
.misc-controls a.link {
margin-left: 15px;
margin-right: 0px;
}
}
.right-side {
width: 30%;
padding-right: 40px;
padding-left: 0px;
}
}
.order-summary .item-detail, .payble-amount {
label.right {
float: left;
}
}
.item div {
margin-left: 15px;
margin-right: 0px !important;
}
.cart-item-list .item .item-details .misc {
div.qty-text {
margin-right: 0px;
margin-left: 10px;
}
input.box {
margin-right: 0px;
margin-left: 30px;
}
.remove {
margin-left: 30px;
margin-right: 0px;
}
}
@media only screen and (max-width: 770px) {
section.cart .cart-content {
.left-side {
width: 100%;
float: none;
}
.right-side {
width: 100%;
padding-right: 0px;
}
}
}
//add to cart page end here
//checkout process page start here
.checkout-process {
.col-right {
padding-left: 0px;
padding-right: 40px;
}
.col-main {
padding-left: 40px;
padding-right: 0px;
ul.checkout-steps li span {
margin-right: 7px;
margin-left: 0px;
}
.step-content {
.form-header {
h1 {
float: right;
}
.btn {
float: left;
}
}
.payment-methods .control-info {
margin-right: 28px;
margin-left: 0px;
}
.order-description, .address {
.pull-left, .billing-address {
float: right !important;
}
.pull-right, .shipping-address {
float: left !important;
}
}
}
}
}
.checkbox {
margin: 10px 0px 5px 5px;
}
.radio {
margin: 10px 0px 5px 5px;
.radio-view {
margin-left: 5px;
margin-right: 0px;
}
input {
right: 0;
left: auto;
}
}
@media only screen and (max-width: 770px) {
.checkout-process .col-main {
padding-left: 0px;
}
}
//checkout process page end here
//customer page start here
.account-content {
.account-layout {
margin-left: 0px;
margin-right: 40px;
}
.account-side-menu li {
margin-right: 5%;
margin-left: 0%;
.icon {
left: 12px;
right: auto;
transform: rotate(180deg);
}
}
}
.account-head .account-action {
float: left;
}
.account-item-card {
.media-info .info {
margin-right: 20px;
margin-left: 0px;
}
.operations a span {
float: left;
}
}
.table table {
text-align: right;
}
.sale-container {
.totals .sale-summary {
float: left;
}
.sale-section .section-content .order-box-container {
display: flex;
}
}
@media only screen and (max-width: 770px) {
.account-content {
.account-layout {
margin-right: 0px;
.account-head {
.account-action {
margin-right: 15px;
margin-left: 0px;
}
.back-icon {
transform: rotate(180deg);
margin-bottom: 10px;
}
}
}
.responsive-side-menu .right {
float: left;
}
.account-side-menu li {
margin-right: 0%;
}
}
}
//customer page end here
// footer start
.footer .footer-content .footer-list-container .list-container .list-group li span.icon {
margin-left: 5px;
margin-right: 0px;
}
@media all and (max-width: 720px) {
.footer {
padding-right: 15px;
padding-left: 10%;
.footer-list-container {
padding-right: 0px !important;
}
}
}
// footer end
// css for loader
.cp-spinner {
position: absolute;
left: auto;
right: 26%;
margin-top: calc(20% - 80px);
}
@media only screen and (max-width: 720px) {
.cp-spinner {
right: 50%;
margin-right: -24px;
left: auto;
}
}
}
/// rtl css end here

View File

@ -176,9 +176,13 @@
<div class="search-responsive mt-10"> <div class="search-responsive mt-10">
<form role="search" action="{{ route('shop.search.index') }}" method="GET" style="display: inherit;"> <form role="search" action="{{ route('shop.search.index') }}" method="GET" style="display: inherit;">
<div class="search-content"> <div class="search-content">
<button class="" style="background: none; border: none; padding: 0px;">
<i class="icon icon-search mt-10"></i> <i class="icon icon-search mt-10"></i>
</button>
<input type="search" name="term" class="search mt-5"> <input type="search" name="term" class="search mt-5">
<button class="" style="background: none; float: right; border: none; padding: 0px;">
<i class="icon icon-menu-back right mt-10"></i> <i class="icon icon-menu-back right mt-10"></i>
</button>
</div> </div>
</form> </form>

View File

@ -75,7 +75,6 @@
<div class="control-error" v-if="errors.has('rating')">@{{ errors.first('rating') }}</div> <div class="control-error" v-if="errors.has('rating')">@{{ errors.first('rating') }}</div>
</div> </div>
<div class="control-group mt-20" :class="[errors.has('title') ? 'has-error' : '']"> <div class="control-group mt-20" :class="[errors.has('title') ? 'has-error' : '']">
<label for="title" class="required"> <label for="title" class="required">
{{ __('shop::app.reviews.title') }} {{ __('shop::app.reviews.title') }}
@ -84,16 +83,14 @@
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span> <span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
</div> </div>
<div class="write-review mt-20"> <div class="control-group" :class="[errors.has('comment') ? 'has-error' : '']">
<div class="control-group" :class="[errors.has('title') ? 'has-error' : '']"> <label for="comment" class="required">
<label for="review" class="required">
{{ __('admin::app.customers.reviews.comment') }} {{ __('admin::app.customers.reviews.comment') }}
</label> </label>
<textarea type="text" class="control" name="comment" v-validate="'required'" value="{{ old('comment') }}"> <textarea type="text" class="control" name="comment" v-validate="'required'" value="{{ old('comment') }}">
</textarea> </textarea>
<span class="control-error" v-if="errors.has('comment')">@{{ errors.first('comment') }}</span> <span class="control-error" v-if="errors.has('comment')">@{{ errors.first('comment') }}</span>
</div> </div>
</div>
<button type="submit" class="btn btn-lg btn-primary"> <button type="submit" class="btn btn-lg btn-primary">
{{ __('shop::app.reviews.submit') }} {{ __('shop::app.reviews.submit') }}

View File

@ -129,8 +129,6 @@
</div> </div>
@endforeach @endforeach
<a href="{{ route('shop.reviews.index', $product->url_key) }}" class="view-all">View All</a>
</div> </div>
</div> </div>

View File

@ -1,8 +1,8 @@
const { mix } = require("laravel-mix"); const { mix } = require("laravel-mix");
require("laravel-mix-merge-manifest"); require("laravel-mix-merge-manifest");
var publicPath = 'publishable/assets'; // var publicPath = 'publishable/assets';
// var publicPath = "../../../public/themes/default/assets"; var publicPath = "../../../public/themes/default/assets";
mix.setPublicPath(publicPath).mergeManifest(); mix.setPublicPath(publicPath).mergeManifest();
mix.disableNotifications(); mix.disableNotifications();