checkout process

This commit is contained in:
rahul shukla 2018-09-13 16:40:45 +05:30
commit 1be2127591
37 changed files with 1327 additions and 910 deletions

View File

@ -2,16 +2,50 @@
return [
[
'code' => 'flatrate',
'title' => 'Flat Rate',
'flatrate' => [
[
'code' => 'flatrate_one',
'title' => 'Flatrate One',
'name' => 'fixed 20% discount for today',
'description' => 'this is a flat rate',
'status' => '1',
'price' => '10',
'type' => [
'per_unit' => 'Per Unit',
'per order' => 'Per Order',
],
'class' => 'Webkul\Shipping\Helper\Rate',
],
[
'code' => 'flatrate_two',
'title' => 'Flatrate Two',
'name' => 'fixed 50% discount till 10/10/2018',
'description' => 'this is a flat rate',
'status' => '1',
'price' => '100',
'type' => [
'per unit' => 'Per Unit',
'per order' => 'Per Order',
],
'class' => 'Webkul\Shipping\Helper\Rate',
],
[
'code' => 'flatrate_three',
'title' => 'Flatrate Three',
'name' => 'fixed 30% discount',
'description' => 'this is a flat rate',
'status' => '1',
'price' => '1000',
'type' => [
'per unit' => 'Per Unit',
'per order' => 'Per Order',
],
'class' => 'Webkul\Shipping\Helper\Rate',
]
]
]
?>

View File

@ -73,9 +73,9 @@
<div class="hide">
<accordian :title="'{{ __('admin::app.catalog.attributes.options') }}'" :active="true" :id="'options'">
<div slot="body">
<option-wrapper></option-wrapper>
</div>
</accordian>
</div>
@ -122,7 +122,7 @@
<option value="0">{{ __('admin::app.catalog.attributes.no') }}</option>
</select>
</div>
<div class="control-group">
<label for="value_per_locale">{{ __('admin::app.catalog.attributes.value_per_locale') }}</label>
<select class="control" id="value_per_locale" name="value_per_locale">
@ -130,7 +130,7 @@
<option value="1">{{ __('admin::app.catalog.attributes.yes') }}</option>
</select>
</div>
<div class="control-group">
<label for="value_per_channel">{{ __('admin::app.catalog.attributes.value_per_channel') }}</label>
<select class="control" id="value_per_channel" name="value_per_channel">
@ -138,7 +138,7 @@
<option value="1">{{ __('admin::app.catalog.attributes.yes') }}</option>
</select>
</div>
<div class="control-group">
<label for="is_filterable">{{ __('admin::app.catalog.attributes.is_filterable') }}</label>
<select class="control" id="is_filterable" name="is_filterable">
@ -146,7 +146,7 @@
<option value="1">{{ __('admin::app.catalog.attributes.yes') }}</option>
</select>
</div>
<div class="control-group">
<label for="is_configurable">{{ __('admin::app.catalog.attributes.is_configurable') }}</label>
<select class="control" id="is_configurable" name="is_configurable">
@ -154,7 +154,7 @@
<option value="1">{{ __('admin::app.catalog.attributes.yes') }}</option>
</select>
</div>
<div class="control-group">
<label for="is_visible_on_front">{{ __('admin::app.catalog.attributes.is_visible_on_front') }}</label>
<select class="control" id="is_visible_on_front" name="is_visible_on_front">
@ -184,7 +184,7 @@
@foreach(Webkul\Core\Models\Locale::all() as $locale)
<th>{{ $locale->name . ' (' . $locale->code . ')' }}</th>
@endforeach
<th>{{ __('admin::app.catalog.attributes.position') }}</th>
@ -192,7 +192,7 @@
<th></th>
</tr>
</thead>
<tbody>
<tr v-for="row in optionRows">
<td>
@ -244,7 +244,7 @@
var optionWrapper = Vue.component('option-wrapper', {
template: '#options-template',
template: '#options-template',
data: () => ({
optionRowCount: 0,

View File

@ -0,0 +1,45 @@
<?php
namespace Webkul\Cart\Http\Controllers;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Auth;
/**
* Chekout controller for the customer
* and guest for placing order
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class CheckoutController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
protected $_config;
public function __construct()
{
// $this->middleware(['customer', 'guest']);
$this->_config = request('_config');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$customer_id = auth()->guard('customer')->user();
return view($this->_config['view'],compact('customer_id'));
}
}

View File

@ -11,7 +11,7 @@ class CartServiceProvider extends ServiceProvider
public function boot(Router $router)
{
$router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
// $router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
$this->loadMigrationsFrom(__DIR__ . '/../Database/migrations');
}

View File

@ -132,6 +132,22 @@ class Product extends Model
return $this->attribute_family->custom_attributes->pluck('code')->contains($attribute);
}
/**
* @param string $key
*
* @return bool
*/
public function isSaleable()
{
if($this->status) {
if($this->inventories->sum('qty')) {
return true;
}
}
return false;
}
/**
* Get an attribute from the model.
*

View File

@ -0,0 +1,228 @@
<?php
namespace Webkul\Product\Product;
use Webkul\Attribute\Repositories\AttributeOptionRepository as AttributeOption;
use Webkul\Product\Product\Gallery;
use Webkul\Product\Product\Price;
class ConfigurableOption extends AbstractProduct
{
/**
* AttributeOptionRepository object
*
* @var array
*/
protected $attributeOption;
/**
* Gallery object
*
* @var array
*/
protected $gallery;
/**
* Price object
*
* @var array
*/
protected $price;
/**
* Create a new controller instance.
*
* @param Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOption
* @param Webkul\Product\Product\Gallery $gallery
* @param Webkul\Product\Product\Price $price
* @return void
*/
public function __construct(
AttributeOption $attributeOption,
Gallery $gallery,
Price $price
)
{
$this->attributeOption = $attributeOption;
$this->gallery = $gallery;
$this->price = $price;
}
/**
* Returns the allowed variants
*
* @param Product $product
* @return float
*/
public function getAllowProducts($product)
{
$variants = [];
foreach ($product->variants as $variant) {
if ($variant->isSaleable()) {
$variants[] = $variant;
}
}
return $variants;
}
/**
* Returns the allowed variants JSON
*
* @param Product $product
* @return float
*/
public function getConfigurationConfig($product)
{
$options = $this->getOptions($product, $this->getAllowProducts($product));
$config = [
'attributes' => $this->getAttributesData($product, $options),
'index' => isset($options['index']) ? $options['index'] : [],
'variant_prices' => $this->getVariantPrices($product),
'variant_images' => $this->getVariantImages($product),
'chooseText' => trans('shop::app.products.choose-option')
];
return $config;
}
/**
* Get allowed attributes
*
* @param Product $product
* @return array
*/
public function getAllowAttributes($product)
{
return $product->super_attributes;
}
/**
* Get Configurable Product Options
*
* @param Product $currentProduct
* @param array $allowedProducts
* @return array
*/
public function getOptions($currentProduct, $allowedProducts)
{
$options = [];
$allowAttributes = $this->getAllowAttributes($currentProduct);
foreach ($allowedProducts as $product) {
$productId = $product->id;
foreach ($allowAttributes as $productAttribute) {
$productAttributeId = $productAttribute->id;
$attributeValue = $product->{$productAttribute->code};
$options[$productAttributeId][$attributeValue][] = $productId;
$options['index'][$productId][$productAttributeId] = $attributeValue;
}
}
return $options;
}
/**
* Get product attributes
*
* @param Product $product
* @param array $options
* @return array
*/
public function getAttributesData($product, array $options = [])
{
$defaultValues = [];
$attributes = [];
foreach ($product->super_attributes as $attribute) {
$attributeOptionsData = $this->getAttributeOptionsData($attribute, $options);
if ($attributeOptionsData) {
$attributeId = $attribute->id;
$attributes[] = [
'id' => $attributeId,
'code' => $attribute->code,
'label' => $attribute->name,
'options' => $attributeOptionsData
];
}
}
return $attributes;
}
/**
* @param Attribute $attribute
* @param array $options
* @return array
*/
protected function getAttributeOptionsData($attribute, $options)
{
$attributeOptionsData = [];
foreach ($attribute->options as $attributeOption) {
$optionId = $attributeOption->id;
if(isset($options[$attribute->id][$optionId])) {
$attributeOptionsData[] = [
'id' => $optionId,
'label' => $attributeOption->label,
'products' => $options[$attribute->id][$optionId]
];
}
}
return $attributeOptionsData;
}
/**
* Get product prices for configurable variations
*
* @param Product $product
* @return array
*/
protected function getVariantPrices($product)
{
$prices = [];
foreach ($this->getAllowProducts($product) as $variant) {
$prices[$variant->id] = [
'regular_price' => $variant->price,
'final_price' => $this->price->getMinimalPrice($variant),
];
}
return $prices;
}
/**
* Get product images for configurable variations
*
* @param Product $product
* @return array
*/
protected function getVariantImages($product)
{
$images = [];
foreach ($this->getAllowProducts($product) as $variant) {
$images[$variant->id] = $this->gallery->getImages($variant);
}
return $images;
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace Webkul\Product\Product;
use Webkul\Attribute\Repositories\AttributeOptionRepository as AttributeOption;
class Gallery extends AbstractProduct
{
/**
* Retrieve collection of gallery images
*
* @param Product $product
* @return array
*/
public function getImages($product)
{
$images[] = [
'small_image_url' => '',
'medium_image_url' => '',
'large_image_url' => '',
];
return $images;
}
}

View File

@ -78,7 +78,7 @@ class Price extends AbstractProduct
public function getSpecialPrice($product)
{
if($this->haveSpecialPrice($product)) {
return $product->special_price;
return $product->special_price;
} else {
return $product->price;
}

View File

@ -4,6 +4,17 @@ namespace Webkul\Product\Product;
class Review extends AbstractProduct
{
/**
* Returns the product's avg rating
*
* @param Product $product
* @return float
*/
public function getReviews($product)
{
return $product->reviews()->where('status', 'approved');
}
/**
* Returns the product's avg rating
*
@ -12,7 +23,7 @@ class Review extends AbstractProduct
*/
public function getAverageRating($product)
{
return round($product->reviews->where('status',1)->average('rating'));
return number_format(round($product->reviews()->where('status', 'approved')->average('rating'), 2), 1);
}
/**
@ -23,7 +34,7 @@ class Review extends AbstractProduct
*/
public function getTotalReviews($product)
{
return $product->reviews()->where('status',1)->count();
return $product->reviews()->where('status', 'approved')->count();
}
/**

View File

@ -0,0 +1,23 @@
<?php
namespace Webkul\Shipping\Carrier;
use Webkul\Shipping\Contracts\AbstractShipping;
use Config;
/**
* Class Rate.
*
*/
class FlatRate extends AbstractShipping
{
public function calculate()
{
$all = Config::get('carrier');
return $all;
}
}

View File

@ -3,15 +3,13 @@
namespace Webkul\Shipping\Contracts;
/**
* Interface ShippingInterface
* Abstract class Shipping
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
*/
interface ShippingInterface
abstract class AbstractShipping
{
public function calculate();
abstract public function calculate();
}

View File

@ -0,0 +1,31 @@
<?php
namespace Webkul\Shipping\Helper;
use Webkul\Shipping\Carrier\FlatRate;
/**
* Class Rate.
*
*/
class Rate extends FlatRate
{
public function collectRates()
{
$data = $this->calculate();
$rates =[];
foreach($data as $rate){
foreach($rate as $flat){
$rates[$flat['name']] = $flat['price'];
}
}
return $rates;
}
}

View File

@ -1,21 +0,0 @@
<?php
namespace App\Shipping\Helpers;
use Webkul\Shipping\Contracts\ShippingInterface;
/**
* Class Rate.
*
* @package namespace App\Criteria;
*/
class Rate implements ShippingInterface
{
public function calculate()
{
return 'gg';
}
}

View File

@ -16,9 +16,13 @@ class ShippingServiceProvider extends ServiceProvider
public function boot(Router $router)
{
$router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
// $router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
$this->loadMigrationsFrom(__DIR__ . '/../Database/migrations');
// $this->loadMigrationsFrom(__DIR__ . '/../Database/migrations');
// include __DIR__ . '/../Http/routes.php';
// $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'shipping');
}
/**

View File

@ -10,10 +10,15 @@ Route::group(['middleware' => ['web']], function () {
'view' => 'shop::products.index'
]);
Route::get('/checkout', 'Webkul\Cart\Http\Controllers\CheckoutController@index')->defaults('_config', [
'view' => 'shop::customers.checkout.index'
])->name('shop.checkout');
/* dummy routes */
Route::view('/customer/order','shop::customers.account.orders.index');
Route::view('/customer/checkout','shop::customers.checkout.index');
// Route::view('/customer/checkout','shop::customers.checkout.index');
Route::view('/customer/signin','shop::customers.checkout.signin');
@ -22,6 +27,10 @@ Route::group(['middleware' => ['web']], function () {
Route::view('/customer/payment_method','shop::customers.checkout.payment-method');
Route::view('/customer/payment_complete','shop::customers.checkout.complete');
Route::view('/test','shop::index');
/* dummy routes ends here */

File diff suppressed because it is too large Load Diff

View File

@ -49,6 +49,9 @@ return [
'specification' => 'Specification',
'total-reviews' => ':total Reviews',
'by' => 'By :name',
'up-sell-title' => 'We found other products you might like!'
'up-sell-title' => 'We found other products you might like!',
'reviews-title' => 'Ratings & Reviews',
'write-review-btn' => 'Write Review',
'choose-option' => 'Choose an option'
]
];

View File

@ -1,92 +0,0 @@
<div class="checkout-process">
<div class="left-side">
<div class="checkout-menu">
<ul class="checkout-detail">
<li>
<div class="wrapper">
<div class="decorator active">
<img src="{{asset('themes/default/assets/images/address.svg')}}" />
</div>
<span>Information</span>
</div>
</li>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/shipping.svg')}}" />
</div>
<span>Shipping</span>
</div>
</li>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/payment.svg')}}" />
</div>
<span>Payment</span>
</div>
</li>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/finish.svg')}}" />
</div>
<span>Complete</span>
</div>
</li>
</ul>
<div class="horizontal-rule">
</div>
</div>
</div>
<div class="right-side">
<div class="purchase-detail">
<div class="price">
<span>Price Detail</span>
</div>
<div class="item-detail">
<span>
<label>2 Items Price</label>
<label class="right">$ 2,506.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Delivery Charges</label>
<label class="right">$ 40.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Coupan Discount</label>
<label class="right">$ 25.00</label>
</span>
</div>
<div class="horizontal-rule">
</div>
<div class="payble-amount">
<span>
<label>Amount Payble</label>
<label class="right">$ 2571.00</label>
</span>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,8 @@
<div class="checkout-process">
@include('shop::customers.checkout.common.nav-left')
@include('shop::customers.checkout.common.nav-right')
</div>

View File

@ -0,0 +1,53 @@
<div class="left-side">
<div class="checkout-menu">
<ul class="checkout-detail">
<li>
<div class="wrapper">
<div class="decorator" v-bind:class="{ active: isGuest }">
<img src="{{asset('themes/default/assets/images/address.svg')}}" />
</div>
<span>Information</span>
</div>
</li>
<li>
<div class="wrapper" >
<div class="decorator" v-bind:class="{ active: isShip }">
<img src="{{asset('themes/default/assets/images/shipping.svg')}}"/>
</div>
<span>Shipping</span>
</div>
</li>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/payment.svg')}}" />
</div>
<span>Payment</span>
</div>
</li>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/finish.svg')}}" />
</div>
<span>Complete</span>
</div>
</li>
</ul>
<div class="horizontal-rule">
</div>
</div>
</div>

View File

@ -0,0 +1,37 @@
<div class="right-side">
<div class="purchase-detail">
<div class="price">
<span>Price Detail</span>
</div>
<div class="item-detail">
<span>
<label>2 Items Price</label>
<label class="right">$ 2,506.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Delivery Charges</label>
<label class="right">$ 40.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Coupan Discount</label>
<label class="right">$ 25.00</label>
</span>
</div>
<div class="horizontal-rule">
</div>
<div class="payble-amount">
<span>
<label>Amount Payble</label>
<label class="right">$ 2571.00</label>
</span>
</div>
</div>
</div>

View File

@ -0,0 +1,73 @@
<div class="order-info">
<div class="order-guest">
<span class="order-text">
Order as Guest
</span>
<button class="btn btn-lg btn-primary sign-in">
SIGN IN
</button>
</div>
<div class="control-group">
<label for="first_name">Email address <span>*</span></label>
<input type="text" class="control" name="email_address">
</div>
<div class="control-group">
<label for="first_name">First Name <span>*</span> </label>
<input type="text" class="control" name="first_name">
</div>
<div class="control-group">
<label for="first_name">Last Name <span>*</span> </label>
<input type="text" class="control" name="last_name">
</div>
<div class="control-group">
<label for="first_name">Company Name <span>*</span> </label>
<input type="text" class="control" name="company_name">
</div>
<div class="control-group">
<label for="first_name">Street address <span>*</span> </label>
<input type="text" class="control" name="street_address">
</div>
<div class="control-group">
<label for="first_name">City <span>*</span> </label>
<input type="text" class="control" name="city">
</div>
<div class="control-group">
<label for="first_name">Country <span>*</span> </label>
<input type="text" class="control" name="country">
</div>
<div class="control-group">
<label for="first_name">Provinces <span>*</span> </label>
<input type="text" class="control" name="provinces">
</div>
<div class="control-group">
<label for="first_name">Zip code <span>*</span> </label>
<input type="text" class="control" name="zip_code">
</div>
<div class="control-group">
<label for="first_name">Phone number <span>*</span> </label>
<input type="text" class="control" name="phone_number">
</div>
<div class="different-billing-addr">
<span>qwdevf</span>
<span>Usedifferent address for billing?</span>
</div>
<div class="horizontal-rule">
</div>
<div class="countinue-button">
<button class="btn btn-lg btn-primary" @click="count()">CONTINUE</button>
</div>
</div>

View File

@ -2,178 +2,68 @@
@section('content-wrapper')
<div class="checkout-process">
<div class="left-side">
<div class="checkout-menu">
<ul class="checkout-detail">
<li>
<div class="wrapper">
<div class="decorator active">
<img src="{{asset('themes/default/assets/images/address.svg')}}" />
</div>
<span>Information</span>
</div>
</li>
<div class="line"> </div>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/shipping.svg')}}" />
</div>
<span>Shipping</span>
</div>
</li>
<div class="line"></div>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/payment.svg')}}" />
</div>
<span>Payment</span>
</div>
</li>
<div class="line"></div>
<li>
<div class="wrapper">
<div class="decorator">
<img src="{{asset('themes/default/assets/images/finish.svg')}}" />
</div>
<span>Complete</span>
</div>
</li>
</ul>
<div class="horizontal-rule">
</div>
</div>
</div>
<div class="right-side">
<div class="purchase-detail">
<div class="price">
<span>Price Detail</span>
</div>
<div class="item-detail">
<span>
<label>2 Items Price</label>
<label class="right">$ 2,506.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Delivery Charges</label>
<label class="right">$ 40.00</label>
</span>
</div>
<div class="item-detail">
<span>
<label>Coupan Discount</label>
<label class="right">$ 25.00</label>
</span>
</div>
<div class="horizontal-rule">
</div>
<div class="payble-amount">
<span>
<label>Amount Payble</label>
<label class="right">$ 2571.00</label>
</span>
</div>
</div>
</div>
</div>
<div class="order-info">
<div class="order-guest">
<span class="order-text">
Order as Guest
</span>
<button class="sign-in">
SIGN IN
</button>
</div>
<div class="control-group">
<label for="first_name">Email address <span>*</span></label>
<input type="text" class="control" name="email_address">
</div>
<div class="control-group">
<label for="first_name">First Name <span>*</span> </label>
<input type="text" class="control" name="first_name">
</div>
<div class="control-group">
<label for="first_name">Last Name <span>*</span> </label>
<input type="text" class="control" name="last_name">
</div>
<div class="control-group">
<label for="first_name">Company Name <span>*</span> </label>
<input type="text" class="control" name="company_name">
</div>
<div class="control-group">
<label for="first_name">Street address <span>*</span> </label>
<input type="text" class="control" name="street_address">
</div>
<div class="control-group">
<label for="first_name">City <span>*</span> </label>
<input type="text" class="control" name="city">
</div>
<div class="control-group">
<label for="first_name">Country <span>*</span> </label>
<input type="text" class="control" name="country">
</div>
<div class="control-group">
<label for="first_name">Provinces <span>*</span> </label>
<input type="text" class="control" name="provinces">
</div>
<div class="control-group">
<label for="first_name">Zip code <span>*</span> </label>
<input type="text" class="control" name="zip_code">
</div>
<div class="control-group">
<label for="first_name">Phone number <span>*</span> </label>
<input type="text" class="control" name="phone_number">
</div>
<div class="different-billing-addr">
<span>qwdevf</span>
<span>Use different address for billing?</span>
</div>
<div class="horizontal-rule">
</div>
<div class="countinue-button">
<button>CONTINUE</button>
</div>
</div>
<checkout customer="{{$customer_id}}"> </checkout>
@endsection
@push('scripts')
<script type="text/x-template" id="checkout-template">
<div>
@include('shop::customers.checkout.common.common')
<div v-if="customer">
@include('shop::customers.checkout.ship-method')
</div>
<div v-if="!customer">
@include('shop::customers.checkout.guest')
</div>
</div>
</script>
<script>
Vue.component('checkout', {
props: ['customer'],
data: () => ({
isGuest:true,
isShip:false,
disabled: 0,
isShipMethod:false
}),
template: '#checkout-template',
mounted () {
if(this.customer){
this.isShip=true;
}else{
this.isGuest=true;
this.disabled=1;
console.log(this.disabled);
}
} ,
methods: {
count () {
this.isShipMethod=true;
console.log(this.isShipMethod)
}
}
})
</script>
@endpush

View File

@ -3,7 +3,7 @@
@section('content-wrapper')
@include('shop::customers.checkout.common')
@include('shop::customers.checkout.common.common')
<div class="payment-method">
<div class="payment-info">
@ -45,7 +45,7 @@
</div>
</div>
<div class="horizontal-rule">
</div>

View File

@ -1,9 +1,4 @@
@extends('shop::layouts.master')
@section('content-wrapper')
@include('shop::customers.checkout.common')
<div class="ship-method">
<div class="ship-info">
@ -14,7 +9,8 @@
<div class="ship-price">
<div class="price-checkbox">
<img src="{{asset('themes/default/assets/images/selected.svg')}}" />
{{-- <img src="{{asset('themes/default/assets/images/selected.svg')}}" /> --}}
<input type="radio" name="gender" value="male" checked>
<span> $ 25.00 </span>
</div>
<div class="price-checkbox-text">
@ -45,7 +41,7 @@
</div>
</div>
<div class="horizontal-rule">
</div>
@ -54,4 +50,3 @@
</div>
</div>
@endsection

View File

@ -0,0 +1,24 @@
@inject('rateHelper' , 'Webkul\Shipping\Helper\Rate')
<div>
@foreach($rateHelper->collectRates() as $key=>$count)
<div class="shipping-method">
<input type="radio" name="price"> ${{ core()->currency($count) }} <span> {{ $key }} </span>
</div>
@endforeach
</div>
<style>
span {
margin-left: 10px;
}
</style>

View File

@ -22,11 +22,7 @@
@include ('shop::products.price', ['product' => $product])
@if ($product->reviews->count())
@include ('shop::products.review', ['product' => $product])
@endif
@include ('shop::products.review', ['product' => $product])
@include ('shop::products.add-to', ['product' => $product])

View File

@ -1,11 +1,19 @@
<div class="product-ratings">
@inject ('reviewHelper', 'Webkul\Product\Product\Review')
@inject ('reviewHelper', 'Webkul\Product\Product\Review')
@if ($total = $reviewHelper->getTotalReviews($product))
<div class="product-ratings">
@for ($i = 1; $i <= $reviewHelper->getAverageRating($product); $i++)
<span class="stars">
@for ($i = 1; $i <= round($reviewHelper->getAverageRating($product)); $i++)
<span class="icon star-icon"></span>
@endfor
</div>
<span class="icon star-icon"></span>
@endfor
</span>
<div class="total-reviews">
{{ __('shop::app.products.total-reviews', ['total' => $total]) }}
</div>
</div>
@endif

View File

@ -1,6 +1,7 @@
@inject ('reviewHelper', 'Webkul\Product\Product\Review')
@inject ('priceHelper', 'Webkul\Product\Product\Price')
@extends('shop::layouts.master')
@section('content-wrapper')
<section class="product-review">

View File

@ -10,53 +10,56 @@
<div class="layouter">
@include ('shop::products.view.gallery')
<form action="" style="display: inherit;">
<div class="details">
@csrf()
<div class="product-heading">
<span>{{ $product->name }}</span>
</div>
<input type="hidden" name="product">
<input type="hidden" name="selected_configurable_option">
<div class="rating">
<img src="{{ bagisto_asset('images/5star.svg') }}" />
75 Ratings & 11 Reviews
</div>
@include ('shop::products.view.gallery')
@include ('shop::products.price', ['product' => $product])
<div class="details">
@include ('shop::products.view.stock')
<div class="product-heading">
<span>{{ $product->name }}</span>
</div>
<br/>
@include ('shop::products.review', ['product' => $product])
<div class="description">
{{ $product->short_description }}
</div>
@include ('shop::products.price', ['product' => $product])
@if ($product->type == 'configurable')
@include ('shop::products.view.stock')
<div class="description">
{{ $product->short_description }}
</div>
@include ('shop::products.view.configurable-options')
@endif
<accordian :title="{{ __('shop::app.products.description') }}" :active="true">
<div slot="header">
{{ __('shop::app.products.description') }}
<i class="icon expand-icon right"></i>
</div>
<div slot="body">
<div class="full-description">
{{ $product->description }}
<accordian :title="'{{ __('shop::app.products.description') }}'" :active="true">
<div slot="header">
{{ __('shop::app.products.description') }}
<i class="icon expand-icon right"></i>
</div>
</div>
</accordian>
@include ('shop::products.view.attributes')
<div slot="body">
<div class="full-description">
{{ $product->description }}
</div>
</div>
</accordian>
@include ('shop::products.view.reviews')
@include ('shop::products.view.attributes')
@include ('shop::products.view.reviews')
</div>
</form>
</div>
</div>
@include ('shop::products.view.up-sells')

View File

@ -1,6 +1,6 @@
@inject ('productViewHelper', 'Webkul\Product\Product\View')
<accordian :title="{{ __('shop::app.products.specification') }}" :active="false">
<accordian :title="'{{ __('shop::app.products.specification') }}'" :active="false">
<div slot="header">
{{ __('shop::app.products.specification') }}
<i class="icon expand-icon right"></i>

View File

@ -1,33 +1,165 @@
<div class="attributes">
@if ($product->type == 'configurable')
<div class="attribute color">
<div class="title">Color</div>
@inject ('configurableOptionHelper', 'Webkul\Product\Product\ConfigurableOption')
<div class="values">
<div class="colors red"></div>
<div class="colors blue"></div>
<div class="colors green"></div>
</div>
</div>
<div class="attribute size">
<div class="title">Size</div>
<product-options></product-options>
<div class="values">
<div class="size xl">XL</div>
<div class="size xxl">XXL</div>
<div class="size xxxl">XXXL</div>
</div>
</div>
@push('scripts')
<div class="attribute quantity">
<div class="title">Quantity</div>
<script type="text/x-template" id="product-options-template">
<div class="attributes">
<div class="values">
<div class="size">1</div>
</div>
</div>
<div v-for='(attribute, index) in childAttributes' class="attribute control-group" :class="[errors.has('super_attribute[' + attribute.id + ']') ? 'has-error' : '']">
<label class="reqiured">@{{ attribute.label }}</label>
</div>
<select v-validate="'required'" class="control" :name="['super_attribute[' + attribute.id + ']']" :disabled="attribute.disabled" @change="configure(attribute, $event.target.value)">
<hr/>
<option v-for='(option, index) in attribute.options' :value="option.id">@{{ option.label }}</option>
</select>
<span class="control-error" v-if="errors.has('super_attribute[' + attribute.id + ']')">@{{ errors.first('super_attribute[' + attribute.id + ']') }}</span>
</div>
</div>
</script>
<script>
Vue.component('product-options', {
template: '#product-options-template',
data: () => ({
config: @json($configurableOptionHelper->getConfigurationConfig($product)),
childAttributes: []
}),
created () {
var childAttributes = this.childAttributes,
attributes = this.config.attributes,
index = attributes.length,
attribute;
while (index--) {
// attribute = Object.assign({}, attributes[index]);
attribute = attributes[index];
attribute.options = [];
if (index) {
attribute.disabled = true;
} else {
this.fillSelect(attribute);
}
attribute = Object.assign(attribute, {
childAttributes: childAttributes.slice(),
prevAttribute: attributes[index - 1],
nextAttribute: attributes[index + 1]
});
childAttributes.unshift(attribute);
}
},
methods: {
configure (attribute, value) {
// this.simpleProduct = this._getSimpleProductId(attribute);
if (value) {
if (attribute.nextAttribute) {
attribute.nextAttribute.disabled = false;
this.fillSelect(attribute.nextAttribute);
this.resetChildren(attribute.nextAttribute);
} else {
//Set product id hidden value
}
} else {
this.resetChildren(attribute);
}
// this.reloadPrice();
// this.changeProductImage();
},
fillSelect (attribute) {
var options = this.getAttributeOptions(attribute.id),
prevOption,
index = 1,
products,
i,
j;
attribute.options = [];
attribute.options[0] = {'id': '', 'label': this.config.chooseText, 'products': []};
if (attribute.prevAttribute) {
prevOption = attribute.prevAttribute.options[attribute.prevAttribute.selectedIndex];
}
// console.log(attribute)
if (options) {
for (i = 0; i < options.length; i++) {
products = [];
if (prevOption) {
for (j = 0; j < options[i].products.length; j++) {
if (prevOption.products &&
prevOption.products.indexOf(options[i].products[j]) > -1) {
products.push(options[i].products[j]);
}
}
} else {
products = options[i].products.slice(0);
}
if (products.length > 0) {
options[i].products = products;
attribute.options[index] = options[i];
index++;
}
}
}
},
resetChildren (attribute) {
if (attribute.childAttributes) {
attribute.childAttributes.forEach(function (set) {
set.selectedIndex = 0;
set.disabled = true;
});
}
},
getAttributeOptions (attributeId) {
var this_this = this,
options;
this.config.attributes.forEach(function(attribute, index) {
if (attribute.id == attributeId) {
options = attribute.options;
}
})
return options;
},
reloadPrice () {
},
changeProductImage () {
},
}
});
</script>
@endpush
@endif

View File

@ -7,7 +7,7 @@
<img src="{{ bagisto_asset('images/jeans.jpg') }}" />
</div>
<div class="product-hero-image">
<div class="product-hero-image" id="product-hero-image">
<img src="{{ bagisto_asset('images/jeans_big.jpg') }}" />
<img class="wishlist" src="{{ bagisto_asset('images/wish.svg') }}" />
<img class="share" src="{{ bagisto_asset('images/icon-share.svg') }}" />

View File

@ -2,8 +2,8 @@
@if ($total = $reviewHelper->getTotalReviews($product))
<div class="rating-reviews">
<div class="title">
Ratings & Reviews
<div class="rating-header">
{{ __('shop::app.products.reviews-title') }}
</div>
<div class="overall">
@ -14,7 +14,7 @@
</span>
<span class="stars">
@for ($i = 1; $i <= $reviewHelper->getAverageRating($product); $i++)
@for ($i = 1; $i <= round($reviewHelper->getAverageRating($product)); $i++)
<span class="icon star-icon"></span>
@ -27,13 +27,15 @@
</div>
<a href="{{ route('shop.reviews.create', $product->url_key) }}" class="btn btn-lg btn-primary">Write Review</a>
<a href="{{ route('shop.reviews.create', $product->url_key) }}" class="btn btn-lg btn-primary">
{{ __('shop::app.products.write-review-btn') }}
</a>
</div>
<div class="reviews">
@foreach ($product->reviews()->paginate(5) as $review)
@foreach ($reviewHelper->getReviews($product)->paginate(5) as $review)
<div class="review">
<div class="title">
{{ $review->title }}
@ -65,7 +67,6 @@
<a href="{{ route('shop.reviews.index', $product->url_key) }}" class="view-all">View All</a>
<hr/>
</div>
</div>
@endif

View File

@ -878,6 +878,15 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
margin-bottom: 14px;
}
.main-container-wrapper .product-card .product-ratings .icon {
width: 16px;
height: 16px;
}
.main-container-wrapper .product-card .product-ratings .total-reviews {
display: none;
}
.main-container-wrapper .product-card .cart-fav-seg {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
@ -1390,16 +1399,16 @@ section.slider-block div.slider-content div.slider-control .light-right-icon {
min-height: 345px;
}
section.product-detail, section.product-review {
section.product-detail {
font-size: 16px;
color: #242424;
}
section.product-detail div.category-breadcrumbs, section.product-review div.category-breadcrumbs {
section.product-detail div.category-breadcrumbs {
display: inline;
}
section.product-detail div.layouter, section.product-review div.layouter {
section.product-detail div.layouter {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@ -1410,32 +1419,32 @@ section.product-detail div.layouter, section.product-review div.layouter {
margin-top: 21px;
}
section.product-detail div.layouter .mixed-group .single-image, section.product-review div.layouter .mixed-group .single-image {
section.product-detail div.layouter .mixed-group .single-image {
padding: 2px;
}
section.product-detail div.layouter .mixed-group .single-image img, section.product-review div.layouter .mixed-group .single-image img {
section.product-detail div.layouter .mixed-group .single-image img {
height: 280px;
width: 280px;
}
section.product-detail div.layouter .mixed-group .details .product-name, section.product-review div.layouter .mixed-group .details .product-name {
section.product-detail div.layouter .mixed-group .details .product-name {
margin-top: 20px;
font-size: 24px;
margin-bottom: 20px;
}
section.product-detail div.layouter .mixed-group .details .product-price, section.product-review div.layouter .mixed-group .details .product-price {
section.product-detail div.layouter .mixed-group .details .product-price {
margin-bottom: 14px;
}
section.product-detail div.layouter .rating-reviews, section.product-review div.layouter .rating-reviews {
section.product-detail div.layouter .rating-reviews {
margin-top: 0px;
width: 50%;
margin-left: 20px;
}
section.product-detail div.layouter .rating-reviews .title-inline, section.product-review div.layouter .rating-reviews .title-inline {
section.product-detail div.layouter .rating-reviews .title-inline {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
@ -1449,12 +1458,12 @@ section.product-detail div.layouter .rating-reviews .title-inline, section.produ
width: 100%;
}
section.product-detail div.layouter .rating-reviews .title-inline button, section.product-review div.layouter .rating-reviews .title-inline button {
section.product-detail div.layouter .rating-reviews .title-inline button {
float: right;
border-radius: 0px !important;
}
section.product-detail div.layouter .rating-reviews .overall, section.product-review div.layouter .rating-reviews .overall {
section.product-detail div.layouter .rating-reviews .overall {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@ -1471,19 +1480,19 @@ section.product-detail div.layouter .rating-reviews .overall, section.product-re
height: 150px;
}
section.product-detail div.layouter .rating-reviews .overall .left-side, section.product-review div.layouter .rating-reviews .overall .left-side {
section.product-detail div.layouter .rating-reviews .overall .left-side {
margin-bottom: 20px;
}
section.product-detail div.layouter .rating-reviews .overall .left-side .number, section.product-review div.layouter .rating-reviews .overall .left-side .number {
section.product-detail div.layouter .rating-reviews .overall .left-side .number {
font-size: 34px;
}
section.product-detail div.layouter .rating-reviews .overall .right-side, section.product-review div.layouter .rating-reviews .overall .right-side {
section.product-detail div.layouter .rating-reviews .overall .right-side {
display: block;
}
section.product-detail div.layouter .rating-reviews .overall .right-side .rater, section.product-review div.layouter .rating-reviews .overall .right-side .rater {
section.product-detail div.layouter .rating-reviews .overall .right-side .rater {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
@ -1492,52 +1501,52 @@ section.product-detail div.layouter .rating-reviews .overall .right-side .rater,
align-items: center;
}
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .star, section.product-review div.layouter .rating-reviews .overall .right-side .rater .star {
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .star {
width: 50px;
height: 20px;
padding: 1px;
margin-right: 8px;
}
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .line-bar, section.product-review div.layouter .rating-reviews .overall .right-side .rater .line-bar {
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .line-bar {
height: 4px;
width: 158px;
margin-right: 12px;
background: #D8D8D8;
}
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .line-bar .line-value, section.product-review div.layouter .rating-reviews .overall .right-side .rater .line-bar .line-value {
section.product-detail div.layouter .rating-reviews .overall .right-side .rater .line-bar .line-value {
background-color: #0031F0;
}
section.product-detail div.layouter .rating-reviews .reviews, section.product-review div.layouter .rating-reviews .reviews {
section.product-detail div.layouter .rating-reviews .reviews {
margin-top: 34px;
margin-bottom: 90px;
}
section.product-detail div.layouter .rating-reviews .reviews .review, section.product-review div.layouter .rating-reviews .reviews .review {
section.product-detail div.layouter .rating-reviews .reviews .review {
margin-bottom: 25px;
}
section.product-detail div.layouter .rating-reviews .reviews .review .title, section.product-review div.layouter .rating-reviews .reviews .review .title {
section.product-detail div.layouter .rating-reviews .reviews .review .title {
margin-bottom: 5px;
}
section.product-detail div.layouter .rating-reviews .reviews .review .stars, section.product-review div.layouter .rating-reviews .reviews .review .stars {
section.product-detail div.layouter .rating-reviews .reviews .review .stars {
margin-bottom: 15px;
}
section.product-detail div.layouter .rating-reviews .reviews .review .message, section.product-review div.layouter .rating-reviews .reviews .review .message {
section.product-detail div.layouter .rating-reviews .reviews .review .message {
margin-bottom: 10px;
}
section.product-detail div.layouter .rating-reviews .reviews .view-all, section.product-review div.layouter .rating-reviews .reviews .view-all {
section.product-detail div.layouter .rating-reviews .reviews .view-all {
margin-top: 15px;
color: #0031f0;
margin-bottom: 15px;
}
section.product-detail div.layouter div.product-image-group, section.product-review div.layouter div.product-image-group {
section.product-detail div.layouter div.product-image-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@ -1551,7 +1560,7 @@ section.product-detail div.layouter div.product-image-group, section.product-rev
margin-right: 2.5%;
}
section.product-detail div.layouter div.product-image-group .side-group, section.product-review div.layouter div.product-image-group .side-group {
section.product-detail div.layouter div.product-image-group .side-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@ -1562,195 +1571,152 @@ section.product-detail div.layouter div.product-image-group .side-group, section
margin-right: 4px;
}
section.product-detail div.layouter div.product-image-group .product-hero-image, section.product-review div.layouter div.product-image-group .product-hero-image {
section.product-detail div.layouter div.product-image-group .product-hero-image {
display: block;
position: relative;
}
section.product-detail div.layouter div.product-image-group .product-hero-image .wishlist, section.product-review div.layouter div.product-image-group .product-hero-image .wishlist {
section.product-detail div.layouter div.product-image-group .product-hero-image .wishlist {
position: absolute;
top: 10px;
right: 12px;
}
section.product-detail div.layouter div.product-image-group .product-hero-image .share, section.product-review div.layouter div.product-image-group .product-hero-image .share {
section.product-detail div.layouter div.product-image-group .product-hero-image .share {
position: absolute;
top: 10px;
right: 45px;
}
section.product-detail div.layouter .details .product-heading, section.product-review div.layouter .details .product-heading {
section.product-detail div.layouter .details .product-price {
margin-bottom: 14px;
}
section.product-detail div.layouter .details .product-ratings {
margin-bottom: 20px;
}
section.product-detail div.layouter .details .product-ratings .icon {
width: 16px;
height: 16px;
}
section.product-detail div.layouter .details .product-ratings .total-reviews {
display: inline-block;
margin-left: 15px;
}
section.product-detail div.layouter .details .product-heading {
font-size: 24px;
color: #242424;
margin-bottom: 14px;
margin-bottom: 15px;
}
section.product-detail div.layouter .details .rating, section.product-review div.layouter .details .rating {
color: #242424;
margin-bottom: 14px;
}
section.product-detail div.layouter .details .product-price, section.product-review div.layouter .details .product-price {
margin-bottom: 14px;
section.product-detail div.layouter .details .product-price {
margin-bottom: 15px;
font-size: 24px;
}
section.product-detail div.layouter .details .product-price .special-price, section.product-review div.layouter .details .product-price .special-price {
section.product-detail div.layouter .details .product-price .special-price {
font-size: 24px;
}
section.product-detail div.layouter .details .stock-status, section.product-review div.layouter .details .stock-status {
margin-bottom: 14px;
section.product-detail div.layouter .details .stock-status {
margin-bottom: 15px;
}
section.product-detail div.layouter .details .description, section.product-review div.layouter .details .description {
margin-bottom: 14px;
section.product-detail div.layouter .details .description {
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: solid 1px rgba(162, 162, 162, 0.2);
}
section.product-detail div.layouter .details .full-specifications td, section.product-review div.layouter .details .full-specifications td {
section.product-detail div.layouter .details .full-specifications td {
padding: 10px 0;
color: #5E5E5E;
}
section.product-detail div.layouter .details .full-specifications td:first-child, section.product-review div.layouter .details .full-specifications td:first-child {
section.product-detail div.layouter .details .full-specifications td:first-child {
padding-right: 40px;
}
section.product-detail div.layouter .details .accordian .accordian-header, section.product-review div.layouter .details .accordian .accordian-header {
section.product-detail div.layouter .details .accordian .accordian-header {
font-size: 16px;
padding-left: 0;
font-weight: 600;
}
section.product-detail div.layouter .details .attributes, section.product-review div.layouter .details .attributes {
section.product-detail div.layouter .details .attributes {
display: block;
width: 100%;
border-bottom: solid 1px rgba(162, 162, 162, 0.2);
}
section.product-detail div.layouter .details .attributes .attribute, section.product-review div.layouter .details .attributes .attribute {
height: 39px;
margin-bottom: 20px;
}
section.product-detail div.layouter .details .attributes .attribute .title, section.product-review div.layouter .details .attributes .attribute .title {
float: left;
height: 100%;
min-width: 130px;
padding-top: 9px;
}
section.product-detail div.layouter .details .attributes .attribute .values, section.product-review div.layouter .details .attributes .attribute .values {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
}
section.product-detail div.layouter .details .attributes .attribute .values .colors, section.product-review div.layouter .details .attributes .attribute .values .colors {
margin-right: 5px;
}
section.product-detail div.layouter .details .attributes .attribute .values .colors:last-child, section.product-review div.layouter .details .attributes .attribute .values .colors:last-child {
margin-right: 0;
}
section.product-detail div.layouter .details .attributes .attribute .values .red, section.product-review div.layouter .details .attributes .attribute .values .red {
height: 37px;
width: 37px;
background: red;
border: 1px solid #c7c7c7;
border-radius: 2px;
}
section.product-detail div.layouter .details .attributes .attribute .values .blue, section.product-review div.layouter .details .attributes .attribute .values .blue {
height: 37px;
width: 37px;
background: blue;
border: 1px solid #c7c7c7;
border-radius: 2px;
}
section.product-detail div.layouter .details .attributes .attribute .values .green, section.product-review div.layouter .details .attributes .attribute .values .green {
height: 37px;
width: 37px;
background: green;
border: 1px solid #c7c7c7;
border-radius: 2px;
}
section.product-detail div.layouter .details .attributes .attribute .values .size, section.product-review div.layouter .details .attributes .attribute .values .size {
margin-right: 5px;
line-height: 38px;
height: 37px;
width: 60px;
border: 1px solid #c7c7c7;
border-radius: 2px;
text-align: center;
vertical-align: middle;
}
section.product-detail div.layouter .details .attributes .attribute .values .size:last-child, section.product-review div.layouter .details .attributes .attribute .values .size:last-child {
margin-right: 0;
}
section.product-detail div.layouter .details .attributes .attribute .values .quantity .values .control, section.product-review div.layouter .details .attributes .attribute .values .quantity .values .control {
height: 37px !important;
width: 30px !important;
}
section.product-detail div.layouter .details .full-description, section.product-review div.layouter .details .full-description {
section.product-detail div.layouter .details .full-description {
font-size: 16px;
}
section.product-detail div.layouter .details .rating-reviews, section.product-review div.layouter .details .rating-reviews {
margin-top: 30px;
}
section.product-detail div.layouter .details .rating-reviews .title, section.product-review div.layouter .details .rating-reviews .title {
margin-bottom: 15px;
.rating-reviews .rating-header {
font-weight: 600;
padding: 20px 0;
}
section.product-detail div.layouter .details .rating-reviews .overall, section.product-review div.layouter .details .rating-reviews .overall {
margin-bottom: 5px;
.rating-reviews .stars .icon {
width: 16px;
height: 16px;
}
section.product-detail div.layouter .details .rating-reviews .overall .review-info .number, section.product-review div.layouter .details .rating-reviews .overall .review-info .number {
.rating-reviews .overall {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
}
.rating-reviews .overall .review-info .number {
font-size: 34px;
}
section.product-detail div.layouter .details .rating-reviews .overall button, section.product-review div.layouter .details .rating-reviews .overall button {
float: right;
border-radius: 0px !important;
.rating-reviews .overall .review-info .total-reviews {
margin-top: 10px;
}
section.product-detail div.layouter .details .rating-reviews .reviews, section.product-review div.layouter .details .rating-reviews .reviews {
margin-top: 34px;
margin-bottom: 80px;
.rating-reviews .reviews {
margin-top: 40px;
margin-bottom: 40px;
}
section.product-detail div.layouter .details .rating-reviews .reviews .review, section.product-review div.layouter .details .rating-reviews .reviews .review {
.rating-reviews .reviews .review {
margin-bottom: 25px;
}
section.product-detail div.layouter .details .rating-reviews .reviews .review .stars, section.product-review div.layouter .details .rating-reviews .reviews .review .stars {
.rating-reviews .reviews .review .title {
margin-bottom: 5px;
}
.rating-reviews .reviews .review .stars {
margin-bottom: 15px;
display: inline-block;
}
section.product-detail div.layouter .details .rating-reviews .reviews .review .stars .icon, section.product-review div.layouter .details .rating-reviews .reviews .review .stars .icon {
width: 18px;
height: 18px;
}
section.product-detail div.layouter .details .rating-reviews .reviews .review .message, section.product-review div.layouter .details .rating-reviews .reviews .review .message {
.rating-reviews .reviews .review .message {
margin-bottom: 10px;
}
section.product-detail div.layouter .details .rating-reviews .reviews .review .reviewer-details, section.product-review div.layouter .details .rating-reviews .reviews .review .reviewer-details {
.rating-reviews .reviews .review .reviewer-details {
color: #5E5E5E;
}
section.product-detail div.layouter .details .rating-reviews .reviews .view-all, section.product-review div.layouter .details .rating-reviews .reviews .view-all {
.rating-reviews .reviews .view-all {
margin-top: 15px;
color: #0031f0;
margin-bottom: 15px;
@ -2911,14 +2877,6 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
.order-info .sign-in {
float: right;
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 103px;
border: none;
}
.order-info .control-group {
@ -2959,17 +2917,6 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
margin-top: 3%;
}
.order-info .countinue-button button {
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 137px;
border: none;
}
@media all and (max-width: 480px) {
.checkout-process {
width: 100%;

View File

@ -10648,7 +10648,7 @@ return jQuery;
"use strict";
/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!
* Vue.js v2.5.16
* Vue.js v2.5.17
* (c) 2014-2018 Evan You
* Released under the MIT License.
*/
@ -15737,7 +15737,7 @@ Object.defineProperty(Vue, 'FunctionalRenderContext', {
value: FunctionalRenderContext
});
Vue.version = '2.5.16';
Vue.version = '2.5.17';
/* */

View File

@ -4,4 +4,4 @@
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</table>