Merge pull request #8 from bagisto/jitendra

Checkout page
This commit is contained in:
JItendra Singh 2018-09-19 12:29:26 +05:30 committed by GitHub
commit 919041da2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 2263 additions and 561 deletions

View File

@ -1,51 +0,0 @@
<?php
return [
'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',
]
]
]
?>

18
config/carriers.php Normal file
View File

@ -0,0 +1,18 @@
<?php
return [
'flatrate' => [
'code' => 'flatrate',
'title' => 'Flatrate',
'description' => 'This is a flat rate',
'status' => '1',
'default_rate' => '10',
'type' => [
'per_unit' => 'Per Unit',
'per order' => 'Per Order',
],
'class' => 'Webkul\Shipping\Carriers\FlatRate',
]
];
?>

View File

@ -4,7 +4,6 @@
{{ __('admin::app.catalog.attributes.add-title') }}
@stop
@section('content')
<div class="content">
<form method="POST" action="{{ route('admin.catalog.attributes.store') }}" @submit.prevent="onSubmit">

View File

@ -18,7 +18,9 @@
?>
<div class="control-group" :class="[errors.has('inventories[{{ $inventorySource->id }}]') ? 'has-error' : '']">
<label>{{ $inventorySource->name }}</label>
<input type="text" v-validate="'numeric|min:0'" name="inventories[{{ $inventorySource->id }}]" class="control" value="{{ $qty }}"/>
<span class="control-error" v-if="errors.has('inventories[{{ $inventorySource->id }}]')">@{{ errors.first('inventories[{!! $inventorySource->id !!}]') }}</span>
</div>

View File

@ -2,7 +2,7 @@
<ul class="menubar">
@foreach($menu->items as $menuItem)
<li class="menu-item {{ $menu->getActive($menuItem) }}">
<a href="{{ $menuItem['url'] }}">
<a href="{{ count($menuItem['children']) ? current($menuItem['children'])['url'] : $menuItem['url'] }}">
<span class="icon {{ $menuItem['icon-class'] }}">
</span>
{{ $menuItem['name'] }}

View File

@ -1,8 +1,7 @@
@extends('admin::layouts.content')
@section('page_title')
@endsection
{{ __('admin::app.users.users.title') }}
@stop
@section('content')

View File

@ -10,23 +10,26 @@ use Auth;
* Chekout controller for the customer
* and guest for placing order
*
* @author Rahul Shukla <rahulshukla.symfony517@webkul.com>
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class CheckoutController extends Controller
{
/**
* Display a listing of the resource.
* Contains route related configuration
*
* @return \Illuminate\Http\Response
* @var array
*/
protected $_config;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware(['customer', 'guest']);
$this->_config = request('_config');
}
@ -37,9 +40,7 @@ class CheckoutController extends Controller
*/
public function index()
{
$customer_id = auth()->guard('customer')->user();
return view($this->_config['view'],compact('customer_id'));
return view($this->_config['view']);
}
}

View File

@ -8,7 +8,8 @@ use Illuminate\Routing\Router;
use Illuminate\Foundation\AliasLoader;
use Webkul\User\Http\Middleware\RedirectIfNotAdmin;
use Webkul\Customer\Http\Middleware\RedirectIfNotCustomer;
use Webkul\Cart\Facades\Cart;
use Webkul\Cart\Cart;
use Webkul\Cart\Facades\Cart as CartFacade;
class CartServiceProvider extends ServiceProvider
{
@ -17,10 +18,6 @@ class CartServiceProvider extends ServiceProvider
{
$this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
$router->aliasMiddleware('admin', RedirectIfNotAdmin::class);
// $router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
$this->register(EventServiceProvider::class);
}
@ -42,13 +39,10 @@ class CartServiceProvider extends ServiceProvider
protected function registerFacades()
{
$loader = AliasLoader::getInstance();
$loader->alias('cart', Cart::class);
$loader->alias('cart', CartFacade::class);
$this->app->singleton('cart', function () {
return new cart();
return new Cart();
});
$this->app->bind('cart', 'Webkul\Cart\Cart');
}
}

View File

@ -140,8 +140,8 @@ class Core
$channel = $this->getCurrentChannel();
// $currencyCode = $channel->base_currency->code;
$currencyCode = $channel->base_currency;
$currencyCode = $channel->base_currency->code;
// $currencyCode = $channel->base_currency;
return currency($price, $currencyCode);
}

View File

@ -23,6 +23,7 @@ class CreateCustomerAddressesTable extends Migration
$table->string('state');
$table->string('city');
$table->integer('postcode');
$table->string('phone');
$table->timestamps();
});
}

View File

@ -1,6 +1,6 @@
<?php
namespace Webkul\Shipping\Carrier;
namespace Webkul\Shipping\Carriers;
use Webkul\Shipping\Contracts\AbstractShipping;
use Config;
@ -11,13 +11,8 @@ use Config;
*/
class FlatRate extends AbstractShipping
{
public function calculate()
{
$all = Config::get('carrier');
return $all;
return [];
}
}

View File

@ -12,6 +12,4 @@ abstract class AbstractShipping
abstract public function calculate();
}
?>

View File

@ -1,31 +0,0 @@
<?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

@ -0,0 +1,29 @@
<?php
namespace Webkul\Shipping\Helper;
use Illuminate\Support\Facades\Config;
/**
* Class Rate.
*
*/
class Rate
{
public function collectRates()
{
$rates = [];
$shippingMethods = Config::get('carriers');
foreach($shippingMethods as $shippingMethod) {
$object = new $shippingMethod['class'];
if($rate = $object->calculate()) {
$rates[] = $rate;
}
}
return $rates;
}
}

View File

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

View File

@ -11,7 +11,7 @@ Route::group(['middleware' => ['web']], function () {
]);
Route::get('/checkout', 'Webkul\Cart\Http\Controllers\CheckoutController@index')->defaults('_config', [
'view' => 'shop::customers.checkout.index'
'view' => 'shop::checkout.onepage'
])->name('shop.checkout');
/* dummy routes ends here */
@ -37,7 +37,7 @@ Route::group(['middleware' => ['web']], function () {
// Product Review routes
Route::get('/reviews/{slug}/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@show')->defaults('_config', [
Route::get('/reviews/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@show')->defaults('_config', [
'view' => 'shop::products.reviews.index'
])->name('shop.reviews.index');

View File

@ -1,8 +1,10 @@
window.jQuery = window.$ = $ = require("jquery");
window.Vue = require("vue");
window.VeeValidate = require("vee-validate");
window.axios = require("axios");
Vue.use(VeeValidate);
Vue.prototype.$http = axios
Vue.component("category-nav", require("./components/category-nav.vue"));
Vue.component("category-item", require("./components/category-item.vue"));

View File

@ -29,7 +29,6 @@ export default {
computed: {
haveChildren() {
console.log(this.item);
return this.item.children.length ? true : false;
}
}

View File

@ -2755,87 +2755,95 @@ section.cart {
}
}
// responsive order css end here
// checkout starts here
.checkout-process{
display: flex;
flex-direction: row;
width: 100%;
margin-top:3%;
margin-top: 20px;
margin-bottom: 20px;
.left-side {
width: 67%;
margin-right: 8%;
height: 100px;
.col-main {
width: 65%;
padding-right: 40px;
.checkout-menu {
ul.checkout-steps {
width: 100%;
display: inline-flex;
justify-content: space-between;
width: 100%;
padding-bottom: 15px;
border-bottom: 1px solid #E8E8E8;;
ul.checkout-detail {
height: 60px;
display: inline-flex;
justify-content: space-between;
width: 100%;
padding: 5px;
li {
height: 48px;
display:flex;
li {
.decorator {
height: 48px;
width: 48px;
border: 1px solid black;
border-radius: 50%;
display: inline-flex;
border: 1px solid #E8E8E8;
img {
margin: auto;
}
}
.wrapper {
display:flex;
span {
margin-left: 7px;
margin-top: auto;
margin-bottom: auto;
font-size: 16px;
}
.decorator {
height: 48px;
width: 48px;
border: 1px solid black;
border-radius: 50%;
display: inline-flex;
border: 1px solid #E8E8E8;
img {
margin: auto;
}
}
.decorator.active {
border: 1px solid blue;
}
span {
margin-left: 7px;
margin-top: auto;
margin-bottom: auto;
font-size: 16px;
}
&.active {
color: #2650EF;
.decorator {
border: 1px solid #2650EF;
}
}
}
}
.horizontal-rule {
margin-top: 1%;
.step-content {
padding-top: 20px;
.form-header {
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
display: inline-block;
h1 {
float: left;
}
.btn {
float: right;
}
}
.form-container {
border-bottom: 1px solid #E8E8E8;
padding-top: 20px;
padding-bottom: 20px;
}
}
}
.right-side {
height: 300px;
width: 300px;
.col-right {
width: 35%;
padding-left: 40px;
.purchase-detail {
margin-top:22px;
margin-left:18px;
.order-summary {
.price {
span{
span {
margin-left: 3px;
font-size: 16px;
color: #242424;
@ -2843,7 +2851,6 @@ section.cart {
}
}
.item-detail {
margin-top:12px;
@ -2854,8 +2861,9 @@ section.cart {
font-size: 16px;
color: #242424;
}
.right {
float:right;
float: right;
font-size: 16px;
color: #242424;
}
@ -2871,7 +2879,7 @@ section.cart {
}
.payble-amount {
margin-top:12px;
margin-top: 12px;
span {
margin-left: 3px;
@ -2882,6 +2890,7 @@ section.cart {
color: #242424;
font-weight: bold;
}
.right {
float:right;
@ -2892,68 +2901,6 @@ section.cart {
}
}
}
}
.order-info{
width: 67%;
margin-right: 6%;
height: 1350px;
margin-top: -190px;
.order-guest {
.order-text{
font-size: 24px;
color: #242424;
letter-spacing: -0.58px;
font-weight: bold;
}
}
.sign-in {
float:right;
}
.control-group {
margin-top:30px;
label {
font-size:14px;
}
.control {
width:600px;
}
span {
color:red;
}
}
.different-billing-addr {
margin-top: 5%;
span {
font-size: 16px;
color: #242424;
letter-spacing: -0.38px;
}
}
.horizontal-rule {
margin-top: 6%;
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
}
.countinue-button {
margin-top: 3%;
}
}
// checkout ends here
@ -2961,10 +2908,9 @@ section.cart {
// responsive checkout start here
@media all and (max-width: 480px) {
.checkout-process{
width: 100%;
margin-top:3%;
margin-top: 3%;
.left-side {
width: 100%;
@ -2983,12 +2929,11 @@ section.cart {
height: 48px;
.wrapper {
display:flex;
display: flex;
span {
display: none;
}
}
}
@ -3009,7 +2954,7 @@ section.cart {
}
.right-side {
display:none;
display: none;
}
}
@ -3119,96 +3064,11 @@ section.cart {
}
}
}
// responsive checkout end here
// sign of checkout starts here
.signin-form{
width: 67%;
margin-right: 6%;
height: 520px;
margin-top: -190px;
.signin-guest {
.signin-text{
font-size: 24px;
color: #242424;
letter-spacing: -0.58px;
font-weight: bold;
}
}
.order-button {
float:right;
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 153px;
border: none;
}
.control-group {
margin-top:30px;
label {
font-size:14px;
}
.control {
width:600px;
}
span {
color:red;
}
}
.forgot-pass {
span {
font-size: 16px;
color: #0031F0;
letter-spacing: -0.38px;
}
}
.horizontal-rule {
margin-top: 6%;
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
}
.countinue-button {
margin-top: 3%;
button {
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 137px;
border: none;
}
}
}
// sign checkout end here
//shipment start here
.ship-method {
width: 67%;
margin-right: 6%;
@ -3284,11 +3144,9 @@ section.cart {
}
}
}
//shipment end here
// payment method start here
.payment-method {
width: 67%;
margin-right: 6%;
@ -3376,12 +3234,10 @@ section.cart {
}
}
}
// payment method end here
// complete page start here
.complete-page{
width:880px;
height: 1050px;
@ -3737,12 +3593,10 @@ section.cart {
}
}
}
// complete page end here
// review page start here
section.review {
font-size: 16px;
color: $product-font-color;
@ -3914,11 +3768,4 @@ section.review {
}
}
}
// review page start here
// review page start here

View File

@ -6,6 +6,7 @@ return [
'account_exists' => 'Already have an account',
'title' => 'Sign In'
],
'signup-form' => [
'title' => 'Sign Up',
'firstname' => 'First Name',
@ -19,10 +20,12 @@ return [
'conditions' => 'Conditions',
'using' => 'by using this website'
],
'login-text' => [
'no_account' => 'Don\'t have account',
'title' => 'Sign In',
],
'login-form' => [
'title' => 'Sign Up',
'email' => 'E-Mail',
@ -53,5 +56,35 @@ return [
'reviews-title' => 'Ratings & Reviews',
'write-review-btn' => 'Write Review',
'choose-option' => 'Choose an option'
],
'checkout' => [
'cart' => [
],
'onepage' => [
'title' => 'Checkout',
'information' => 'Information',
'shipping' => 'Shipping',
'payment' => 'Payment',
'complete' => 'Complete',
'billing-address' => 'Billing Address',
'sign-in' => 'Sign In',
'first-name' => 'First Name',
'last-name' => 'Last Name',
'email' => 'Email',
'address1' => 'Address',
'address2' => 'Address 2',
'city' => 'City',
'state' => 'State',
'postcode' => 'Zip/Postcode',
'phone' => 'Telephone',
'country' => 'Country',
'order-summary' => 'Order Summary',
'shipping-address' => 'Shipping Address',
'use_for_shipping' => 'Ship to this address',
'continue' => 'Continue'
]
]
];

View File

@ -0,0 +1,121 @@
@extends('shop::layouts.master')
@section('page_title')
{{ __('shop::app.checkout.onepage.title') }}
@stop
@section('content-wrapper')
<checkout></checkout>
@endsection
@push('scripts')
<script type="text/x-template" id="checkout-template">
<div id="checkout" class="checkout-process">
<div class="col-main">
<ul class="checkout-steps">
<li class="active">
<div class="decorator">
<img src="{{ bagisto_asset('images/address.svg') }}" />
</div>
<span>{{ __('shop::app.checkout.onepage.information') }}</span>
</li>
<li>
<div class="decorator">
<img src="{{ bagisto_asset('images/shipping.svg') }}" />
</div>
<span>{{ __('shop::app.checkout.onepage.shipping') }}</span>
</li>
<li>
<div class="decorator">
<img src="{{ bagisto_asset('images/payment.svg') }}" />
</div>
<span>{{ __('shop::app.checkout.onepage.payment') }}</span>
</li>
<li>
<div class="decorator">
<img src="{{ bagisto_asset('images/finish.svg') }}" />
</div>
<span>{{ __('shop::app.checkout.onepage.complete') }}</span>
</li>
</ul>
<div class="step-content information">
@include('shop::checkout.onepage.customer-info')
<div class="button-group">
<button type="button" class="btn btn-lg btn-primary" @click="validateForm('address-form')">
{{ __('shop::app.checkout.onepage.continue') }}
</button>
</div>
</div>
</div>
<div class="step-content shipping">
</div>
<div class="step-content payment">
</div>
<div class="step-content review">
</div>
@include('shop::checkout.onepage.summary')
</div>
</script>
<script>
Vue.component('checkout', {
template: '#checkout-template',
inject: ['$validator'],
data: () => ({
billing: {
use_for_shipping: true
},
shipping: {},
}),
created () {
},
methods: {
validateForm: function (scope) {
this.$validator.validateAll(scope).then((result) => {
if(result) {
this.saveAddress()
}
});
},
saveAddress () {
// this.$http.get('https://api.coindesk.com/v1/bpi/currentprice.json')
// .then(function(response) {
// console.log(response)
// })
}
}
})
</script>
@endpush

View File

@ -0,0 +1,278 @@
<form data-vv-scope="address-form">
<div class="form-container">
<div class="form-header">
<h1>{{ __('shop::app.checkout.onepage.billing-address') }}</h1>
<a href="{{ route('customer.session.index') }}" class="btn btn-lg btn-primary">
{{ __('shop::app.checkout.onepage.sign-in') }}
</a>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[first_name]') ? 'has-error' : '']">
<label for="billing[first_name]" class="required">
{{ __('shop::app.checkout.onepage.first-name') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[first_name]" name="billing[first_name]" v-model="billing.first_name"/>
<span class="control-error" v-if="errors.has('address-form.billing[first_name]')">
@{{ errors.first('address-form.billing[first_name]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[last_name]') ? 'has-error' : '']">
<label for="billing[last_name]" class="required">
{{ __('shop::app.checkout.onepage.last-name') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[last_name]" name="billing[last_name]" v-model="billing.last_name"/>
<span class="control-error" v-if="errors.has('address-form.billing[last_name]')">
@{{ errors.first('address-form.billing[last_name]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[email]') ? 'has-error' : '']">
<label for="billing[email]" class="required">
{{ __('shop::app.checkout.onepage.email') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[email]" name="billing[email]" v-model="billing.email"/>
<span class="control-error" v-if="errors.has('address-form.billing[email]')">
@{{ errors.first('address-form.billing[email]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[address1]') ? 'has-error' : '']">
<label for="billing[address1]" class="required">
{{ __('shop::app.checkout.onepage.address1') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[address1]" name="billing[address1]" v-model="billing.address1"/>
<span class="control-error" v-if="errors.has('address-form.billing[address1]')">
@{{ errors.first('address-form.billing[address1]') }}
</span>
</div>
<div class="control-group">
<label for="billing[address2]">
{{ __('shop::app.checkout.onepage.address2') }}
</label>
<input type="text" class="control" id="billing[address2]" name="billing[address2]" v-model="billing.address2"/>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[city]') ? 'has-error' : '']">
<label for="billing[city]" class="required">
{{ __('shop::app.checkout.onepage.city') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[city]" name="billing[city]" v-model="billing.city"/>
<span class="control-error" v-if="errors.has('address-form.billing[city]')">
@{{ errors.first('address-form.billing[city]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[state]') ? 'has-error' : '']">
<label for="billing[state]" class="required">
{{ __('shop::app.checkout.onepage.state') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[state]" name="billing[state]" v-model="billing.state"/>
<span class="control-error" v-if="errors.has('address-form.billing[state]')">
@{{ errors.first('address-form.billing[state]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[postcode]') ? 'has-error' : '']">
<label for="billing[postcode]" class="required">
{{ __('shop::app.checkout.onepage.postcode') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[postcode]" name="billing[postcode]" v-model="billing.postcode"/>
<span class="control-error" v-if="errors.has('address-form.billing[postcode]')">
@{{ errors.first('address-form.billing[postcode]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[phone]') ? 'has-error' : '']">
<label for="billing[phone]" class="required">
{{ __('shop::app.checkout.onepage.phone') }}
</label>
<input type="text" v-validate="'required'" class="control" id="billing[phone]" name="billing[phone]" v-model="billing.phone"/>
<span class="control-error" v-if="errors.has('address-form.billing[phone]')">
@{{ errors.first('address-form.billing[phone]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.billing[country]') ? 'has-error' : '']">
<label for="billing[country]" class="required">
{{ __('shop::app.checkout.onepage.country') }}
</label>
<select type="text" v-validate="'required'" class="control" id="billing[country]" name="billing[country]" v-model="billing.country">
<option value=""></option>
@foreach (country()->all() as $code => $country)
<option value="{{ $country}}">{{ $country }}</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('address-form.billing[country]')">
@{{ errors.first('address-form.billing[country]') }}
</span>
</div>
<div class="control-group">
<span class="checkbox">
<input type="checkbox" id="billing[use_for_shipping]" name="billing[use_for_shipping]" v-model="billing.use_for_shipping"/>
<label class="checkbox-view" for="billing[use_for_shipping]"></label>
{{ __('shop::app.checkout.onepage.use_for_shipping') }}
</span>
</div>
</div>
<div class="form-container" v-if="!billing.use_for_shipping">
<div class="form-header">
<h1>{{ __('shop::app.checkout.onepage.shipping-address') }}</h1>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[first_name]') ? 'has-error' : '']">
<label for="shipping[first_name]" class="required">
{{ __('shop::app.checkout.onepage.first-name') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[first_name]" name="shipping[first_name]" v-model="shipping.first_name"/>
<span class="control-error" v-if="errors.has('address-form.shipping[first_name]')">
@{{ errors.first('address-form.shipping[first_name]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[last_name]') ? 'has-error' : '']">
<label for="shipping[last_name]" class="required">
{{ __('shop::app.checkout.onepage.last-name') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[last_name]" name="shipping[last_name]" v-model="shipping.last_name"/>
<span class="control-error" v-if="errors.has('address-form.shipping[last_name]')">
@{{ errors.first('address-form.shipping[last_name]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[email]') ? 'has-error' : '']">
<label for="shipping[email]" class="required">
{{ __('shop::app.checkout.onepage.email') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[email]" name="shipping[email]" v-model="shipping.email"/>
<span class="control-error" v-if="errors.has('address-form.shipping[email]')">
@{{ errors.first('address-form.shipping[email]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[address1]') ? 'has-error' : '']">
<label for="shipping[address1]" class="required">
{{ __('shop::app.checkout.onepage.address1') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[address1]" name="shipping[address1]" v-model="shipping.address1"/>
<span class="control-error" v-if="errors.has('address-form.shipping[address1]')">
@{{ errors.first('address-form.shipping[address1]') }}
</span>
</div>
<div class="control-group">
<label for="shipping[address2]">
{{ __('shop::app.checkout.onepage.address2') }}
</label>
<input type="text" class="control" id="shipping[address2]" name="shipping[address2]" v-model="shipping.address2"/>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[city]') ? 'has-error' : '']">
<label for="shipping[city]" class="required">
{{ __('shop::app.checkout.onepage.city') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[city]" name="shipping[city]" v-model="shipping.city"/>
<span class="control-error" v-if="errors.has('address-form.shipping[city]')">
@{{ errors.first('address-form.shipping[city]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[state]') ? 'has-error' : '']">
<label for="shipping[state]" class="required">
{{ __('shop::app.checkout.onepage.state') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[state]" name="shipping[state]" v-model="shipping.state"/>
<span class="control-error" v-if="errors.has('address-form.shipping[state]')">
@{{ errors.first('address-form.shipping[state]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[postcode]') ? 'has-error' : '']">
<label for="shipping[postcode]" class="required">
{{ __('shop::app.checkout.onepage.postcode') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[postcode]" name="shipping[postcode]" v-model="shipping.postcode"/>
<span class="control-error" v-if="errors.has('address-form.shipping[postcode]')">
@{{ errors.first('address-form.shipping[postcode]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[phone]') ? 'has-error' : '']">
<label for="shipping[phone]" class="required">
{{ __('shop::app.checkout.onepage.phone') }}
</label>
<input type="text" v-validate="'required'" class="control" id="shipping[phone]" name="shipping[phone]" v-model="shipping.phone"/>
<span class="control-error" v-if="errors.has('address-form.shipping[phone]')">
@{{ errors.first('address-form.shipping[phone]') }}
</span>
</div>
<div class="control-group" :class="[errors.has('address-form.shipping[country]') ? 'has-error' : '']">
<label for="shipping[country]" class="required">
{{ __('shop::app.checkout.onepage.country') }}
</label>
<select type="text" v-validate="'required'" class="control" id="shipping[country]" name="shipping[country]" v-model="shipping.country">
<option value=""></option>
@foreach (country()->all() as $code => $country)
<option value="{{ $country}}">{{ $country }}</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('address-form.shipping[country]')">
@{{ errors.first('address-form.shipping[country]') }}
</span>
</div>
</div>
</form>

View File

@ -0,0 +1,37 @@
<div class="col-right">
<div class="order-summary">
<div class="price">
<span>{{ __('shop::app.checkout.onepage.order-summary') }}</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

@ -1,37 +1,3 @@
<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

@ -45,15 +45,12 @@
}else{
this.isGuest=true;
this.disabled=1;
console.log(this.disabled);
}
} ,
methods: {
count () {
this.isShipMethod=true;
console.log(this.isShipMethod)
}
}

View File

@ -133,7 +133,6 @@
for(var key in percentage){
width= percentage[key] * 1.58;
let id =key + 'star';
console.log(id);
document.getElementById(key).style.width = width + "px";
document.getElementById(key).style.height = 4 + "px";
document.getElementById(id).innerHTML = i + '\xa0\xa0' + "star";

View File

@ -1,5 +1,10 @@
@extends('shop::layouts.master')
@section('page_title')
{{ $product->name }}
@stop
@section('content-wrapper')
<section class="product-detail">
<div class="category-breadcrumbs">

View File

@ -2,7 +2,20 @@
@inject ('configurableOptionHelper', 'Webkul\Product\Product\ConfigurableOption')
<product-options></product-options>
<product-options>
<!--<div class="attribute control-group has-error">
<label class="reqiured">Color</label>
<select name="super_attribute[104]" id="attribute_104" class="control" data-vv-id="1" aria-required="true" aria-invalid="true">
<option value="">Choose an option</option>
</select>
</div>
<div class="attribute control-group">
<label class="reqiured">Size</label>
<select name="super_attribute[105]" disabled="disabled" id="attribute_105" class="control" data-vv-id="2" aria-required="true" aria-invalid="false">
</select>
</div>-->
</product-options>
@push('scripts')

View File

@ -63,7 +63,6 @@
},
created () {
console.log(this.images[0])
this.changeImage(this.images[0])
this.prepareThumbs()

View File

@ -452,6 +452,11 @@ h2 {
}
}
.button-group {
margin-top: 20px;
margin-bottom: 20px;
}
.alert-wrapper {
width: 300px;
top: 10px;

View File

@ -2756,21 +2756,17 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
-ms-flex-direction: row;
flex-direction: row;
width: 100%;
margin-top: 3%;
margin-top: 20px;
margin-bottom: 20px;
}
.checkout-process .left-side {
width: 67%;
margin-right: 8%;
height: 100px;
.checkout-process .col-main {
width: 65%;
padding-right: 40px;
}
.checkout-process .left-side .checkout-menu {
.checkout-process .col-main ul.checkout-steps {
width: 100%;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail {
height: 60px;
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
@ -2778,20 +2774,18 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%;
padding: 5px;
padding-bottom: 15px;
border-bottom: 1px solid #E8E8E8;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li {
.checkout-process .col-main ul.checkout-steps li {
height: 48px;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li .wrapper {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li .wrapper .decorator {
.checkout-process .col-main ul.checkout-steps li .decorator {
height: 48px;
width: 48px;
border: 1px solid black;
@ -2802,66 +2796,80 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
border: 1px solid #E8E8E8;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li .wrapper .decorator img {
.checkout-process .col-main ul.checkout-steps li .decorator img {
margin: auto;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li .wrapper .decorator.active {
border: 1px solid blue;
}
.checkout-process .left-side .checkout-menu ul.checkout-detail li .wrapper span {
.checkout-process .col-main ul.checkout-steps li span {
margin-left: 7px;
margin-top: auto;
margin-bottom: auto;
font-size: 16px;
}
.checkout-process .left-side .checkout-menu .horizontal-rule {
margin-top: 1%;
.checkout-process .col-main ul.checkout-steps li.active {
color: #2650EF;
}
.checkout-process .col-main ul.checkout-steps li.active .decorator {
border: 1px solid #2650EF;
}
.checkout-process .col-main .step-content {
padding-top: 20px;
}
.checkout-process .col-main .step-content .form-header {
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
display: inline-block;
}
.checkout-process .right-side {
height: 300px;
width: 300px;
.checkout-process .col-main .step-content .form-header h1 {
float: left;
}
.checkout-process .right-side .purchase-detail {
margin-top: 22px;
margin-left: 18px;
.checkout-process .col-main .step-content .form-header .btn {
float: right;
}
.checkout-process .right-side .purchase-detail .price span {
.checkout-process .col-main .step-content .form-container {
border-bottom: 1px solid #E8E8E8;
padding-top: 20px;
padding-bottom: 20px;
}
.checkout-process .col-right {
width: 35%;
padding-left: 40px;
}
.checkout-process .col-right .order-summary .price span {
margin-left: 3px;
font-size: 16px;
color: #242424;
font-weight: bold;
}
.checkout-process .right-side .purchase-detail .item-detail {
.checkout-process .col-right .order-summary .item-detail {
margin-top: 12px;
}
.checkout-process .right-side .purchase-detail .item-detail span {
.checkout-process .col-right .order-summary .item-detail span {
margin-left: 3px;
}
.checkout-process .right-side .purchase-detail .item-detail span label {
.checkout-process .col-right .order-summary .item-detail span label {
font-size: 16px;
color: #242424;
}
.checkout-process .right-side .purchase-detail .item-detail span .right {
.checkout-process .col-right .order-summary .item-detail span .right {
float: right;
font-size: 16px;
color: #242424;
}
.checkout-process .right-side .purchase-detail .horizontal-rule {
.checkout-process .col-right .order-summary .horizontal-rule {
margin-top: 6%;
width: 100%;
height: 1px;
@ -2869,83 +2877,27 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
background: #e8e8e8;
}
.checkout-process .right-side .purchase-detail .payble-amount {
.checkout-process .col-right .order-summary .payble-amount {
margin-top: 12px;
}
.checkout-process .right-side .purchase-detail .payble-amount span {
.checkout-process .col-right .order-summary .payble-amount span {
margin-left: 3px;
font-weight: bold;
}
.checkout-process .right-side .purchase-detail .payble-amount span label {
.checkout-process .col-right .order-summary .payble-amount span label {
font-size: 16px;
color: #242424;
font-weight: bold;
}
.checkout-process .right-side .purchase-detail .payble-amount span .right {
.checkout-process .col-right .order-summary .payble-amount span .right {
float: right;
font-size: 16px;
color: #242424;
}
.order-info {
width: 67%;
margin-right: 6%;
height: 1350px;
margin-top: -190px;
}
.order-info .order-guest .order-text {
font-size: 24px;
color: #242424;
letter-spacing: -0.58px;
font-weight: bold;
}
.order-info .sign-in {
float: right;
}
.order-info .control-group {
margin-top: 30px;
}
.order-info .control-group label {
font-size: 14px;
}
.order-info .control-group .control {
width: 600px;
}
.order-info .control-group span {
color: red;
}
.order-info .different-billing-addr {
margin-top: 5%;
}
.order-info .different-billing-addr span {
font-size: 16px;
color: #242424;
letter-spacing: -0.38px;
}
.order-info .horizontal-rule {
margin-top: 6%;
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
}
.order-info .countinue-button {
margin-top: 3%;
}
@media all and (max-width: 480px) {
.checkout-process {
width: 100%;
@ -3072,77 +3024,6 @@ section.cart .cart-content .right-side .coupon-section .after-coupon-amount .amo
}
}
.signin-form {
width: 67%;
margin-right: 6%;
height: 520px;
margin-top: -190px;
}
.signin-form .signin-guest .signin-text {
font-size: 24px;
color: #242424;
letter-spacing: -0.58px;
font-weight: bold;
}
.signin-form .order-button {
float: right;
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 153px;
border: none;
}
.signin-form .control-group {
margin-top: 30px;
}
.signin-form .control-group label {
font-size: 14px;
}
.signin-form .control-group .control {
width: 600px;
}
.signin-form .control-group span {
color: red;
}
.signin-form .forgot-pass span {
font-size: 16px;
color: #0031F0;
letter-spacing: -0.38px;
}
.signin-form .horizontal-rule {
margin-top: 6%;
width: 100%;
height: 1px;
vertical-align: middle;
background: #e8e8e8;
}
.signin-form .countinue-button {
margin-top: 3%;
}
.signin-form .countinue-button button {
background: #0031F0;
font-size: 14px;
color: #FFFFFF;
letter-spacing: -0.26px;
text-align: center;
height: 38px;
width: 137px;
border: none;
}
.ship-method {
width: 67%;
margin-right: 6%;

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"
}
}