[Fixed: conflict resolved.]

This commit is contained in:
Vivek Sharma 2020-02-11 13:23:21 +05:30
parent fb696d27e5
commit 817d46bb89
76 changed files with 1646 additions and 727 deletions

View File

@ -133,7 +133,7 @@ class LocaleController extends Controller
$locale = $this->localeRepository->findOrFail($id);
if ($this->localeRepository->count() == 1) {
session()->flash('error', trans('admin::app.settings.locales.last-delete-error'));
session()->flash('warning', trans('admin::app.settings.locales.last-delete-error'));
} else {
try {
Event::dispatch('core.locale.delete.before', $id);

View File

@ -114,6 +114,11 @@ class SliderController extends Controller
'image.*' => 'sometimes|mimes:jpeg,bmp,png,jpg'
]);
if ( is_null(request()->image)) {
session()->flash('error', trans('admin::app.settings.sliders.update-fail'));
return redirect()->back();
}
$result = $this->sliderRepository->updateItem(request()->all(), $id);
if ($result) {

View File

@ -0,0 +1,17 @@
<?php
return [
'wishlist' => [
'success' => 'تمت إضافة العنصر بنجاح إلى قائمة الأمنيات',
'failure' => 'لا يمكن إضافة العنصر إلى قائمة الأمنيات',
'already' => 'العنصر موجود بالفعل في قائمة الأمنيات الخاصة بك',
'removed' => 'تمت إزالة العنصر بنجاح من قائمة الأمنيات',
'remove-fail' => 'لا يمكن إزالة العنصر من قائمة الأمنيات',
'empty' => 'ليس لديك أي عناصر في قائمة الامنيات',
'select-options' => 'تحتاج إلى تحديد خيارات قبل إضافة إلى قائمة الأمنيات',
'remove-all-success' => 'تمت إزالة جميع العناصر من قائمة الأمنيات الخاصة بك',
],
'reviews' => [
'empty' => '.لم تقم بمراجعة أي منتج حتى الآن'
]
];

View File

@ -22,6 +22,7 @@ class VatValidator
*/
protected static $pattern_expression = array(
'AT' => 'U[A-Z\d]{8}',
'AE' => '\d{15}',
'BE' => '(0\d{9}|\d{10})',
'BG' => '\d{9,10}',
'CY' => '\d{8}[A-Z]',
@ -50,6 +51,7 @@ class VatValidator
'SE' => '\d{12}',
'SI' => '\d{8}',
'SK' => '\d{10}',
'JP' => '\d{12}|\d{13}',
);
/**
@ -61,14 +63,14 @@ class VatValidator
*/
public function validate(string $vatNumber): bool
{
$country = request()->input('country');
$vatNumber = $this->vatCleaner($vatNumber);
list($country, $number) = $this->splitVat($vatNumber);
if (! isset(self::$pattern_expression[$country])) {
return false;
}
return preg_match('/^' . self::$pattern_expression[$country] . '$/', $vatNumber) > 0;
return preg_match('/^' . self::$pattern_expression[$country] . '$/', $number) > 0;
}
/**
@ -81,4 +83,17 @@ class VatValidator
$vatNumber_no_spaces = trim($vatNumber);
return strtoupper($vatNumber_no_spaces);
}
/**
* @param string $vatNumber
*
* @return array
*/
private function splitVat(string $vatNumber): array
{
return [
substr($vatNumber, 0, 2),
substr($vatNumber, 2),
];
}
}

2
packages/Webkul/Shop/publishable/assets/css/shop.css vendored Executable file → Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,41 @@
/*!
* Sizzle CSS Selector Engine v2.3.4
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2019-04-08
*/
/*!
* Vue.js v2.6.11
* (c) 2014-2019 Evan You
* Released under the MIT License.
*/
/*!
* accounting.js v0.4.1
* Copyright 2014 Open Exchange Rates
*
* Freely distributable under the MIT license.
* Portions of accounting.js are inspired or borrowed from underscore.js
*
* Full details and documentation:
* http://openexchangerates.github.io/accounting.js/
*/
/*!
* jQuery JavaScript Library v3.4.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2019-05-01T21:04Z
*/

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=d0a3f597b439d75f4a4e",
"/css/shop.css": "/css/shop.css?id=dbbd9009872174a61946"
"/js/shop.js": "/js/shop.js?id=6d8ea335fbfa47e80e72",
"/css/shop.css": "/css/shop.css?id=66ee90f14efb050a20e5"
}

View File

@ -2549,7 +2549,7 @@ section.cart {
.misc-controls {
position: relative;
top: 180px;
top: 300px;
margin-top: 0px;
}
}
@ -2595,7 +2595,7 @@ section.cart {
.left-side {
.misc-controls {
display: block;
top:160px;
top: 300px;
div {
button {

View File

@ -80,7 +80,8 @@ return [
'ratingreviews' => ':rating تقيمات & :review باء-الاستعراضات',
'star' => 'نجم',
'percentage' => ':percentage %',
'id-star' => 'نجم'
'id-star' => 'نجم',
'name' => 'اسم',
],
'customer' => [
@ -203,6 +204,12 @@ return [
'create' => [
'page-title' => 'إضاف عنوان',
'company_name' => 'اسم الشركة',
'first_name' => 'الاسم الاول',
'last_name' => 'الكنية',
// Vat Id num
'vat_id' => 'رقم تعريف الضريبة على القيمة المضافة',
'street-address' => 'عنوان الشارع',
'title' => 'أضف العنوان',
'address1' => 'العنوان سطر 1',
'country' => 'البلد',

View File

@ -87,7 +87,7 @@ return [
'star' => 'Star',
'percentage' => ':percentage %',
'id-star' => 'star',
'name' => 'Name'
'name' => 'Name',
],
'customer' => [
@ -227,6 +227,7 @@ return [
'first_name' => 'First name',
'last_name' => 'Last name',
'vat_id' => 'Vat id',
'vat_help_note' => '[Note: Use Country Code with VAT Id. Eg. INV01234567891]',
'title' => 'Add Address',
'street-address' => 'Street Address',
'country' => 'Country',

View File

@ -207,6 +207,10 @@ return [
'create' => [
'page-title' => 'Cliente - Adicionar Endereço',
'title' => 'Novo Endereço',
'company_name' => 'Nome da empresa',
'first_name' => 'Primeiro nome',
'last_name' => 'Último nome',
'vat_id' => 'ID do IVA',
'address1' => 'Endereço Linha 1',
'street-address' => 'Endereço',
'country' => 'País',

View File

@ -45,7 +45,9 @@
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}</label>
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}
<span class="help-note">{{ __('shop::app.customer.account.address.create.vat_help_note') }}</span>
</label>
<input type="text" class="control" name="vat_id" value="{{ old('vat_id') }}"
v-validate="''" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.vat_id') }}&quot;">
<span class="control-error" v-if="errors.has('vat_id')">@{{ errors.first('vat_id') }}</span>

View File

@ -46,7 +46,9 @@
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}</label>
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}
<span class="help-note">{{ __('shop::app.customer.account.address.create.vat_help_note') }}</span>
</label>
<input type="text" class="control" name="vat_id" value="{{ old('vat_id') ?: $address->vat_id }}"
v-validate="''" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.vat_id') }}&quot;">
<span class="control-error" v-if="errors.has('vat_id')">@{{ errors.first('vat_id') }}</span>

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

After

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"/js/velocity.js": "/js/velocity.js?id=86ab12533244dd4304cc",
"/css/velocity.css": "/css/velocity.css?id=1027f2c6d88fa0c74fa0",
"/js/velocity.js": "/js/velocity.js?id=50ea01bd19c367308b08",
"/css/velocity.css": "/css/velocity.css?id=e9266605aba73153bf0f",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=612d35e452446366eef7"
}

View File

@ -34,7 +34,9 @@ class AdminHelper
{
$data = request()->all();
$type = 'category_icon_path';
$category = $this->categoryRepository->findOrFail($category);
if (! $category instanceof \Webkul\Category\Models\Category)
$category = $this->categoryRepository->findOrFail($category);
$category = $this->uploadImage($category, $data, $type);

View File

@ -193,5 +193,18 @@ class Helper extends Review
return $reviews;
}
public function jsonTranslations()
{
$currentLocale = app()->getLocale();
$path = __DIR__ . "/../Resources/lang/$currentLocale/app.php";
if (is_string($path) && is_readable($path)) {
return include $path;
}
return [];
}
}

View File

@ -2,15 +2,15 @@
namespace Webkul\Velocity\Http\Controllers\Admin;
use DB;
use Illuminate\Support\Facades\Storage;
use Webkul\Velocity\Repositories\MetadataRepository;
use Illuminate\Support\Str;
use Webkul\Velocity\Repositories\VelocityMetadataRepository;
/**
* Category Controller
*
* @author Shubham Mehrotra <shubhammehrotra.symfony@webkul.com> @shubhwebkul
* @author Vivek Sharma <viveksh047@webkul.com> @vivek-webkul
* @copyright 2019 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
@ -33,14 +33,17 @@ class ConfigurationController extends Controller
VelocityMetadataRepository $velocityMetadataRepository
) {
$this->_config = request('_config');
$this->velocityHelper = app('Webkul\Velocity\Helpers\Helper');
$this->velocityMetaDataRepository = $velocityMetadataRepository;
}
public function renderMetaData()
{
$velocityHelper = app('Webkul\Velocity\Helpers\Helper');
$velocityMetaData = $velocityHelper->getVelocityMetaData();
$velocityMetaData = $this->velocityHelper->getVelocityMetaData();
$velocityMetaData->advertisement = $this->manageAddImages(json_decode($velocityMetaData->advertisement, true));
return view($this->_config['view'], [
'metaData' => $velocityMetaData
@ -60,11 +63,15 @@ class ConfigurationController extends Controller
];
}
$velocityMetaData = $this->velocityMetaDataRepository->findorFail($id);
$advertisement = json_decode($velocityMetaData->advertisement, true);
$params['advertisement'] = [];
foreach ($params['images'] as $index => $advertisement) {
if ($advertisement['image_1'] !== "") {
$params['advertisement'][$index] = $this->uploadAdvertisementImages($advertisement, $index);
if ( isset($params['images'])) {
foreach ($params['images'] as $index => $images) {
$params['advertisement'][$index] = $this->uploadAdvertisementImages($images, $index, $advertisement);
}
}
@ -92,24 +99,42 @@ class ConfigurationController extends Controller
return redirect()->route($this->_config['redirect']);
}
public function uploadAdvertisementImages($data, $index)
public function uploadAdvertisementImages($data, $index, $advertisement)
{
$type = 'images';
$request = request();
$save_image = [];
$advertisement = [];
foreach ($data as $imageId => $image) {
$file = $type . '.' . $index . '.' . $imageId;
$dir = "velocity/$type";
$file = 'images.' . $index . '.' . $imageId;
$dir = 'velocity/images';
if ($request->hasFile($file)) {
Storage::delete($dir . $file);
if (Str::contains($imageId, 'image_')) {
if (request()->hasFile($file) && $image) {
Storage::delete($dir . $file);
$advertisement[$imageId] = $request->file($file)->store($dir);
$save_image[substr($imageId, 6, 1)] = request()->file($file)->store($dir);
}
} else {
if ( isset($advertisement[$index][$imageId]) && $advertisement[$index][$imageId]) {
$save_image[$imageId] = $advertisement[$index][$imageId];
unset($advertisement[$index][$imageId]);
}
if (request()->hasFile($file) && isset($advertisement[$index][$imageId])) {
Storage::delete($advertisement[$index][$imageId]);
$save_image[$imageId] = request()->file($file)->store($dir);
}
}
}
return $advertisement;
if ( isset($advertisement[$index]) && $advertisement[$index]) {
foreach ($advertisement[$index] as $imageId) {
Storage::delete($imageId);
$save_image[$imageId] = '';
}
}
return $save_image;
}
public function uploadImage($data, $index)
@ -129,4 +154,23 @@ class ConfigurationController extends Controller
return $image;
}
public function manageAddImages($add_images)
{
$images_path = [];
foreach ($add_images as $add_id => $images) {
foreach ($images as $key => $image) {
if ( $image ) {
$images_path[$add_id][] = [
'id' => $key,
'type' => null,
'path' => $image,
'url' => Storage::url($image)
];
}
}
}
return $images_path;
}
}

View File

@ -221,7 +221,7 @@ use Webkul\Velocity\Repositories\Product\ProductRepository as VelocityProductRep
'image' => $productImage,
'slug' => $product->url_key,
'priceHTML' => view('shop::products.price', ['product' => $product])->render(),
'totalReviews' => $totalReviews,
'totalReviews' => trans('velocity::app.products.ratings', [ 'totalRatings' => $totalReviews]),
'avgRating' => $avgRatings,
'firstReviewText' => trans('velocity::app.products.be-first-review'),
'addToCartHtml' => view('shop::products.add-to-cart', [

View File

@ -3,7 +3,10 @@
namespace Webkul\Velocity\Providers;
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Cache;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;
use Webkul\Velocity\Facades\Velocity as VelocityFacade;
@ -30,24 +33,11 @@ class VelocityServiceProvider extends ServiceProvider
$this->app->register(EventServiceProvider::class);
$this->loadGloableVariables();
$this->loadPublishableAssets();
$this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
$this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'velocity');
$this->publishes([
__DIR__ . '/../../publishable/assets/' => public_path('themes/velocity/assets'),
], 'public');
$this->publishes([
__DIR__ . '/../Resources/views/shop' => resource_path('themes/velocity/views'),
]);
$this->loadViewsFrom(__DIR__ . '/../Resources/views', 'velocity');
$velocityHelper = app('Webkul\Velocity\Helpers\Helper');
$velocityMetaData = $velocityHelper->getVelocityMetaData();
view()->share('showRecentlyViewed', true);
view()->share('velocityMetaData', $velocityMetaData);
$this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'velocity');
}
/**
@ -58,9 +48,7 @@ class VelocityServiceProvider extends ServiceProvider
public function register()
{
$this->registerConfig();
$this->registerFacades();
}
/**
@ -89,4 +77,30 @@ class VelocityServiceProvider extends ServiceProvider
$loader = AliasLoader::getInstance();
$loader->alias('velocity', VelocityFacade::class);
}
// this function will provide global variables shared by view (blade files)
private function loadPublishableAssets()
{
// $this->publishes([
// __DIR__ . '/../../publishable/assets/' => public_path('themes/velocity/assets'),
// ], 'public');
// $this->publishes([
// __DIR__ . '/../Resources/views/shop' => resource_path('themes/velocity/views'),
// ]);
return true;
}
// this function will provide global variables shared by view (blade files)
private function loadGloableVariables()
{
$velocityHelper = app('Webkul\Velocity\Helpers\Helper');
$velocityMetaData = $velocityHelper->getVelocityMetaData();
view()->share('showRecentlyViewed', true);
view()->share('velocityMetaData', $velocityMetaData);
return true;
}
}

View File

@ -42,7 +42,7 @@
<template v-if="(! (viewAll == 'false' || viewAll == '')) && viewAll">
<div>
<a :href="viewAll" :title="`View all ${headerHeading} products`" class="remove-decoration link-color">
<h2 class="fs16 fw6 cursor-pointer tab">View All</h2>
<h2 class="fs16 fw6 cursor-pointer tab">{{ __('home.view-all') }}</h2>
</a>
</div>
</template>
@ -78,7 +78,7 @@
return {
tabs: tabs,
headerHeading: this.heading ? this.heading : 'Products',
headerHeading: this.heading ? this.heading : this.__('products.text'),
}
},

View File

@ -18,7 +18,7 @@
<div class="product-rating" v-if="product.totalReviews && product.totalReviews > 0">
<star-ratings :ratings="product.avgRating"></star-ratings>
<span>{{ product.totalReviews }} Ratings</span>
<span>{{ product.totalReviews }}</span>
</div>
<div class="product-rating" v-else>

View File

@ -30,7 +30,7 @@
</div>
<span class="category-title">{{ category['name'] }}</span>
<i
class="rango-arrow-right pr15"
class="rango-arrow-right pr15 pull-right"
@mouseout="toggleSidebar(id, $event, 'mouseout')"
@mouseover="toggleSidebar(id, $event, 'mouseover')"
v-if="category.children.length && category.children.length > 0">

View File

@ -0,0 +1,17 @@
module.exports = {
methods: {
/**
* Translate the given key.
*/
__(key) {
let splitedKey = key.split('.');
let translation = window._translations;
splitedKey.forEach(key => {
translation = translation[key];
});
return translation
}
},
}

View File

@ -47,6 +47,7 @@ window.eventBus = new Vue();
$(document).ready(function () {
// define a mixin object
Vue.mixin(require('./UI/components/trans'));
Vue.mixin({
data: function () {
return {

View File

@ -311,7 +311,6 @@ body {
.no-padding {
padding: 0px !important;
cursor: default;
}
.btn-normal {
@ -491,11 +490,11 @@ header {
color: $font-color;
display: inline-block;
.material-icons {
left: 0px;
top: 0px;
font-size: 26px;
position: absolute;
i {
~ span {
top: -2px;
left: -4px;
}
}
}
}

View File

@ -137,7 +137,6 @@
.limiter::after {
margin-left: 10px;
content: 'per page';
}
}
}
@ -224,12 +223,13 @@
margin: 0 5px 10px 10px;
.product-image-container {
height: 225px;
max-height: 225px;
position: relative;
img {
width: 100%;
height: 100%;
max-height: 225px;
}
}
@ -299,7 +299,9 @@
}
~ .wishlist-icon {
right: 10px;
right: 0;
margin: 0;
padding: 0;
position: absolute;
}
}
@ -657,7 +659,7 @@
.cart-item-list {
> .row {
margin-bottom: 20px;
margin-bottom: 40px;
}
> .row:last-child {
@ -682,10 +684,6 @@
font-size: 18px;
}
}
> .row:not(:last-child) {
margin-bottom: 10px;
}
}
}
@ -1292,6 +1290,8 @@
}
.address-container {
display: none;
.address-holder {
margin-top: 15px;
@ -1312,6 +1312,21 @@
display: inline-block;
}
}
.add-address-button {
height: 100%;
display: table;
text-align: center;
> div {
display: table-cell;
vertical-align: middle;
span {
vertical-align: super;
}
}
}
}
}
}
@ -1454,9 +1469,14 @@
}
}
.price-label {
margin-right: 6px;
}
.product-price {
span:nth-child(1),
.special-price {
.special-price,
.price-from > span:not(:nth-child(2)) {
font-size: 20px;
font-weight: 600;
}
@ -1558,7 +1578,6 @@
.rango-arrow-right {
top: 4px;
float: right;
position: relative;
}
@ -1666,9 +1685,6 @@
.grouped-product-container {
.grouped-product-list {
padding: 15px 0;
border-top: solid 1px rgba(162, 162, 162, 0.2);
ul {
li {
width: 100%;
@ -2164,3 +2180,11 @@
}
}
}
.vue-slider {
max-width: 97%;
}
.profile-update-form {
width: 800px;
}

View File

@ -169,6 +169,10 @@
display: none;
}
}
.quantity {
width: unset;
}
}
.thumb-list {

View File

@ -4,8 +4,8 @@ body {
.velocity-divide-page {
.right {
padding-right: 230px;
padding-left: 0 !important;
padding-right: 230px !important;
}
}
@ -97,6 +97,12 @@ body {
text-align: left;
}
}
+ .account-modal {
left: 0;
right: 0;
margin-left: 0;
}
}
.locale-icon {
@ -105,5 +111,158 @@ body {
}
}
}
#cart-modal-content {
left: 0;
}
.category-list-container{
.sub-categories {
left: -100%;
}
li {
a {
padding: 7px 15px 5px 15px;
}
}
}
.filters-container {
.view-mode {
> div {
padding-right: 6px;
}
}
}
.filters-container {
.toolbar-wrapper {
> div {
label {
margin-right: 0px;
margin-left: 10px;
}
}
}
}
.filter-attributes-content {
margin-left: 7px;
margin-right: 0px;
}
.filter-attributes-item {
input[type=checkbox] {
+ span {
margin-right: 10px;
}
}
.filter-input {
margin-right: 0;
}
}
.product-card-new {
.card-body {
.cart-wish-wrap {
margin-right: 0 !important;
.add-to-cart-btn {
padding-left: 35px !important;
}
}
.wishlist-icon {
left: 0;
right: unset;
}
.product-name {
width: unset;
}
}
}
.account-content {
.account-layout {
&.right {
width: calc(100% - 20px);
padding-right: 250px !important;
}
.account-table-content {
.address-holder {
> div {
padding-right: 0px;
padding-left: 15px;
}
}
}
}
.sidebar {
.customer-sidebar {
border-left: 1px solid $border-general;
.navigation {
li i.icon {
padding-right: 0;
padding-left: 5px;
}
}
}
}
}
// product page
.product-detail {
.right {
.info {
margin-right: 0px;
> h2, div {
padding-right: 0px;
}
}
}
.thumb-list {
left: 0;
margin-right: 0;
}
.wishlist-icon {
padding-right: 10px;
}
}
// Shared
.text-right {
text-align: left !important;
}
.text-left {
text-align: right !important;
}
.pl0 {
padding-right: 0px !important;
}
.pl10 {
padding-right: 10px !important;
}
.rango-arrow-right::before {
content: "\E907";
}
.styled-select {
+ .select-icon-container {
.select-icon {
left: 6px;
right: unset;
}
}
}
.ml15 {
margin-right: 15px !important;
}
}
}

View File

@ -198,7 +198,7 @@
cursor: pointer;
}
.cursor-not-allowed {
cursor: not-allowed;
cursor: not-allowed !important;
}
.cursor-default {
cursor: default;
@ -703,11 +703,15 @@ select:focus,
.control-error {
color: $color-danger;
}
.mandatory::after {
content: "*";
font-size: 16px;
margin-left: -1px;
color: $color-danger;
.mandatory {
width: 100%;
&::after {
content: "*";
font-size: 16px;
margin-left: -1px;
color: $color-danger;
}
}
a {
@ -864,7 +868,8 @@ button[disabled] {
.has-error {
input,
select {
select,
textarea {
border-color: $border-danger !important;
}
}

View File

@ -1,15 +1,33 @@
<?php
return [
'admin' => [
'general' => [
'locale_logo' => 'شعار اللغة',
],
],
'customer' => [
'login-form' => [
'customer-login' => 'تسجيل دخول العميل',
'registered-user' => 'مستخدم مسجل',
'form-login-text' => 'إذا كان لديك حساب ، فقم بتسجيل الدخول باستخدام عنوان بريدك الإلكتروني.',
'sign-up' => 'سجل',
'new-customer' => 'عميل جديد',
'registered-user' => 'مستخدم مسجل',
'customer-login' => 'تسجيل دخول العميل',
'your-email-address' => 'عنوان بريدك الإلكتروني',
'form-login-text' => '.إذا كان لديك حساب ، فقم بتسجيل الدخول باستخدام عنوان بريدك الإلكتروني',
],
'signup-form' => [
'login' => 'تسجيل الدخول',
'become-user' => 'كن مستخدم',
'user-registration' => 'تسجيل المستخدم',
'form-sginup-text' => '.إذا كنت جديدا على متجرنا ، فنحن نحرص على أن تكون أنت عضوًا',
],
'forget-password' => [
'login' => 'تسجيل الدخول',
'forgot-password' => 'هل نسيت كلمة المرور',
'recover-password' => 'إستعادة كلمة المرور',
'recover-password-text' => '.إذا نسيت كلمة المرور ، فاستردها بإدخال عنوان بريدك الإلكتروني',
]
],
'menu-navbar' => [
@ -17,39 +35,90 @@ return [
],
'header' => [
'all-categories' => 'جميع الفئات',
'search-text' => 'ابحث عن منتجات هنا',
'welcome-message' => 'أهلا بك, :customer_name',
'all-categories' => 'جميع الفئات',
'guest' => 'زائر'
],
'minicart' => [
'checkout' => 'الدفع',
'cart' => 'عربة التسوق',
'view-cart' => 'عرض العربة',
'checkout' => 'الدفع',
],
'error' => [
'go-to-home' => 'الذهاب إلى المنزل',
'page-lost-short' => 'الصفحة فقدت المحتوى',
'page-lost-description' => "الصفحة التي تبحث عنها غير متوفرة. حاول البحث مرة أخرى أو استخدم زر العودة للخلف أدناه.",
],
'home' => [
'view-all' => 'عرض الكل',
'add-to-cart' => 'أضف إلى السلة',
'payment-methods' => 'طرق الدفع',
'shipping-methods' => 'طرق الشحن',
'hot-categories' => 'الفئات الساخنة',
'popular-categories' => 'فئات شعبية',
'customer-reviews' => 'آراء المستهلكين',
],
'products' => [
'short-description' => 'أوصاف قصيرة',
'more-infomation' => 'معلومات اكثر',
'text' => 'منتجات',
'details' => 'تفاصيل',
'customer-rating' => 'تقييم العملاء',
'reviewed' => 'التعليق',
'reviews' => 'التعليقات',
'view-all-reviews' => 'عرض جميع التقييمات',
'write-your-review' => 'اكتب مراجعتك',
'quick-view' => 'نظرة سريعة',
'recently-viewed' => 'المنتجات المعروضة مؤخرا',
'not-available' => 'غير متوفر',
'review-by' => 'روجع من قبل',
'be-first-review' => 'كن أول من يكتب نقد',
'not-available' => 'غير متوفر',
'customer-rating' => 'تقييم العملاء',
'submit-review' => 'إرسال المراجعة',
]
'more-infomation' => 'معلومات اكثر',
'short-description' => 'أوصاف قصيرة',
'ratings' => ':totalRatings تصنيفات',
'write-your-review' => 'اكتب مراجعتك',
'be-first-review' => 'كن أول من يكتب نقد',
'view-all-reviews' => 'عرض جميع التقييمات',
'recently-viewed' => 'المنتجات المعروضة مؤخرا',
],
'shop' => [
'gender' => [
'other' => 'آخر',
'male' => 'الذكر',
'female' => 'أنثى',
],
'general' => [
'view' => 'رأي',
'filter' => 'منقي',
'update' => 'تحديث',
'addresses' => 'عناوين',
'orders' => 'الطلب #٪ s',
'reviews' => 'التعليقات',
'top-brands' => 'ارقى الماركات',
'new-password' => 'كلمة مرور جديدة',
'downloadables' => 'المنتجات القابلة للتحميل',
'confirm-new-password' => 'تأكيد كلمة المرور الجديدة',
'enter-current-password' => 'أدخل كلمة المرور الحالية',
'alert' => [
'info' => 'معلومات',
'error' => 'خطأ',
'success' => 'نجاح',
'warning' => 'تحذير',
],
],
'wishlist' => [
'add-wishlist-text' => 'إضافة منتج إلى قائمة الأمنيات',
'remove-wishlist-text' => 'أزل المنتج من قائمة الأمنيات'
]
],
'responsive' => [
'header' => [
'greeting' => 'أهلا بك, :customer !',
]
],
]
?>

View File

@ -4,10 +4,10 @@ return [
'admin' => [
'system' => [
'velocity' => [
'extension_name' => 'Velocity Theme',
'settings' => 'Settings',
'general' => 'General',
'category' => 'Category',
'settings' => 'Settings',
'extension_name' => 'Velocity Theme',
'error-module-inactive' => 'Warning: Velocity theme status is inactive',
],
@ -23,42 +23,42 @@ return [
'inactive' => 'Inactive',
],
'category' => [
'icon-status' => 'Category Icon Status',
'active' => 'Active',
'inactive' => 'Inactive',
'right' => 'Right',
'all' => 'All',
'left' => 'Left',
'right' => 'Right',
'active' => 'Active',
'custom' => 'Custom',
'inactive' => 'Inactive',
'image-alignment' => 'Image Alignment',
'icon-status' => 'Category Icon Status',
'image-status' => 'Category Image Status',
'sub-category-show' => 'Show Sub Category',
'image-height' => 'Image\'s Height [in Pixel]',
'image-width' => 'Image\'s Width [in Pixel]',
'image-alignment' => 'Image Alignment',
'show-tooltip' => 'Show Category\'s Tooltip',
'sub-category-show' => 'Show Sub Category',
'all' => 'All',
'custom' => 'Custom',
'num-sub-category' => 'Number Of Sub Category',
]
],
'layouts' => [
'velocity' => 'Velocity',
'header-content' => 'Header Content',
'cms-pages' => 'CMS Pages',
'meta-data' => 'Meta Data',
'category-menu' => 'Category Menu',
'header-content' => 'Header Content',
],
'contents' => [
'title' => 'Content Pages List',
'add-title' => 'Add Content',
'btn-add-content' => 'Add New Content',
'save-btn-title' => 'Save Content',
'active' => 'Active',
'inactive' => 'Inactive',
'select' => '-- Select --',
'self' => 'Self',
'active' => 'Active',
'new-tab' => 'New Tab',
'inactive' => 'Inactive',
'title' => 'Content List',
'select' => '-- Select --',
'add-title' => 'Add Content',
'btn-add-content' => 'Add Content',
'save-btn-title' => 'Save Content',
'autocomplete' => '[Autocomplete]',
'search-hint' => 'Search product here...',
'no-result-found' => 'No record found.',
'search-hint' => 'Search product here...',
'mass-delete-success' => 'Selected content deleted successfully.',
'tab' => [
'page' => 'Page Setting',
@ -67,54 +67,54 @@ return [
],
'page' => [
'title' => 'Title',
'position' => 'Position',
'status' => 'Status',
'position' => 'Position',
],
'content' => [
'content-type' => 'Content Type',
'custom-title' => 'Custom Title',
'custom-heading' => 'Custom Heading',
'page-link' => 'Page Link [e.g. http://example.com/../../]',
'category-slug' => 'Category Slug',
'link-target' => 'Page Link Target',
'catalog-type' => 'Product Catalog Type',
'custom-product' => 'Store Products',
'custom-heading' => 'Custom Heading',
'catalog-type' => 'Product Catalog Type',
'static-description' => 'Content Description',
'page-link' => 'Page Link [e.g. http://example.com/../../]',
],
'datagrid' => [
'id' => 'Content Id',
'id' => 'Id',
'title' => 'Title',
'position' => 'Position',
'status' => 'Status',
'position' => 'Position',
'content-type' => 'Content Type',
]
],
'meta-data' => [
'footer' => 'Footer',
'title' => 'Velocity meta data',
'activate-slider' => 'Activate Slider',
'home-page-content' => 'Home Page Content',
'footer-left-content' => 'Footer Left Content',
'subscription-content' => 'Subscription bar Content',
'activate-slider' => 'Activate Slider',
'sidebar-categories' => 'Sidebar Categories',
'footer-left-raw-content' => '<p>We love to craft softwares and solve the real world problems with the binaries. We are highly committed to our goals. We invest our resources to create world class easy to use softwares and applications for the enterprise business with the top notch, on the edge technology expertise.</p>',
'footer-middle-content' => 'Footer Middle Content',
'update-meta-data' => 'Update Meta Data',
'advertisement-four' => 'Advertisement Four Images',
'advertisement-three' => 'Advertisement Three Images',
'advertisement-two' => 'Advertisement Two Images',
'advertisement-one' => 'Advertisement One Images',
'product-view-image' => 'Product View Image',
'footer' => 'Footer',
'product-policy' => 'Product Policy',
'slider-path' => 'Slider Path',
'category-logo' => 'Category logo',
'product-policy' => 'Product Policy',
'update-meta-data' => 'Update Meta Data',
'product-view-image' => 'Product View Image',
'advertisement-two' => 'Advertisement Two Images',
'advertisement-one' => 'Advertisement One Images',
'footer-middle-content' => 'Footer Middle Content',
'advertisement-four' => 'Advertisement Four Images',
'advertisement-three' => 'Advertisement Three Images',
],
'category' => [
'save-btn-title' => 'Save Menu',
'title' => 'Category Menu List',
'add-title' => 'Add Menu Content',
'edit-title' => 'Edit Menu Content',
'btn-add-category' => 'Add Category Content',
'save-btn-title' => 'Save Menu',
'datagrid' => [
'category-id' => 'Category Id',
'category-name' => 'Category Name',
@ -124,13 +124,13 @@ return [
'tab' => [
'general' => 'General',
],
'select' => '-- Select --',
'select-category' => 'Choose Category',
'icon-class' => 'Icon Class',
'tooltip-content' => 'Tooltip Content',
'status' => 'Status',
'active' => 'Active',
'inactive' => 'Inactive',
'select' => '-- Select --',
'icon-class' => 'Icon Class',
'select-category' => 'Choose Category',
'tooltip-content' => 'Tooltip Content',
'mass-delete-success' => 'Selected categories menu deleted successfully.',
],
'general' => [
@ -139,121 +139,127 @@ return [
],
'home' => [
'page-title' => 'Velocity-Home',
'view-all' => 'View All',
'add-to-cart' => 'Add To Cart',
'hot-categories' => 'Hot Categories',
'popular-categories' => 'Popular Categories',
'payment-methods' => 'Payment Methods',
'customer-reviews' => 'Customer Reviews',
'shipping-methods' => 'Shipping Methods',
'popular-categories' => 'Popular Categories',
],
'header' => [
'title' => 'Account',
'welcome-message' => 'Welcome, :customer_name',
'dropdown-text' => 'Manage Cart, Orders & Wishlist',
'sign-in' => 'Sign In',
'sign-up' => 'Sign Up',
'account' => 'Account',
'cart' => 'Cart',
'profile' => 'Profile',
'wishlist' => 'Wishlist',
'cart' => 'Cart',
'guest' => 'Guest',
'logout' => 'Logout',
'title' => 'Account',
'account' => 'Account',
'profile' => 'Profile',
'wishlist' => 'Wishlist',
'all-categories' => 'All Categories',
'search-text' => 'Search products here',
'all-categories' => 'All Categories'
'welcome-message' => 'Welcome, :customer_name',
'dropdown-text' => 'Manage Cart, Orders & Wishlist',
],
'menu-navbar' => [
'text-category' => 'Shop by Category',
'text-more' => 'More',
'text-category' => 'Shop by Category',
],
'minicart' => [
'view-cart' => 'View Cart',
'checkout' => 'Checkout',
'cart' => 'Cart',
'view-cart' => 'View Cart',
],
'checkout' => [
'checkout' => 'Checkout',
'qty' => 'Qty',
'checkout' => 'Checkout',
'cart' => [
'cart-subtotal' => 'Cart Subtotal',
'view-cart' => 'View Cart',
'cart-summary' => 'Cart Summary',
],
'proceed' => 'Proceed to checkout',
'sub-total' => 'Sub Total',
'items' => 'Items',
'qty' => 'Qty',
'items' => 'Items',
'subtotal' => 'Subtotal',
'sub-total' => 'Sub Total',
'proceed' => 'Proceed to checkout',
],
'customer' => [
'login-form' => [
'customer-login' => 'Customer Login',
'registered-user' => 'Registered User',
'form-login-text' => 'If you have an account, sign in with your email address.',
'sign-up' => 'Sign up',
'new-customer' => 'New Customer',
'customer-login' => 'Customer Login',
'registered-user' => 'Registered User',
'your-email-address' => 'Your email address',
'form-login-text' => 'If you have an account, sign in with your email address.',
],
'signup-form' => [
'user-registration' => 'User Registration',
'login' => 'Login',
'become-user' => 'Become User',
'user-registration' => 'User Registration',
'form-sginup-text' => 'If you are new to our store, we glab to have you as member.',
],
'forget-password' => [
'login' => 'Login',
'forgot-password' => 'Forgot Password',
'recover-password' => 'Recover Password',
'recover-password-text' => 'If you forgot your password, recover it by entering your email address.',
'forgot-password' => 'Forgot Password',
'login' => 'Login',
]
],
'error' => [
'go-to-home' => 'Go to home',
'page-lost-short' => 'Page lost content',
'page-lost-description' => "The page you're looking for isn't available. Try to search again or use the Go Back button below.",
'go-to-home' => 'Go to home'
],
'products' => [
'short-description' => 'Short Descriptions',
'more-infomation' => 'More Information',
'text' => 'Products',
'details' => 'Details',
'customer-rating' => 'Customer Rating',
'reviews' => 'Reviews',
'reviewed' => 'Reviewed',
'review-by' => 'Review by',
'quick-view' => 'Quick View',
'not-available' => 'Not Available',
'submit-review' => 'Submit Review',
'ratings' => ':totalRatings Ratings',
'customer-rating' => 'Customer Rating',
'more-infomation' => 'More Information',
'view-all-reviews' => 'View All Reviews',
'write-your-review' => 'Write Your Review',
'quick-view' => 'Quick View',
'short-description' => 'Short Descriptions',
'recently-viewed' => 'Recently Viewed Products',
'not-available' => 'Not Available',
'review-by' => 'Review by',
'be-first-review' => 'Be the first to write a review',
'submit-review' => 'Submit Review',
],
'shop' => [
'gender' => [
'male' => 'Male',
'female' => 'Female',
'other' => 'Other',
'female' => 'Female',
],
'general' => [
'update' => 'Update',
'enter-current-password' => 'Enter your current password',
'new-password' => 'New password',
'confirm-new-password' => 'Confirm new password',
'top-brands' => 'Top Brands',
'filter' => 'Filter',
'view' => 'View',
'addresses' => 'Addresses',
'reviews' => 'Reviews',
'filter' => 'Filter',
'orders' => 'Orders',
'update' => 'Update',
'reviews' => 'Reviews',
'addresses' => 'Addresses',
'top-brands' => 'Top Brands',
'new-password' => 'New password',
'downloadables' => 'Downloadable Products',
'confirm-new-password' => 'Confirm new password',
'enter-current-password' => 'Enter your current password',
'alert' => [
'info' => 'Info',
'error' => 'Error',
'success' => 'Success',
'warning' => 'Warning',
],
],
'wishlist' => [
'add-wishlist-text' => 'Add product to wishlist',

View File

@ -0,0 +1,124 @@
<?php
return [
'admin' => [
'general' => [
'locale_logo' => 'Logotipo da localidade',
],
],
'customer' => [
'login-form' => [
'sign-up' => 'inscrever-se',
'new-customer' => 'Novo cliente',
'customer-login' => 'Login do cliente',
'registered-user' => 'Usuário Registrado',
'your-email-address' => 'Seu endereço de email',
'form-login-text' => 'Se você possui uma conta, entre com seu endereço de e-mail.',
],
'signup-form' => [
'login' => 'Conecte-se',
'become-user' => 'Torne-se usuário',
'user-registration' => 'Registro de Usuário',
'form-sginup-text' => 'Se você é novo em nossa loja, desejamos tê-lo como membro.',
],
'forget-password' => [
'login' => 'Conecte-se',
'forgot-password' => 'Esqueceu a senha',
'recover-password' => 'Recuperar Senha',
'recover-password-text' => 'Se você esqueceu sua senha, recupere-a digitando seu endereço de e-mail.',
]
],
'menu-navbar' => [
'text-category' => 'Compre por categoria',
],
'header' => [
'guest' => 'Hóspede',
'search-text' => 'Pesquise produtos aqui',
'all-categories' => 'todas as categorias',
'welcome-message' => 'Bem-vinda, :customer_name',
],
'minicart' => [
'cart' => 'Carrinho',
'view-cart' => 'Ver carrinho',
'checkout' => 'Verificação de saída',
],
'error' => [
'go-to-home' => 'Vá para casa',
'page-lost-short' => 'Conteúdo perdido da página',
'page-lost-description' => "A página que você está procurando não está disponível. Tente pesquisar novamente ou use o botão Voltar atrás abaixo.",
],
'home' => [
'view-all' => 'Ver tudo',
'add-to-cart' => 'Adicionar ao carrinho',
'hot-categories' => 'Categorias quentes',
'shipping-methods' => 'Métodos de Envio',
'payment-methods' => 'Métodos de Pagamento',
'popular-categories' => 'Categorias populares',
'customer-reviews' => 'Opinião dos consumidores',
],
'products' => [
'text' => 'Produtos',
'details' => 'Detalhes',
'reviewed' => 'Revisada',
'reviews' => 'Avaliações',
'review-by' => 'Revisão por',
'quick-view' => 'Olhada rápida',
'submit-review' => 'Enviar revisão',
'not-available' => 'Não disponível',
'ratings' => ':totalRatings Avaliações',
'more-infomation' => 'Mais Informações',
'short-description' => 'Descrições breves',
'customer-rating' => 'Avaliação do cliente',
'write-your-review' => 'Escreva sua revisão',
'view-all-reviews' => 'Ver todos os comentários',
'recently-viewed' => 'Produtos vistos recentemente',
'be-first-review' => 'Seja o primeiro a escrever um comentário',
],
'shop' => [
'gender' => [
'female' => 'Fêmea',
'male' => 'Masculino',
'other' => 'De outros',
],
'general' => [
'view' => 'Visão',
'filter' => 'Filtro',
'update' => 'Atualizar',
'orders' => 'Encomendas',
'reviews' => 'Avaliações',
'addresses' => 'Endereços',
'new-password' => 'Nova senha',
'top-brands' => 'Marcas de topo',
'downloadables' => 'Produtos para download',
'confirm-new-password' => 'Confirme a nova senha',
'enter-current-password' => 'Digite sua senha atual',
'alert' => [
'info' => 'Informações',
'error' => 'Erro',
'success' => 'Sucesso',
'warning' => 'Atenção',
],
],
'wishlist' => [
'add-wishlist-text' => 'Adicionar produto à lista de desejos',
'remove-wishlist-text' => 'Remover produto da lista de desejos',
],
],
'responsive' => [
'header' => [
'greeting' => 'Bem-vinda, :customer !',
]
],
]
?>

View File

@ -6,13 +6,17 @@
{{ __('velocity::app.admin.contents.content.category-slug') }}
</label>
@php
$pageTarget = isset($locale) ? (old($locale)['page_link'] ?? (isset($content) ? $content->translate($locale)['page_link'] : '')) : '';
@endphp
<input
type="text"
id="page_link"
class="control"
name="page_link"
name="{{$locale}}[page_link]"
v-validate="'required|max:150'"
value="{{ isset($locale) ? (old($locale)['page_link'] ?? $content->translate($locale)['page_link']) : '' }}"
value="{{ $pageTarget }}"
data-vv-as="&quot;{{ __('velocity::app.admin.contents.content.page-link') }}&quot;" />
<span class="control-error" v-if="errors.has('page_link')">
@ -26,7 +30,7 @@
</label>
@php
$linkTarget = isset($locale) ? (old($locale)['link_target'] ?? $content->translate($locale)['link_target']) : '';
$linkTarget = isset($locale) ? (old($locale)['link_target'] ?? (isset($content) ? $content->translate($locale)['link_target'] : '')) : '';
@endphp
<select class="control" id="link_target" name="{{$locale}}[link_target]" value="">

View File

@ -6,7 +6,7 @@
@push('scripts')
<script type="text/x-template" id="catalog-product-template">
<div>
<?php $catalogType = old($locale)['catalog_type'] ?? $content->translate($locale)['catalog_type']; ?>
<?php $catalogType = old($locale)['catalog_type'] ?? (isset($content) ? $content->translate($locale)['catalog_type'] : ''); ?>
<div class="control-group" :class="[errors.has('{{$locale}}[catalog_type]') ? 'has-error' : '']">
<label for="catalog_type" class="required">

View File

@ -7,6 +7,8 @@
@section('content')
<div class="content">
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
<form method="POST" action="" @submit.prevent="onSubmit" enctype="multipart/form-data">
<div class="page-header">

View File

@ -6,12 +6,6 @@
@section('content')
<div class="content">
<div class="page-header">
<div class="page-title">
<h1>{{ __('velocity::app.admin.meta-data.title') }}</h1>
</div>
</div>
<form
method="POST"
@submit.prevent="onSubmit"
@ -25,6 +19,17 @@
@csrf
<div class="page-header">
<div class="page-title">
<h1>{{ __('velocity::app.admin.meta-data.title') }}</h1>
</div>
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('velocity::app.admin.meta-data.update-meta-data') }}
</button>
</div>
</div>
<accordian :title="'{{ __('admin::app.catalog.attributes.general') }}'" :active="false">
<div slot="body">
<div class="control-group">
@ -106,28 +111,48 @@
<div class="control-group">
<label>{{ __('velocity::app.admin.meta-data.advertisement-four') }}</label>
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[4]">
</image-wrapper>
@if(! isset($metaData->advertisement[4]))
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[4]">
</image-wrapper>
@else
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[4]" :images='@json($metaData->advertisement[4])'>
</image-wrapper>
@endif
</div>
<div class="control-group">
<label>{{ __('velocity::app.admin.meta-data.advertisement-three') }}</label>
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[3]">
</image-wrapper>
@if(! isset($metaData->advertisement[3]))
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[3]">
</image-wrapper>
@else
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[3]" :images='@json($metaData->advertisement[3])'>
</image-wrapper>
@endif
</div>
<div class="control-group">
<label>{{ __('velocity::app.admin.meta-data.advertisement-two') }}</label>
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[2]">
</image-wrapper>
@if(! isset($metaData->advertisement[2]))
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[2]">
</image-wrapper>
@else
<image-wrapper
:button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'"
input-name="images[2]" :images='@json($metaData->advertisement[2])'>
</image-wrapper>
@endif
</div>
{{-- <div class="control-group">
@ -185,10 +210,6 @@
</div>
</div>
</accordian>
<button class="btn btn-lg btn-primary" style="margin-top: 20px">
{{ __('velocity::app.admin.meta-data.update-meta-data') }}
</button>
</form>
</div>
@stop

View File

@ -32,11 +32,11 @@
type="button"
id="mini-cart"
@click="toggleMiniCart"
class="btn btn-link disable-box-shadow">
:class="`btn btn-link disable-box-shadow ${itemCount == 0 ? 'cursor-not-allowed' : ''}`">
<div class="mini-cart-content">
<i class="material-icons-outlined text-down-3">shopping_cart</i>
<span class="badge" v-text="itemCount"></span>
<span class="badge" v-text="itemCount" v-if="itemCount != 0"></span>
<span class="fs18 fw6 cart-text">{{ __('velocity::app.minicart.cart') }}</span>
</div>
<div class="down-arrow-container">

View File

@ -11,6 +11,15 @@
<cart-component></cart-component>
@endsection
@push('css')
<style type="text/css">
.quantity {
width: unset;
float: right;
}
</style>
@endpush
@push('scripts')
@include('shop::checkout.cart.coupon')
@ -26,7 +35,7 @@
{{ __('velocity::app.checkout.items') }}
</span>
<span class="col-2 fw6 fs16 no-padding text-center">
<span class="col-2 fw6 fs16 no-padding text-right">
{{ __('velocity::app.checkout.qty') }}
</span>
@ -67,17 +76,27 @@
</a>
<div class="product-details-content col-6">
<div class="row item-title">
<div class="row item-title no-margin">
<a
href="{{ route('shop.productOrCategory.index', $product->url_key) }}"
title="{{ $product->name }}"
class="unset col-12">
class="unset col-12 no-padding">
<span class="fs20 fw6 link-color">{{ $product->name }}</span>
</a>
</div>
<div class="row col-12">
@if (isset($item->additional['attributes']))
<div class="row col-12 no-padding no-margin">
@foreach ($item->additional['attributes'] as $attribute)
<b>{{ $attribute['attribute_name'] }} : </b>{{ $attribute['option_label'] }}</br>
@endforeach
</div>
@endif
<div class="row col-12 no-padding no-margin">
@include ('shop::products.price', ['product' => $product])
</div>
@ -130,7 +149,7 @@
</a>
</div>
</div>
<div class="product-quantity col-3 no-padding">
<quantity-changer
:control-name="'qty[{{$item->id}}]'"
@ -166,6 +185,16 @@
<span class="fs20 fw6 link-color">{{ $product->name }}</span>
</a>
@if (isset($item->additional['attributes']))
<div class="row col-12 no-padding no-margin">
@foreach ($item->additional['attributes'] as $attribute)
<b>{{ $attribute['attribute_name'] }} : </b>{{ $attribute['option_label'] }}</br>
@endforeach
</div>
@endif
<div class="col-12 no-padding">
@include ('shop::products.price', ['product' => $product])
</div>

View File

@ -72,7 +72,7 @@
<!--Footer-->
<div class="modal-footer">
<h2 class="col-6 text-left fw6">
{{ __('velocity::app.checkout.cart.cart-subtotal') }}
{{ __('shop::app.checkout.cart.cart-subtotal') }}
</h2>
{!! view_render_event('bagisto.shop.checkout.cart-mini.subtotal.before', ['cart' => $cart]) !!}
@ -83,16 +83,16 @@
</div>
<div class="modal-footer">
<a class="col-4 text-left fs16 link-color remove-decoration" href="{{ route('shop.checkout.cart.index') }}">
{{ __('velocity::app.checkout.cart.view-cart') }}
<a class="col text-left fs16 link-color remove-decoration" href="{{ route('shop.checkout.cart.index') }}">
{{ __('shop::app.minicart.view-cart') }}
</a>
<div class="col-8 text-right no-padding">
<div class="col text-right no-padding">
<a href="{{ route('shop.checkout.onepage.index') }}">
<button
type="button"
class="theme-btn fs16 fw6">
{{ __('velocity::app.checkout.checkout') }}
{{ __('shop::app.minicart.checkout') }}
</button>
</a>
</div>

View File

@ -14,6 +14,7 @@
<script type="text/x-template" id="checkout-template">
<div class="container">
<div id="checkout" class="checkout-process row offset-lg-1 col-lg-11 col-md-12">
<h1 class="col-12">{{ __('velocity::app.checkout.checkout') }}</h1>
<div class="col-lg-7 col-md-12">
@ -65,7 +66,7 @@
type="button"
class="theme-btn"
@click="placeOrder()"
:disabled="disable_button"
:disabled="!isPlaceOrderEnabled"
id="checkout-place-order-button">
{{ __('shop::app.checkout.onepage.place-order') }}
</button>
@ -119,6 +120,7 @@
disable_button: false,
reviewComponentKey: 0,
summeryComponentKey: 0,
isPlaceOrderEnabled: false,
new_billing_address: false,
showShippingSection: false,
showPaymentSection: false,
@ -228,8 +230,14 @@
document.body.style.cursor = 'wait';
this.savePayment();
}
this.isPlaceOrderEnabled = true;
} else {
this.isPlaceOrderEnabled = false;
}
});
} else {
this.isPlaceOrderEnabled = false;
}
},
@ -372,25 +380,30 @@
},
placeOrder: function() {
this.disable_button = true;
if (this.isPlaceOrderEnabled) {
this.disable_button = false;
this.isPlaceOrderEnabled = false;
this.$http.post("{{ route('shop.checkout.save-order') }}", {'_token': "{{ csrf_token() }}"})
.then(function(response) {
if (response.data.success) {
if (response.data.redirect_url) {
window.location.href = response.data.redirect_url;
} else {
window.location.href = "{{ route('shop.checkout.success') }}";
this.$http.post("{{ route('shop.checkout.save-order') }}", {'_token': "{{ csrf_token() }}"})
.then(function(response) {
if (response.data.success) {
if (response.data.redirect_url) {
window.location.href = response.data.redirect_url;
} else {
window.location.href = "{{ route('shop.checkout.success') }}";
}
}
}
})
.catch(error => {
})
.catch(error => {
this.disable_button = true;
window.flashMessages = [{'type': 'alert-error', 'message': "{{ __('shop::app.common.error') }}" }];
this.$root.addFlashMessages();
})
} else {
this.disable_button = true;
window.flashMessages = [{'type': 'alert-error', 'message': "{{ __('shop::app.common.error') }}" }];
this.$root.addFlashMessages();
})
}
},
handleErrorResponse: function(response, scope) {

View File

@ -5,19 +5,15 @@
<h3 class="fw6 display-inbl">
{{ __('shop::app.checkout.onepage.billing-address') }}
</h3>
<a
class="theme-btn light pull-right text-up-14"
@click="newBillingAddress()">
{{ __('shop::app.checkout.onepage.new-address') }}
</a>
<i class="rango-arrow"></i>
</div>
<div slot="body">
<div class="address-container row full-width">
<div class="col-lg-6 col-md-12 address-holder" v-for='(addresses, index) in this.allAddress'>
<div class="address-container row full-width no-margin">
<div
:key="index"
class="col-lg-6 col-md-12 address-holder pl0"
v-for='(addresses, index) in this.allAddress'>
<div class="card">
<div class="card-body row">
@ -53,6 +49,19 @@
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 address-holder pl0">
<div class="card">
<div class="card-body add-address-button">
<div class="cursor-pointer" @click="newBillingAddress()">
<i class="material-icons">
add_circle_outline
</i>
<span>Add new Address</span>
</div>
</div>
</div>
</div>
</div>
<div id="message"></div>
@ -95,6 +104,8 @@
{{ __('shop::app.checkout.onepage.billing-address') }}
</h3>
<i class="rango-arrow"></i>
@auth('customer')
@if(count(auth('customer')->user()->addresses))
<a
@ -105,8 +116,6 @@
</a>
@endif
@endauth
<i class="rango-arrow"></i>
</div>
<div class="col-12 no-padding" slot="body">

View File

@ -236,6 +236,70 @@
@endauth
@elseif (isset($billing) && $billing)
<div :class="`col-12 form-field ${errors.has('address-form.billing[company_name]') ? 'has-error' : ''}`">
<label for="billing[company_name]">
{{ __('shop::app.checkout.onepage.company-name') }}
</label>
<input
type="text"
class="control"
id="billing[company_name]"
name="billing[company_name]"
v-model="address.billing.company_name"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.company-name') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[company_name]')">
@{{ errors.first('address-form.billing[company_name]') }}
</span>
</div>
{{-- for customer login checkout --}}
@if (! $isCustomer)
@include('shop::checkout.onepage.customer-checkout')
@endif
<div :class="`col-12 form-field ${errors.has('address-form.billing[first_name]') ? 'has-error' : ''}`">
<label for="billing[first_name]" class="mandatory">
{{ __('shop::app.checkout.onepage.first-name') }}
</label>
<input
type="text"
class="control"
v-validate="'required'"
id="billing[first_name]"
name="billing[first_name]"
v-model="address.billing.first_name"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.first-name') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[first_name]')">
@{{ errors.first('address-form.billing[first_name]') }}
</span>
</div>
<div :class="`col-12 form-field ${errors.has('address-form.billing[last_name]') ? 'has-error' : ''}`">
<label for="billing[last_name]" class="mandatory">
{{ __('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="address.billing.last_name"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.last-name') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[last_name]')">
@{{ errors.first('address-form.billing[last_name]') }}
</span>
</div>
<div :class="`col-12 form-field ${errors.has('address-form.billing[email]') ? 'has-error' : ''}`">
<label for="billing[email]" class="mandatory">
{{ __('shop::app.checkout.onepage.email') }}
@ -257,49 +321,6 @@
</span>
</div>
{{-- for customer login checkout --}}
@if (! $isCustomer)
@include('shop::checkout.onepage.customer-checkout')
@endif
<div :class="`col-12 form-field ${errors.has('address-form.billing[first_name]') ? 'has-error' : ''}`">
<label for="billing[first_name]" class="mandatory">
{{ __('shop::app.checkout.onepage.first-name') }}
</label>
<input
type="text"
class="control"
v-validate="'required'"
id="billing[first_name]"
name="billing[first_name]"
v-model="address.billing.first_name"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.first-name') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[first_name]')">
@{{ errors.first('address-form.billing[first_name]') }}
</span>
</div>
<div :class="`col-12 form-field ${errors.has('address-form.billing[last_name]') ? 'has-error' : ''}`">
<label for="billing[last_name]" class="mandatory">
{{ __('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="address.billing.last_name"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.last-name') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[last_name]')">
@{{ errors.first('address-form.billing[last_name]') }}
</span>
</div>
<div :class="`col-12 form-field ${errors.has('address-form.billing[address1][]') ? 'has-error' : ''}`">
<label for="billing_address_0" class="mandatory">
{{ __('shop::app.checkout.onepage.address1') }}
@ -312,6 +333,7 @@
id="billing_address_0"
name="billing[address1][]"
v-model="address.billing.address1[0]"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.address1') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[address1][]')">
@ -347,6 +369,7 @@
name="billing[city]"
v-validate="'required'"
v-model="address.billing.city"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.city') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[city]')">
@ -395,6 +418,7 @@
v-validate="'required'"
v-if="!haveStates('billing')"
v-model="address.billing.state"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.state') }}&quot;" />
<select
@ -434,6 +458,7 @@
v-validate="'required'"
name="billing[postcode]"
v-model="address.billing.postcode"
@change="validateForm('address-form')"
data-vv-as="&quot;{{ __('shop::app.checkout.onepage.postcode') }}&quot;" />
<span class="control-error" v-if="errors.has('address-form.billing[postcode]')">

View File

@ -5,7 +5,7 @@
<script type="text/x-template" id="country-state-template">
<div>
<div class="control-group" :class="[errors.has('country') ? 'has-error' : '']">
<label for="country" class="required">
<label for="country" class="mandatory">
{{ __('shop::app.customer.account.address.create.country') }}
</label>
@ -26,20 +26,40 @@
</div>
<div class="control-group" :class="[errors.has('state') ? 'has-error' : '']">
<label for="state" class="required">
<label for="state" class="mandatory">
{{ __('shop::app.customer.account.address.create.state') }}
</label>
<input type="text" v-validate="'required'" class="control" id="state" name="state" v-model="state" v-if="!haveStates()" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.state') }}&quot;"/>
<select v-validate="'required'" class="control" id="state" name="state" v-model="state" v-if="haveStates()" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.state') }}&quot;">
<input
id="state"
type="text"
name="state"
v-model="state"
class="control"
v-if="!haveStates()"
v-validate="'required'"
data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.state') }}&quot;" />
<option value="">{{ __('shop::app.customer.account.address.create.select-state') }}</option>
<template v-if="haveStates()">
<select
id="state"
name="state"
v-model="state"
class="styled-select"
v-validate="'required'"
data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.state') }}&quot;">
<option v-for='(state, index) in countryStates[country]' :value="state.code">
@{{ state.default_name }}
</option>
<option value="">{{ __('shop::app.customer.account.address.create.select-state') }}</option>
</select>
<option v-for='(state, index) in countryStates[country]' :value="state.code">
@{{ state.default_name }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
</template>
<span class="control-error" v-if="errors.has('state')">
@{{ errors.first('state') }}

View File

@ -27,27 +27,31 @@
</div>
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required">{{ __('shop::app.customer.account.address.create.first_name') }}</label>
<label for="first_name" class="mandatory">{{ __('shop::app.customer.account.address.create.first_name') }}</label>
<input type="text" class="control" name="first_name" value="{{ old('first_name') }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.first_name') }}&quot;">
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required">{{ __('shop::app.customer.account.address.create.last_name') }}</label>
<label for="last_name" class="mandatory">{{ __('shop::app.customer.account.address.create.last_name') }}</label>
<input type="text" class="control" name="last_name" value="{{ old('last_name') }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.last_name') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id" class="required">{{ __('shop::app.customer.account.address.create.vat_id') }}</label>
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}
<span class="help-note">{{ __('shop::app.customer.account.address.create.vat_help_note') }}</span>
</label>
<input type="text" class="control" name="vat_id" value="{{ old('vat_id') }}" v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.vat_id') }}&quot;">
<span class="control-error" v-if="errors.has('vat_id')">@{{ errors.first('vat_id') }}</span>
</div>
<?php $addresses = explode(PHP_EOL, (old('address1') ?? '')); ?>
@php
$addresses = explode(PHP_EOL, (old('address1') ?? ''));
@endphp
<div class="control-group" :class="[errors.has('address1[]') ? 'has-error' : '']">
<label for="address_0" class="required">{{ __('shop::app.customer.account.address.create.street-address') }}</label>
<label for="address_0" class="mandatory">{{ __('shop::app.customer.account.address.create.street-address') }}</label>
<input type="text" class="control" name="address1[]" id="address_0" value="{{ $addresses[0] ?: '' }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.street-address') }}&quot;">
<span class="control-error" v-if="errors.has('address1[]')">@{{ errors.first('address1[]') }}</span>
</div>
@ -63,19 +67,19 @@
@include ('shop::customers.account.address.country-state', ['countryCode' => old('country'), 'stateCode' => old('state')])
<div class="control-group" :class="[errors.has('city') ? 'has-error' : '']">
<label for="city" class="required">{{ __('shop::app.customer.account.address.create.city') }}</label>
<label for="city" class="mandatory">{{ __('shop::app.customer.account.address.create.city') }}</label>
<input type="text" class="control" name="city" value="{{ old('city') }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.city') }}&quot;">
<span class="control-error" v-if="errors.has('city')">@{{ errors.first('city') }}</span>
</div>
<div class="control-group" :class="[errors.has('postcode') ? 'has-error' : '']">
<label for="postcode" class="required">{{ __('shop::app.customer.account.address.create.postcode') }}</label>
<label for="postcode" class="mandatory">{{ __('shop::app.customer.account.address.create.postcode') }}</label>
<input type="text" class="control" name="postcode" value="{{ old('postcode') }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.postcode') }}&quot;">
<span class="control-error" v-if="errors.has('postcode')">@{{ errors.first('postcode') }}</span>
</div>
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
<label for="phone" class="required">{{ __('shop::app.customer.account.address.create.phone') }}</label>
<label for="phone" class="mandatory">{{ __('shop::app.customer.account.address.create.phone') }}</label>
<input type="text" class="control" name="phone" value="{{ old('phone') }}" v-validate="'required'" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.phone') }}&quot;">
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
</div>

View File

@ -43,7 +43,9 @@
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id" class="required">{{ __('shop::app.customer.account.address.create.vat_id') }}</label>
<label for="vat_id" class="required">{{ __('shop::app.customer.account.address.create.vat_id') }}
<span class="help-note">{{ __('shop::app.customer.account.address.create.vat_help_note') }}</span>
</label>
<input type="text" class="control" name="vat_id" value="{{ old('vat_id') ?? $address->vat_id }}" v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.vat_id') }}&quot;">
<span class="control-error" v-if="errors.has('vat_id')">@{{ errors.first('vat_id') }}</span>
</div>

View File

@ -5,6 +5,12 @@
@endsection
@section('page-detail-wrapper')
@if ($addresses->isEmpty())
<a href="{{ route('customer.address.create') }}" class="theme-btn light unset pull-right">
{{ __('shop::app.customer.account.address.index.add') }}
</a>
@endif
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
<span class="account-heading">{{ __('shop::app.customer.account.address.index.title') }}</span>
@ -25,9 +31,6 @@
<div class="account-table-content">
@if ($addresses->isEmpty())
<div>{{ __('shop::app.customer.account.address.index.empty') }}</div>
<a href="{{ route('customer.address.create') }}" class="theme-btn light unset pull-right">
{{ __('shop::app.customer.account.address.index.add') }}
</a>
@else
<div class="address-holder col-12 no-padding">
@foreach ($addresses as $address)

View File

@ -9,6 +9,10 @@
.account-content .account-layout .account-head {
margin-bottom: 0px;
}
.sale-summary .dash-icon {
margin-right: 30px;
float: right;
}
</style>
@endpush
@ -137,46 +141,62 @@
<table class="sale-summary">
<tbody>
<tr>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}</td>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->sub_total, $order->order_currency_code) }}</td>
</tr>
@if ($order->haveStockableItems())
<tr>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}</td>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->shipping_amount, $order->order_currency_code) }}</td>
</tr>
@endif
@if ($order->base_discount_amount > 0)
<tr>
<td>{{ __('shop::app.customer.account.order.view.discount') }}</td>
<td>{{ __('shop::app.customer.account.order.view.discount') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->discount_amount, $order->order_currency_code) }}</td>
</tr>
@endif
<tr class="border-bottom">
<td>{{ __('shop::app.customer.account.order.view.tax') }}</td>
<td>{{ __('shop::app.customer.account.order.view.tax') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->tax_amount, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}</td>
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->grand_total, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.total-paid') }}</td>
<td>{{ __('shop::app.customer.account.order.view.total-paid') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->grand_total_invoiced, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.total-refunded') }}</td>
<td>{{ __('shop::app.customer.account.order.view.total-refunded') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->grand_total_refunded, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.total-due') }}</td>
<td>{{ __('shop::app.customer.account.order.view.total-due') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->total_due, $order->order_currency_code) }}</td>
</tr>
<tbody>
@ -255,34 +275,39 @@
<div class="totals">
<table class="sale-summary">
<tr>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($invoice->sub_total, $order->order_currency_code) }}</td>
</tr>
<tr>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($invoice->shipping_amount, $order->order_currency_code) }}</td>
</tr>
@if ($order->base_discount_amount > 0)
<tr>
<td>{{ __('shop::app.customer.account.order.view.discount') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.discount') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->discount_amount, $order->order_currency_code) }}</td>
</tr>
@endif
<tr>
<td>{{ __('shop::app.customer.account.order.view.tax') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.tax') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($invoice->tax_amount, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($invoice->grand_total, $order->order_currency_code) }}</td>
</tr>
</table>
@ -391,50 +416,57 @@
<div class="totals">
<table class="sale-summary">
<tr>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->sub_total, $order->order_currency_code) }}</td>
</tr>
@if ($refund->shipping_amount > 0)
<tr>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->shipping_amount, $order->order_currency_code) }}</td>
</tr>
@endif
@if ($refund->discount_amount > 0)
<tr>
<td>{{ __('shop::app.customer.account.order.view.discount') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.discount') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->discount_amount, $order->order_currency_code) }}</td>
</tr>
@endif
@if ($refund->tax_amount > 0)
<tr>
<td>{{ __('shop::app.customer.account.order.view.tax') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.tax') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->tax_amount, $order->order_currency_code) }}</td>
</tr>
@endif
<tr>
<td>{{ __('shop::app.customer.account.order.view.adjustment-refund') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.adjustment-refund') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->adjustment_refund, $order->order_currency_code) }}</td>
</tr>
<tr>
<td>{{ __('shop::app.customer.account.order.view.adjustment-fee') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.adjustment-fee') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->adjustment_fee, $order->order_currency_code) }}</td>
</tr>
<tr class="fw6">
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}</td>
<td>-</td>
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($refund->grand_total, $order->order_currency_code) }}</td>
</tr>
</table>

View File

@ -9,7 +9,23 @@
@foreach ($menu->items as $menuItem)
<ul type="none" class="navigation">
@foreach ($menuItem['children'] as $index => $subMenuItem)
{{-- rearrange menu items --}}
@php
$subMenuCollection = [];
try {
$subMenuCollection['orders'] = $menuItem['children']['orders'];
$subMenuCollection['downloadables'] = $menuItem['children']['downloadables'];
$subMenuCollection['wishlist'] = $menuItem['children']['wishlist'];
$subMenuCollection['reviews'] = $menuItem['children']['reviews'];
$subMenuCollection['address'] = $menuItem['children']['address'];
$subMenuCollection['profile'] = $menuItem['children']['profile'];
} catch (\Exception $exception) {
$subMenuCollection = $menuItem['children'];
}
@endphp
@foreach ($subMenuCollection as $index => $subMenuItem)
<li class="{{ $menu->getActive($subMenuItem) }}">
<a class="unset fw6 full-width" href="{{ $subMenuItem['url'] }}">
<i class="icon {{ $index }} text-down-3"></i>

View File

@ -15,166 +15,166 @@
<h1 class="account-heading">
{{ __('shop::app.customer.account.profile.index.title') }}
</h1>
<div class="horizontal-rule"></div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.view.before', ['customer' => $customer]) !!}
<form
method="POST"
@submit.prevent="onSubmit"
class="account-table-content"
action="{{ route('customer.profile.edit') }}">
<div class="profile-update-form">
<form
method="POST"
@submit.prevent="onSubmit"
class="account-table-content"
action="{{ route('customer.profile.edit') }}">
@csrf
@csrf
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
<div :class="`row ${errors.has('first_name') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div class="col-12">
<select
name="gender"
class="control styled-select"
v-validate="'required'"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
</div>
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
</div>
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
<div :class="`row ${errors.has('gender') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div class="col-12">
<select
name="gender"
v-validate="'required'"
class="control styled-select"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
</div>
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
</span>
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
</span>
</div>
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
</div>
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</form>
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</form>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.view.after', ['customer' => $customer]) !!}
@endsection

View File

@ -6,175 +6,173 @@
@section('page-detail-wrapper')
<div class="account-head">
<span class="back-icon">
<a href="{{ route('customer.account.index') }}">
<i class="icon icon-menu-back"></i>
</a>
</span>
<a href="{{ route('customer.session.destroy') }}" class="theme-btn light unset pull-right">
{{ __('shop::app.header.logout') }}
</a>
<h1 class="account-heading">
{{ __('shop::app.customer.account.profile.index.title') }}
</h1>
<div class="horizontal-rule"></div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.view.before', ['customer' => $customer]) !!}
<form
method="POST"
@submit.prevent="onSubmit"
class="account-table-content"
action="{{ route('customer.profile.edit') }}">
<div class="profile-update-form">
<form
method="POST"
@submit.prevent="onSubmit"
class="account-table-content"
action="{{ route('customer.profile.edit') }}">
@csrf
@csrf
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
<div :class="`row ${errors.has('first_name') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div class="col-12">
<select
name="gender"
class="control styled-select"
v-validate="'required'"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
</div>
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
</div>
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
<div :class="`row ${errors.has('gender') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div class="col-12">
<select
name="gender"
v-validate="'required'"
class="control styled-select"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
</div>
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
</span>
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
</span>
</div>
</div>
</div>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
</span>
</div>
</div>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
</div>
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</form>
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</form>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.view.after', ['customer' => $customer]) !!}
@endsection

View File

@ -18,22 +18,31 @@
<div class="container-fluid advertisement-four-container">
<div class="row">
<a @if (isset($one)) href="{{ $one }}" @endif class="col-lg-4 col-12 no-padding">
<img class="col-12" src="{{ asset('/storage/' . $advertisementFour['image_1']) }}" />
</a>
@if ( isset($advertisementFour[1]))
<a @if (isset($one)) href="{{ $one }}" @endif class="col-lg-4 col-12 no-padding">
<img class="col-12" src="{{ asset('/storage/' . $advertisementFour[1]) }}" />
</a>
@endif
<div class="col-lg-4 col-12 offers-ct-panel">
<a @if (isset($two)) href="{{ $two }}" @endif class="row col-12 remove-padding-margin">
<img class="col-12 offers-ct-top" src="{{ asset('/storage/' . $advertisementFour['image_2']) }}" />
</a>
<a @if (isset($three)) href="{{ $three }}" @endif class="row col-12 remove-padding-margin">
<img class="col-12 offers-ct-bottom" src="{{ asset('/storage/' . $advertisementFour['image_3']) }}" />
</a>
@if ( isset($advertisementFour[2]))
<a @if (isset($two)) href="{{ $two }}" @endif class="row col-12 remove-padding-margin">
<img class="col-12 offers-ct-top" src="{{ asset('/storage/' . $advertisementFour[2]) }}" />
</a>
@endif
@if ( isset($advertisementFour[3]))
<a @if (isset($three)) href="{{ $three }}" @endif class="row col-12 remove-padding-margin">
<img class="col-12 offers-ct-bottom" src="{{ asset('/storage/' . $advertisementFour[3]) }}" />
</a>
@endif
</div>
<a @if (isset($four)) href="{{ $four }}" @endif class="col-lg-4 col-12 no-padding">
<img class="col-12" src="{{ asset('/storage/' . $advertisementFour['image_4']) }}" />
</a>
@if ( isset($advertisementFour[4]))
<a @if (isset($four)) href="{{ $four }}" @endif class="col-lg-4 col-12 no-padding">
<img class="col-12" src="{{ asset('/storage/' . $advertisementFour[4]) }}" />
</a>
@endif
</div>
</div>
@endif

View File

@ -18,17 +18,23 @@
<div class="container-fluid advertisement-three-container">
<div class="row">
<a @if (isset($one)) href="{{ $one }}" @endif class="col-lg-6 col-md-12 no-padding">
<img src="{{ asset('/storage/' . $advertisementThree['image_1']) }}" class="full-width" />
</a>
@if ( isset($advertisementThree[1]))
<a @if (isset($one)) href="{{ $one }}" @endif class="col-lg-6 col-md-12 no-padding">
<img src="{{ asset('/storage/' . $advertisementThree[1]) }}" class="full-width" />
</a>
@endif
<div class="col-lg-6 col-md-12 second-panel">
<a @if (isset($two)) href="{{ $two }}" @endif class="row top-container">
<img src="{{ asset('/storage/' . $advertisementThree['image_2']) }}" class="col-12 pr0" />
</a>
<a @if (isset($three)) href="{{ $three }}" @endif class="row bottom-container">
<img src="{{ asset('/storage/' . $advertisementThree['image_3']) }}" class="col-12 pr0" />
</a>
@if ( isset($advertisementThree[2]))
<a @if (isset($two)) href="{{ $two }}" @endif class="row top-container">
<img src="{{ asset('/storage/' . $advertisementThree[2]) }}" class="col-12 pr0" />
</a>
@endif
@if ( isset($advertisementThree[3]))
<a @if (isset($three)) href="{{ $three }}" @endif class="row bottom-container">
<img src="{{ asset('/storage/' . $advertisementThree[3]) }}" class="col-12 pr0" />
</a>
@endif
</div>
</div>
</div>

View File

@ -18,13 +18,17 @@
<div class="container-fluid advertisement-two-container">
<div class="row">
<a class="col-lg-9 col-md-12 no-padding">
<img src="{{ asset('/storage/' . $advertisementTwo['image_1']) }}" />
</a>
<a class="col-lg-3 col-md-12 pr0">
<img src="{{ asset('/storage/' . $advertisementTwo['image_2']) }}" />
</a>
@if ( isset($advertisementTwo[1]))
<a class="col-lg-9 col-md-12 no-padding">
<img src="{{ asset('/storage/' . $advertisementTwo[1]) }}" />
</a>
@endif
@if ( isset($advertisementTwo[2]))
<a class="col-lg-3 col-md-12 pr0">
<img src="{{ asset('/storage/' . $advertisementTwo[2]) }}" />
</a>
@endif
</div>
</div>
@endif

View File

@ -6,13 +6,13 @@
@push('scripts')
<script type="text/x-template" id="category-products-template">
<div class="container-fluid remove-padding-margin" v-if="isCategory">
<div class="container-fluid remove-padding-margin" v-if="isCategory && categoryProducts.length > 0">
<card-list-header
:view-all="`${this.baseUrl}/${categoryDetails.slug}`"
:heading="categoryDetails.name">
</card-list-header>
<div class="carousel-products vc-full-screen" v-if="!isMobile()">
<div class="carousel-products vc-full-screen ltr" v-if="!isMobile()">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"

View File

@ -6,7 +6,7 @@
<div class="container-fluid reviews-container">
@if ($reviewCount)
<card-list-header
heading="Customer Reviews"
heading="{{ __('velocity::app.home.customer-reviews') }}"
></card-list-header>
<div class="row">
@ -27,7 +27,7 @@
</h4>
<div class="product-info fs16">
<span>Reviewed- <a class="remove-decoration link-color" href="{{ route('shop.productOrCategory.index', $review->product->url_key) }}">{{$review->product->name}}</a></span>
<span>{{ __('velocity::app.products.reviewed') }}- <a class="remove-decoration link-color" href="{{ route('shop.productOrCategory.index', $review->product->url_key) }}">{{$review->product->name}}</a></span>
</div>
</div>
</div>

View File

@ -9,15 +9,15 @@
<div class="container-fluid featured-products" v-if="featuredProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
</card-list-header>
<div class="carousel-products vc-full-screen">
<div class="carousel-products vc-full-screen ltr">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"
@ -29,7 +29,7 @@
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen">
<carousel-component
slides-per-page="2"
@ -37,7 +37,7 @@
pagination-enabled="hide"
id="fearured-products-carousel"
:slides-count="featuredProducts.length">
<slide
:key="index"
:slot="`slide-${index}`"

View File

@ -21,7 +21,7 @@
</style>
@endpush
<div class="row">
<div class="row ltr">
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileDevice">
<carousel-component
slides-per-page="5"

View File

@ -5,15 +5,13 @@
$shippings = core()->getConfigData('sales.carriers');
$payments = core()->getConfigData('sales.paymentmethods');
foreach($shippings as $ship)
{
foreach($shippings as $ship) {
if ($ship['active'] == "true") {
array_push($activeShippings, $ship['title']);
}
}
foreach($payments as $payment)
{
foreach($payments as $payment) {
if ($payment['active'] == "true") {
array_push($activePayments, $payment['title']);
}

View File

@ -8,7 +8,9 @@
@include('shop::layouts.footer.top-brands')
@endif --}}
@include('shop::layouts.footer.copy-right')
@if (core()->getConfigData('general.content.footer.footer_toggle'))
@include('shop::layouts.footer.copy-right')
@endif
</div>
</div>

View File

@ -152,16 +152,16 @@
@if ($message = session('success'))
messageType = 'alert-success';
messageLabel = 'Success';
messageLabel = "{{ __('velocity::app.shop.general.alert.success') }}";
@elseif ($message = session('warning'))
messageType = 'alert-warning';
messageLabel = 'Warning';
messageLabel = "{{ __('velocity::app.shop.general.alert.warning') }}";
@elseif ($message = session('error'))
messageType = 'alert-danger';
messageLabel = 'Error';
messageLabel = "{{ __('velocity::app.shop.general.alert.error') }}";
@elseif ($message = session('info'))
messageType = 'alert-info';
messageLabel = 'Info';
messageLabel = "{{ __('velocity::app.shop.general.alert.info') }}";
@endif
if (messageType && '{{ $message }}' !== '') {
@ -169,12 +169,14 @@
}
window.serverErrors = [];
@if(isset($errors))
@if (isset($errors))
@if (count($errors))
window.serverErrors = @json($errors->getMessages());
@endif
@endif
})()
window._translations = @json(app('Webkul\Velocity\Helpers\Helper')->jsonTranslations());
})();
</script>
<script

View File

@ -31,6 +31,7 @@
@foreach (core()->getCurrentChannel()->locales as $locale)
@if (isset($serachQuery))
@dd(app()->getLocale());
<option
value="?{{ $serachQuery }}&locale={{ $locale->code }}"
{{ $locale->code == app()->getLocale() ? 'selected' : '' }}>

View File

@ -47,7 +47,7 @@
type="button"
class="theme-btn fs14 fw6">
{{ __('velocity::app.header.sign-in') }}
{{ __('shop::app.header.sign-in') }}
</button>
</a>
</div>
@ -57,7 +57,7 @@
<button
type="button"
class="theme-btn fs14 fw6">
{{ __('velocity::app.header.sign-up') }}
{{ __('shop::app.header.sign-up') }}
</button>
</a>
</div>
@ -75,7 +75,7 @@
<ul type="none">
<li>
<a href="{{ route('customer.profile.index') }}" class="unset">{{ __('shop::app.header.profile') }}</a>
<a href="{{ route('customer.orders.index') }}" class="unset">{{ __('velocity::app.shop.general.orders') }}</a>
</li>
<li>
@ -83,7 +83,7 @@
</li>
<li>
<a href="{{ route('shop.checkout.cart.index') }}" class="unset">{{ __('shop::app.header.cart') }}</a>
<a href="{{ route('customer.profile.index') }}" class="unset">{{ __('shop::app.header.profile') }}</a>
</li>
<li>

View File

@ -1,6 +1,6 @@
{!! view_render_event('bagisto.shop.products.add_to_cart.before', ['product' => $product]) !!}
<div class="row mx-0">
<div class="row mx-0 col-12 no-padding">
<div class="add-to-cart-btn pl0">
@if (isset($form) && !$form)
<button

View File

@ -5,6 +5,10 @@
@push('css')
<style type="text/css">
.list-card .wishlist-icon i {
padding-left: 10px;
}
.product-price span:first-child, .product-price span:last-child {
font-size: 18px;
font-weight: 600;
@ -51,14 +55,17 @@
@include ('shop::products.price', ['product' => $product])
</div>
<div class="product-rating">
<star-ratings ratings="{{ $avgRatings }}"></star-ratings>
<span>{{ $totalReviews }} Ratings</span>
</div>
@if( $totalReviews )
<div class="product-rating">
<star-ratings ratings="{{ $avgRatings }}"></star-ratings>
<span>{{ $totalReviews }} Ratings</span>
</div>
@endif
<div class="cart-wish-wrap mt5">
@include ('shop::products.add-to-cart', [
'product' => $product,
'addWishlistClass' => 'pl10',
'addToCartBtnClass' => 'medium-padding'
])
</div>
@ -99,7 +106,9 @@
@if ($totalReviews)
<div class="product-rating col-12 no-padding">
<star-ratings ratings="{{ $avgRatings }}"></star-ratings>
<span class="align-top">{{ $totalReviews }} Ratings</span>
<span class="align-top">
{{ __('velocity::app.products.ratings', ['totalRatings' => $totalReviews ]) }}
</span>
</div>
@else
<div class="product-rating col-12 no-padding">

View File

@ -45,7 +45,7 @@
:ratings="product.rating">
</star-ratings>
<span class="fs16 text-nowrap align-text-bottom" v-if="product.rating > 0">@{{ product.totalReviews }} Reviews</span>
<span class="fs16 text-nowrap align-text-bottom" v-if="product.rating > 0">@{{ product.totalReviews }} {{ __('velocity::app.products.reviews') }}</span>
</a>
</div>
</div>

View File

@ -46,24 +46,24 @@
<div class="sorter">
<label>{{ __('shop::app.products.sort-by') }}</label>
<i class="icon fs16 cell rango-arrow-down select-icon-margin down-icon-position"></i>
<select class="selective-div border-normal" onchange="window.location.href = this.value">
<select class="selective-div border-normal styled-select" onchange="window.location.href = this.value">
@foreach ($toolbarHelper->getAvailableOrders() as $key => $order)
<option value="{{ $toolbarHelper->getOrderUrl($key) }}" {{ $toolbarHelper->isOrderCurrent($key) ? 'selected' : '' }}>
{{ __('shop::app.products.' . $order) }}
</option>
@endforeach
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
</div>
<div class="limiter">
<label>{{ __('shop::app.products.show') }}</label>
<i class="icon fs16 cell rango-arrow-down select-icon-show-margin down-icon-position"></i>
<select class="selective-div border-normal" onchange="window.location.href = this.value" style="width: 57px;">
<select class="selective-div border-normal styled-select" onchange="window.location.href = this.value" style="width: 57px;">
@foreach ($toolbarHelper->getAvailableLimits() as $limit)
@ -74,6 +74,10 @@
@endforeach
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
</div>
</div>
@ -156,10 +160,6 @@
methods: {
toggleLayeredNavigation: function ({event, actionType}) {
// this.$root.navContainer = true;
// this.$root.responsiveSidebarTemplate = `<div slot="sidebar-body">
// Hello World
// </div>`;
this.layeredNavigation = !this.layeredNavigation;
}
}

View File

@ -65,7 +65,12 @@
></star-ratings>
<div class="reviews">
<span>{{ $avgRatings }} Ratings and {{ $total }} Reviews</span>
<span>
{{ __('shop::app.reviews.ratingreviews', [
'rating' => $avgRatings,
'review' => $total])
}}
</span>
</div>
</div>
@endif
@ -85,11 +90,13 @@
{!! view_render_event('bagisto.shop.products.view.short_description.before', ['product' => $product]) !!}
<div class="description">
<h3 class="col-lg-12">{{ __('velocity::app.products.short-description') }}</h3>
@if ($product->short_description)
<div class="description">
<h3 class="col-lg-12">{{ __('velocity::app.products.short-description') }}</h3>
{!! $product->short_description !!}
</div>
{!! $product->short_description !!}
</div>
@endif
{!! view_render_event('bagisto.shop.products.view.short_description.after', ['product' => $product]) !!}
@ -97,7 +104,9 @@
{!! view_render_event('bagisto.shop.products.view.quantity.before', ['product' => $product]) !!}
@if ($product->getTypeInstance()->showQuantityBox())
<quantity-changer></quantity-changer>
<div>
<quantity-changer></quantity-changer>
</div>
@else
<input type="hidden" name="quantity" value="1">
@endif

View File

@ -1,4 +1,11 @@
@if ($product->type == 'bundle')
@push('css')
<style type="text/css">
.bundle-options-wrapper .bundle-option-list {
border: unset;
}
</style>
@endpush
{!! view_render_event('bagisto.shop.products.view.bundle-options.before', ['product' => $product]) !!}
@ -51,11 +58,11 @@
<script type="text/x-template" id="bundle-option-item-template">
<div class="bundle-option-item">
<div :class="`control-group ${errors.has('bundle_options[' + option.id + '][]') ? 'has-error' : ''}`">
<div :class="`control-group custom-form mb10 ${errors.has('bundle_options[' + option.id + '][]') ? 'has-error' : ''}`">
<label :class="[option.is_required ? 'required' : '']">@{{ option.label }}</label>
<div v-if="option.type == 'select'">
<select class="control" :name="'bundle_options[' + option.id + '][]'" v-model="selected_product" v-validate="option.is_required ? 'required' : ''" :data-vv-as="option.label + '&quot;'">
<select class="control styled-select" :name="'bundle_options[' + option.id + '][]'" v-model="selected_product" v-validate="option.is_required ? 'required' : ''" :data-vv-as="option.label + '&quot;'">
<option value="">{{ __('shop::app.products.choose-selection') }}</option>
<option v-for="(product, index2) in option.products" :value="product.id">
@{{ product.name + ' + ' + product.price.final_price.formated_price }}
@ -64,15 +71,14 @@
</div>
<div v-if="option.type == 'radio'">
<span class="radio" v-if="! option.is_required">
<span class="radio col-12 ml5" v-if="! option.is_required">
<input
type="radio"
:name="'bundle_options[' + option.id + '][]'"
v-model="selected_product"
value="0" />
<label class="radio-view" :for="'bundle_options[' + option.id + '][]'"></label>
<label class="radio-view no-padding" :for="'bundle_options[' + option.id + '][]'"></label>
{{ __('shop::app.products.none') }}
</span>
@ -94,7 +100,7 @@
</div>
<div v-if="option.type == 'checkbox'">
<span class="checkbox" v-for="(product, index2) in option.products">
<span class="checkbox col-12 ml5" v-for="(product, index2) in option.products">
<input type="checkbox" :name="'bundle_options[' + option.id + '][]'" :value="product.id" v-model="selected_product" v-validate="option.is_required ? 'required' : ''" :data-vv-as="'&quot;' + option.label + '&quot;'" :id="'bundle_options[' + option.id + '][]'">
@{{ product.name }}
@ -106,7 +112,7 @@
</div>
<div v-if="option.type == 'multiselect'">
<select class="control" :name="'bundle_options[' + option.id + '][]'" v-model="selected_product" v-validate="option.is_required ? 'required' : ''" :data-vv-as="'&quot;' + option.label + '&quot;'" multiple>
<select class="control styled-select" :name="'bundle_options[' + option.id + '][]'" v-model="selected_product" v-validate="option.is_required ? 'required' : ''" :data-vv-as="'&quot;' + option.label + '&quot;'" multiple>
<option v-for="(product, index2) in option.products" :value="product.id">
@{{ product.name + ' + ' + product.price.final_price.formated_price }}
</option>

View File

@ -0,0 +1,61 @@
@foreach ($cart->items as $item)
<?php
$product = $item->product;
if ($product->cross_sells()->count()) {
$products[] = $product;
$products = array_unique($products);
}
?>
@endforeach
@if (isset($products))
<card-list-header
heading="{{ __('shop::app.products.cross-sell-title') }}"
view-all="false"
row-class="pt20"
></card-list-header>
<div class="carousel-products vc-full-screen">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="upsell-products-carousel"
:slides-count="{{ sizeof($products) }}">
@foreach($products as $product)
@foreach ($product->cross_sells()->paginate(2) as $index => $crossSellProduct)
<slide slot="slide-{{ $index }}">
@include ('shop::products.list.card', [
'product' => $crossSellProduct,
'addToCartBtnClass' => 'small-padding',
])
</slide>
@endforeach
@endforeach
</carousel-component>
</div>
<div class="carousel-products vc-small-screen">
<carousel-component
:slides-count="{{ sizeof($products) }}"
slides-per-page="2"
id="upsell-products-carousel"
navigation-enabled="hide"
pagination-enabled="hide">
@foreach($products as $product)
@foreach ($product->cross_sells()->paginate(2) as $index => $crossSellProduct)
<slide slot="slide-{{ $index }}">
@include ('shop::products.list.card', [
'product' => $crossSellProduct,
'addToCartBtnClass' => 'small-padding',
])
</slide>
@endforeach
@endforeach
</carousel-component>
</div>
@endif

View File

@ -27,7 +27,7 @@
{!! view_render_event('bagisto.shop.products.view.gallery.after', ['product' => $product]) !!}
<script type="text/x-template" id="product-gallery-template">
<ul class="thumb-list col-12 row" type="none">
<ul class="thumb-list col-12 row ltr" type="none">
@if (sizeof($images) > 4)
<li class="arrow left" @click="scroll('prev')">
<i class="rango-arrow-left fs24"></i>

View File

@ -30,14 +30,19 @@
<div class="row customer-rating" slot="body">
<div class="row full-width text-center mb30">
<div class="col-lg-12 col-xl-6">
<h4 class="col-lg-12 fs16">{{ $avgRatings }} Star</h4>
<h4 class="col-lg-12 fs16">{{ $avgRatings }} {{ __('shop::app.reviews.star') }}</h4>
<star-ratings
:size="24"
:ratings="{{ $avgStarRating }}"
></star-ratings>
<span class="fs16 fw6 display-block">{{ $avgRatings }} Ratings and {{ $total }} Reviews</span>
<span class="fs16 fw6 display-block">
{{ __('shop::app.reviews.ratingreviews', [
'rating' => $avgRatings,
'review' => $total])
}}
</span>
@if (core()->getConfigData('catalog.products.review.guest_review') || auth()->guard('customer')->check())
<a href="{{ route('shop.reviews.create', ['slug' => $product->url_key ]) }}">
@ -51,7 +56,7 @@
@for ($i = 5; $i >= 1; $i--)
<div class="row">
<span class="col-3 no-padding fs16 fw6">{{ $i }} Star</span>
<span class="col-3 no-padding fs16 fw6">{{ $i }} {{ __('shop::app.reviews.star') }}</span>
<div class="col-7 rating-bar" title="{{ $percentageRatings[$i] }}%">
<div style="width: {{ $percentageRatings[$i] }}%"></div>
@ -69,14 +74,19 @@
<div class="row customer-rating">
<div class="row full-width text-center mb30">
<div class="col-lg-12 col-xl-6">
<h3 class="col-lg-12">{{ $avgRatings }} Star</h3>
<h3 class="col-lg-12">{{ $avgRatings }} {{ __('shop::app.reviews.star') }}</h3>
<star-ratings
:size="24"
:ratings="{{ $avgStarRating }}"
></star-ratings>
<span class="fs16 display-block">{{ $avgRatings }} Ratings and {{ $total }} Reviews</span>
<span class="fs16 display-block">
{{ __('shop::app.reviews.ratingreviews', [
'rating' => $avgRatings,
'review' => $total])
}}
</span>
@if (core()->getConfigData('catalog.products.review.guest_review') || auth()->guard('customer')->check())
<a href="{{ route('shop.reviews.create', ['slug' => $product->url_key ]) }}">

View File

@ -0,0 +1,49 @@
<?php
$productUpSells = $product->up_sells()->get();
?>
@if ($productUpSells->count())
<card-list-header
heading="{{ __('shop::app.products.up-sell-title') }}"
view-all="false"
row-class="pt20"
></card-list-header>
<div class="carousel-products vc-full-screen">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="upsell-products-carousel"
:slides-count="{{ sizeof($productUpSells) }}">
@foreach ($productUpSells as $index => $upSellProduct)
<slide slot="slide-{{ $index }}">
@include ('shop::products.list.card', [
'product' => $upSellProduct,
'addToCartBtnClass' => 'small-padding',
])
</slide>
@endforeach
</carousel-component>
</div>
<div class="carousel-products vc-small-screen">
<carousel-component
:slides-count="{{ sizeof($productUpSells) }}"
slides-per-page="2"
id="upsell-products-carousel"
navigation-enabled="hide"
pagination-enabled="hide">
@foreach ($productUpSells as $index => $upSellProduct)
<slide slot="slide-{{ $index }}">
@include ('shop::products.list.card', [
'product' => $upSellProduct,
'addToCartBtnClass' => 'small-padding',
])
</slide>
@endforeach
</carousel-component>
</div>
@endif