add new theme fashion
wip wip wip wip admin form add hook Code format 优化插件市场返回上一页 Update openai migration optimize brands Optimize page and category hook 模版优化 delete black wip Plublish theme files. Ignore themes except default 删除demo-2 wip Get enabled themes. Theme seeder. Run theme seeder. update theme wip wip Switch theme and run db seeder code format wip wip
This commit is contained in:
parent
d1cc1bea61
commit
9fe36070c1
|
|
@ -1,5 +1,6 @@
|
|||
/node_modules
|
||||
/public/.htaccess
|
||||
/public/cache
|
||||
/public/hot
|
||||
/public/storage
|
||||
/public/upload/avatar
|
||||
|
|
@ -23,4 +24,3 @@ yarn-error.log
|
|||
mix-manifest.json
|
||||
package-lock.json
|
||||
dist
|
||||
/public/cache
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class DesignController extends Controller
|
|||
$data = [
|
||||
'editors' => [
|
||||
'editor-slide_show', 'editor-image401', 'editor-tab_product', 'editor-product', 'editor-image100',
|
||||
'editor-brand', 'editor-icons', 'editor-rich_text',
|
||||
'editor-brand', 'editor-icons', 'editor-rich_text', 'editor-image200', 'editor-image300',
|
||||
],
|
||||
'design_settings' => system_setting('base.design_setting'),
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
/**
|
||||
* ThemeController.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2023-03-16 12:00:13
|
||||
* @modified 2023-03-16 12:00:13
|
||||
*/
|
||||
|
||||
namespace Beike\Admin\Http\Controllers;
|
||||
|
||||
use Beike\Repositories\PluginRepo;
|
||||
use Beike\Repositories\SettingRepo;
|
||||
use Database\Seeders\ThemeSeeder;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ThemeController extends Controller
|
||||
{
|
||||
/**
|
||||
* Themes index
|
||||
*
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$currentTheme = system_setting('base.theme');
|
||||
$themes = PluginRepo::getEnabledThemes();
|
||||
|
||||
$data['themes'][] = [
|
||||
'name' => trans('admin/theme.theme_name'),
|
||||
'code' => 'default',
|
||||
'demo' => true,
|
||||
'image' => image_origin('image/default-theme.jpg'),
|
||||
'status' => $currentTheme == 'default',
|
||||
];
|
||||
|
||||
foreach ($themes as $theme) {
|
||||
$themeCode = $theme->code;
|
||||
$plugin = $theme->plugin;
|
||||
$imagePath = $plugin->theme ?? 'image/theme.jpg';
|
||||
$data['themes'][] = [
|
||||
'name' => $plugin->getLocaleName(),
|
||||
'code' => $themeCode,
|
||||
'demo' => true,
|
||||
'image' => plugin_asset($themeCode, $imagePath),
|
||||
'status' => $currentTheme == $themeCode,
|
||||
];
|
||||
}
|
||||
|
||||
return view('admin::pages.theme.index', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable theme
|
||||
*
|
||||
* @param Request $request
|
||||
* @param $themeCode
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function update(Request $request, $themeCode)
|
||||
{
|
||||
$importDemo = $request->get('import_demo');
|
||||
if ($importDemo) {
|
||||
if ($themeCode == 'default') {
|
||||
$seeder = new ThemeSeeder();
|
||||
$seeder->run();
|
||||
} else {
|
||||
$plugin = plugin($themeCode);
|
||||
if ($plugin) {
|
||||
PluginRepo::runSeeder($plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingRepo::update('system', 'base', ['theme' => $themeCode]);
|
||||
|
||||
return json_success(trans('common.success'));
|
||||
}
|
||||
}
|
||||
|
|
@ -112,6 +112,10 @@ Route::prefix($adminName)
|
|||
Route::middleware('can:design_menu_index')->get('design_menu/builder', [Controllers\DesignMenuController::class, 'index'])->name('design_menu.index');
|
||||
Route::middleware('can:design_menu_index')->put('design_menu/builder', [Controllers\DesignMenuController::class, 'update'])->name('design_menu.update');
|
||||
|
||||
// 模板主题
|
||||
Route::middleware('can:theme_index')->get('themes', [Controllers\ThemeController::class, 'index'])->name('theme.index');
|
||||
Route::middleware('can:theme_update')->put('themes/{code}', [Controllers\ThemeController::class, 'update'])->name('theme.update');
|
||||
|
||||
Route::put('edit', [Controllers\EditController::class, 'update'])->name('edit');
|
||||
Route::get('edit/locale', [Controllers\EditController::class, 'locale'])->name('edit.locale');
|
||||
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ class Sidebar extends Component
|
|||
*/
|
||||
private function getSettingSubPrefix()
|
||||
{
|
||||
$prefix = ['settings.', 'admin_users.', 'admin_roles.', 'plugins.', 'marketing.', 'tax_classes', 'tax_rates', 'regions', 'currencies', 'languages', 'design_menu', 'countries', 'zones'];
|
||||
$prefix = ['settings.', 'admin_users.', 'admin_roles.', 'plugins.', 'theme.', 'marketing.', 'tax_classes', 'tax_rates', 'regions', 'currencies', 'languages', 'design_menu', 'countries', 'zones'];
|
||||
|
||||
return hook_filter('admin.sidebar.setting.prefix', $prefix);
|
||||
}
|
||||
|
|
@ -253,6 +253,7 @@ class Sidebar extends Component
|
|||
['route' => 'settings.index', 'icon' => 'fa fa-tachometer-alt'],
|
||||
['route' => 'admin_users.index', 'icon' => 'fa fa-tachometer-alt'],
|
||||
['route' => 'plugins.index', 'icon' => 'fa fa-tachometer-alt', 'hide_mobile' => 1],
|
||||
['route' => 'theme.index', 'icon' => 'fa fa-tachometer-alt', 'hide_mobile' => 1],
|
||||
['route' => 'marketing.index', 'icon' => 'fa fa-tachometer-alt', 'hide_mobile' => 1],
|
||||
['route' => 'regions.index', 'icon' => 'fa fa-tachometer-alt'],
|
||||
['route' => 'tax_rates.index', 'icon' => 'fa fa-tachometer-alt'],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
/**
|
||||
* Render.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-07-08 17:09:15
|
||||
* @modified 2022-07-08 17:09:15
|
||||
*/
|
||||
|
||||
namespace Beike\Admin\View\DesignBuilders;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class Image200 extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function render(): View
|
||||
{
|
||||
$data['register'] = [
|
||||
'code' => 'image200',
|
||||
'sort' => 0,
|
||||
'name' => trans('admin/builder.modules_image_200'),
|
||||
'icon' => '',
|
||||
];
|
||||
|
||||
return view('admin::pages.design.module.image200', $data);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
/**
|
||||
* Render.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-07-08 17:09:15
|
||||
* @modified 2022-07-08 17:09:15
|
||||
*/
|
||||
|
||||
namespace Beike\Admin\View\DesignBuilders;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class Image300 extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function render(): View
|
||||
{
|
||||
$data['register'] = [
|
||||
'code' => 'image300',
|
||||
'sort' => 0,
|
||||
'name' => trans('admin/builder.modules_image_300'),
|
||||
'icon' => '',
|
||||
];
|
||||
|
||||
return view('admin::pages.design.module.image300', $data);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ use Beike\Models\AdminUser;
|
|||
use Beike\Models\Currency;
|
||||
use Beike\Models\Customer;
|
||||
use Beike\Models\Language;
|
||||
use Beike\Plugin\Plugin;
|
||||
use Beike\Repositories\CurrencyRepo;
|
||||
use Beike\Repositories\LanguageRepo;
|
||||
use Beike\Services\CurrencyService;
|
||||
|
|
@ -328,6 +329,15 @@ function plugin_path(string $path = ''): string
|
|||
return base_path('plugins') . ($path ? DIRECTORY_SEPARATOR . ltrim($path, DIRECTORY_SEPARATOR) : $path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $code
|
||||
* @return Plugin|null
|
||||
*/
|
||||
function plugin($code): ?Plugin
|
||||
{
|
||||
return app('plugin')->getPlugin($code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件图片缩放
|
||||
*
|
||||
|
|
@ -344,7 +354,7 @@ function plugin_resize($pluginCode, $image, int $width = 100, int $height = 100)
|
|||
return $image;
|
||||
}
|
||||
|
||||
$plugin = app('plugin')->getPlugin($pluginCode);
|
||||
$plugin = plugin($pluginCode);
|
||||
$pluginDirName = $plugin->getDirname();
|
||||
|
||||
return (new \Beike\Services\ImageService($image))->setPluginDirName($pluginDirName)->resize($width, $height);
|
||||
|
|
@ -364,7 +374,7 @@ function plugin_origin($pluginCode, $image)
|
|||
return $image;
|
||||
}
|
||||
|
||||
$plugin = app('plugin')->getPlugin($pluginCode);
|
||||
$plugin = plugin($pluginCode);
|
||||
$pluginDirName = $plugin->getDirname();
|
||||
|
||||
return (new \Beike\Services\ImageService($image))->setPluginDirName($pluginDirName)->originUrl();
|
||||
|
|
|
|||
|
|
@ -13,15 +13,5 @@ namespace Beike\Models;
|
|||
|
||||
class Plugin extends Base
|
||||
{
|
||||
public const TYPES = [
|
||||
'shipping', // 配送方式
|
||||
'payment', // 支付方式
|
||||
'total', // 订单金额
|
||||
'social', // 社交网络
|
||||
'feature', // 功能模块
|
||||
'language', // 语言翻译
|
||||
'theme', // 主题模板
|
||||
];
|
||||
|
||||
protected $fillable = ['type', 'code'];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ class Manager
|
|||
$pluginPath = $this->getPluginsDir() . DIRECTORY_SEPARATOR . $dirname;
|
||||
$plugin = new Plugin($pluginPath, $package);
|
||||
$status = $plugin->getStatus();
|
||||
$plugin->setType(Arr::get($package, 'type'));
|
||||
$plugin->setDirname($dirname);
|
||||
$plugin->setName(Arr::get($package, 'name'));
|
||||
$plugin->setDescription(Arr::get($package, 'description'));
|
||||
|
|
|
|||
|
|
@ -20,6 +20,18 @@ use Illuminate\Support\Str;
|
|||
|
||||
class Plugin implements Arrayable, \ArrayAccess
|
||||
{
|
||||
public const TYPES = [
|
||||
'shipping', // 配送方式
|
||||
'payment', // 支付方式
|
||||
'total', // 订单金额
|
||||
'social', // 社交网络
|
||||
'feature', // 功能模块
|
||||
'language', // 语言翻译
|
||||
'theme', // 主题模板
|
||||
];
|
||||
|
||||
protected $type;
|
||||
|
||||
protected $path;
|
||||
|
||||
protected $name;
|
||||
|
|
@ -59,6 +71,21 @@ class Plugin implements Arrayable, \ArrayAccess
|
|||
return Arr::get($this->packageInfo, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set plugin Type
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function setType(string $type): self
|
||||
{
|
||||
if (! in_array($type, self::TYPES)) {
|
||||
throw new \Exception('Invalid plugin type, must be one of ' . implode(',', self::TYPES));
|
||||
}
|
||||
$this->type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setDirname(string $dirName): self
|
||||
{
|
||||
$this->dirName = $dirName;
|
||||
|
|
@ -187,6 +214,11 @@ class Plugin implements Arrayable, \ArrayAccess
|
|||
return (string) $this->description;
|
||||
}
|
||||
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function getDirname(): string
|
||||
{
|
||||
return $this->dirName;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ class PluginRepo
|
|||
public static function getTypes(): array
|
||||
{
|
||||
$types = [];
|
||||
foreach (Plugin::TYPES as $item) {
|
||||
foreach (BPlugin::TYPES as $item) {
|
||||
$types[] = [
|
||||
'value' => $item,
|
||||
'label' => trans("admin/plugin.{$item}"),
|
||||
|
|
@ -38,11 +38,12 @@ class PluginRepo
|
|||
|
||||
/**
|
||||
* 安装插件到系统: 插入数据
|
||||
* @param BPlugin $bPlugin
|
||||
* @param BPlugin $bPlugin
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function installPlugin(BPlugin $bPlugin)
|
||||
{
|
||||
// self::publishStaticFiles($bPlugin);
|
||||
self::publishThemeFiles($bPlugin);
|
||||
self::migrateDatabase($bPlugin);
|
||||
$type = $bPlugin->type;
|
||||
$code = $bPlugin->code;
|
||||
|
|
@ -72,6 +73,51 @@ class PluginRepo
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish theme files, include public and blade files.
|
||||
*
|
||||
* @param $bPlugin
|
||||
*/
|
||||
public static function publishThemeFiles($bPlugin)
|
||||
{
|
||||
if ($bPlugin->getType() != 'theme') {
|
||||
return;
|
||||
}
|
||||
|
||||
$publicPath = $bPlugin->getPath() . '/Static/public';
|
||||
if (is_dir($publicPath)) {
|
||||
File::copyDirectory($publicPath, public_path('/'));
|
||||
}
|
||||
|
||||
$themePath = $bPlugin->getPath() . '/Themes';
|
||||
if (is_dir($themePath)) {
|
||||
File::copyDirectory($themePath, base_path('themes'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run plugin seeder
|
||||
*
|
||||
* @param $bPlugin
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function runSeeder($bPlugin)
|
||||
{
|
||||
$seederPath = $bPlugin->getPath() . '/Seeders/';
|
||||
if (is_dir($seederPath)) {
|
||||
|
||||
$seederFiles = glob($seederPath . '*');
|
||||
foreach ($seederFiles as $seederFile) {
|
||||
$seederName = basename($seederFile, '.php');
|
||||
$className = "\\Plugin\\{$bPlugin->getDirname()}\\Seeders\\{$seederName}";
|
||||
if (class_exists($className)) {
|
||||
$seeder = new $className;
|
||||
$seeder->run();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据库迁移
|
||||
*/
|
||||
|
|
@ -99,7 +145,6 @@ class PluginRepo
|
|||
*/
|
||||
public static function uninstallPlugin(BPlugin $bPlugin)
|
||||
{
|
||||
// self::removeStaticFiles($bPlugin);
|
||||
self::rollbackDatabase($bPlugin);
|
||||
$type = $bPlugin->type;
|
||||
$code = $bPlugin->code;
|
||||
|
|
@ -217,7 +262,7 @@ class PluginRepo
|
|||
$allPlugins = self::allPlugins();
|
||||
|
||||
return $allPlugins->where('type', 'shipping')->filter(function ($item) {
|
||||
$plugin = app('plugin')->getPlugin($item->code);
|
||||
$plugin = plugin($item->code);
|
||||
if ($plugin) {
|
||||
$item->plugin = $plugin;
|
||||
}
|
||||
|
|
@ -234,7 +279,24 @@ class PluginRepo
|
|||
$allPlugins = self::allPlugins();
|
||||
|
||||
return $allPlugins->where('type', 'payment')->filter(function ($item) {
|
||||
$plugin = app('plugin')->getPlugin($item->code);
|
||||
$plugin = plugin($item->code);
|
||||
if ($plugin) {
|
||||
$item->plugin = $plugin;
|
||||
}
|
||||
|
||||
return $plugin && $plugin->getEnabled();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all enabled themes
|
||||
*/
|
||||
public static function getEnabledThemes(): Collection
|
||||
{
|
||||
$allPlugins = self::allPlugins();
|
||||
|
||||
return $allPlugins->where('type', 'theme')->filter(function ($item) {
|
||||
$plugin = plugin($item->code);
|
||||
if ($plugin) {
|
||||
$item->plugin = $plugin;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ class DesignService
|
|||
$content['module_code'] = $moduleCode;
|
||||
if ($moduleCode == 'slideshow') {
|
||||
return self::handleSlideShow($content);
|
||||
} elseif (in_array($moduleCode, ['image401', 'image100'])) {
|
||||
} elseif (in_array($moduleCode, ['image401', 'image100', 'image200', 'image300'])) {
|
||||
return self::handleImage401($content);
|
||||
} elseif ($moduleCode == 'brand') {
|
||||
return self::handleBrand($content);
|
||||
|
|
@ -142,9 +142,10 @@ class DesignService
|
|||
$images = [];
|
||||
foreach ($content['images'] as $image) {
|
||||
$images[] = [
|
||||
'image' => image_origin($image['image'] ?? ''),
|
||||
'text' => $image['text'][locale()] ?? '',
|
||||
'link' => self::handleLink($image['link']['type'] ?? '', $image['link']['value'] ?? ''),
|
||||
'image' => image_origin($image['image'] ?? ''),
|
||||
'text' => $image['text'][locale()] ?? '',
|
||||
'sub_text' => $image['sub_text'][locale()] ?? '',
|
||||
'link' => self::handleLink($image['link']['type'] ?? '', $image['link']['value'] ?? ''),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ class DatabaseSeeder extends Seeder
|
|||
ProductsSeeder::class,
|
||||
AttributesSeeder::class,
|
||||
SettingsSeeder::class,
|
||||
ThemeSeeder::class,
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
|
@ -24,7 +24,7 @@ class OpenaiController extends Controller
|
|||
*/
|
||||
public function index()
|
||||
{
|
||||
$plugin = app('plugin')->getPlugin('openai');
|
||||
$plugin = plugin('openai');
|
||||
|
||||
$error = '';
|
||||
$baseUrl = config('beike.api_url') . '/api/openai';
|
||||
|
|
|
|||
|
|
@ -13,15 +13,17 @@ return new class extends Migration
|
|||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('openai_logs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('user_id')->index('user_id');
|
||||
$table->text('question');
|
||||
$table->text('answer');
|
||||
$table->string('request_ip');
|
||||
$table->text('user_agent');
|
||||
$table->timestamps();
|
||||
});
|
||||
if (! Schema::hasTable('openai_logs')) {
|
||||
Schema::create('openai_logs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('user_id')->index('user_id');
|
||||
$table->text('question');
|
||||
$table->text('answer');
|
||||
$table->string('request_ip');
|
||||
$table->text('user_agent');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
|
|
@ -0,0 +1,47 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-09 14:12:25
|
||||
* @LastEditTime 2022-09-16 19:05:44
|
||||
*/
|
||||
|
||||
body.page-theme {
|
||||
.theme-wrap {
|
||||
.item {
|
||||
border: 1px solid #e5e5e5;
|
||||
box-shadow: 0px 0px 14px 0px rgba(55, 53, 76, 0.1);
|
||||
border-radius: 6px;
|
||||
transition: all 0.3s ease-in-out;
|
||||
&:hover {
|
||||
box-shadow: 0px 12px 40px -10px rgba(55, 53, 76, 0.36);
|
||||
}
|
||||
|
||||
.img {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.theme-bottom {
|
||||
border-top: 1px solid #eee;
|
||||
height: 54px;
|
||||
padding: 10px;
|
||||
|
||||
.enabled-text {
|
||||
color: #01cf38;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
background-color: #01cf38;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -28,3 +28,4 @@ $primary: #fd560f;
|
|||
@import 'autocomplete';
|
||||
@import 'page-category';
|
||||
@import './design/menu';
|
||||
@import './page-theme';
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@
|
|||
layer.open({
|
||||
type: 2,
|
||||
title: '',
|
||||
area: ['700px', '80%'],
|
||||
area: ['840px', '80%'],
|
||||
content: `${config.api_url}/api/vip_rights?domain=${config.app_url}`,
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -24,7 +24,10 @@
|
|||
<pb-image-selector v-model="item.image" :is-language="false"></pb-image-selector>
|
||||
<div class="tag">{{ __('admin/builder.text_suggested_size') }}: 200x200</div>
|
||||
</div>
|
||||
<div class="module-edit-title">{{ __('admin/builder.text_set_title') }}</div>
|
||||
<text-i18n v-model="item.text" style="margin-bottom: 10px"></text-i18n>
|
||||
<div class="module-edit-title">{{ __('admin/builder.text_set_subtitle') }}</div>
|
||||
<text-i18n v-model="item.sub_text" style="margin-bottom: 10px"></text-i18n>
|
||||
<link-selector v-model="item.link"></link-selector>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -74,6 +77,7 @@ Vue.component('module-editor-icons', {
|
|||
value:''
|
||||
},
|
||||
text: languagesFill(''),
|
||||
sub_text: languagesFill(''),
|
||||
show: true
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
<template id="module-editor-image200-template">
|
||||
<div class="image-edit-wrapper">
|
||||
<div class="module-editor-row">{{ __('admin/builder.text_set_up') }}</div>
|
||||
<div class="module-edit-group">
|
||||
<div class="module-edit-title">{{ __('admin/builder.text_add_pictures') }}</div>
|
||||
<div class="pb-images-selector" v-for="(item, index) in module.images" :key="index">
|
||||
<div class="selector-head" @click="itemShow(index)">
|
||||
<div class="left">
|
||||
|
||||
<img :src="thumbnail(item.image['{{ locale() }}'], 40, 40)" class="img-responsive">
|
||||
</div>
|
||||
|
||||
<div class="right"><i :class="'el-icon-arrow-'+(item.show ? 'up' : 'down')"></i></div>
|
||||
</div>
|
||||
<div :class="'pb-images-list ' + (item.show ? 'active' : '')">
|
||||
<div class="pb-images-top">
|
||||
<pb-image-selector v-model="item.image"></pb-image-selector>
|
||||
<div class="tag">{{ __('admin/builder.text_suggested_size') }}:
|
||||
<span>700 x 300</span>
|
||||
</div>
|
||||
</div>
|
||||
<link-selector v-model="item.link"></link-selector>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script type="text/javascript">
|
||||
Vue.component('module-editor-image200', {
|
||||
template: '#module-editor-image200-template',
|
||||
|
||||
props: ['module'],
|
||||
|
||||
data: function () {
|
||||
return {
|
||||
//
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
module: {
|
||||
handler: function (val) {
|
||||
this.$emit('on-changed', val);
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
|
||||
created: function () {
|
||||
//
|
||||
},
|
||||
|
||||
methods: {
|
||||
itemShow(index) {
|
||||
this.module.images.find((e, key) => {if (index != key) return e.show = false});
|
||||
this.module.images[index].show = !this.module.images[index].show;
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@push('footer-script')
|
||||
<script>
|
||||
register = @json($register);
|
||||
|
||||
// 定义模块的配置项
|
||||
register.make = {
|
||||
style: {
|
||||
background_color: ''
|
||||
},
|
||||
floor: languagesFill(''),
|
||||
images: [
|
||||
{
|
||||
image: languagesFill('https://via.placeholder.com/700x300/eeeeee'),
|
||||
show: true,
|
||||
link: {
|
||||
type: 'product',
|
||||
value:''
|
||||
}
|
||||
},
|
||||
{
|
||||
image: languagesFill('https://via.placeholder.com/700x300/eeeeee'),
|
||||
show: false,
|
||||
link: {
|
||||
type: 'product',
|
||||
value:''
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
app.source.modules.push(register)
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
<template id="module-editor-image300-template">
|
||||
<div class="image-edit-wrapper">
|
||||
<div class="module-editor-row">{{ __('admin/builder.text_set_up') }}</div>
|
||||
<div class="module-edit-group">
|
||||
<div class="module-edit-title">{{ __('admin/builder.text_add_pictures') }}</div>
|
||||
<div class="pb-images-selector" v-for="(item, index) in module.images" :key="index">
|
||||
<div class="selector-head" @click="itemShow(index)">
|
||||
<div class="left">
|
||||
|
||||
<img :src="thumbnail(item.image['{{ locale() }}'], 40, 40)" class="img-responsive">
|
||||
</div>
|
||||
|
||||
<div class="right"><i :class="'el-icon-arrow-'+(item.show ? 'up' : 'down')"></i></div>
|
||||
</div>
|
||||
<div :class="'pb-images-list ' + (item.show ? 'active' : '')">
|
||||
<div class="pb-images-top">
|
||||
<pb-image-selector v-model="item.image"></pb-image-selector>
|
||||
<div class="tag">{{ __('admin/builder.text_suggested_size') }}:
|
||||
<span>400 x 200</span>
|
||||
</div>
|
||||
</div>
|
||||
<link-selector v-model="item.link"></link-selector>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script type="text/javascript">
|
||||
Vue.component('module-editor-image300', {
|
||||
template: '#module-editor-image300-template',
|
||||
|
||||
props: ['module'],
|
||||
|
||||
data: function () {
|
||||
return {
|
||||
//
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
module: {
|
||||
handler: function (val) {
|
||||
this.$emit('on-changed', val);
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
|
||||
created: function () {
|
||||
//
|
||||
},
|
||||
|
||||
methods: {
|
||||
itemShow(index) {
|
||||
this.module.images.find((e, key) => {if (index != key) return e.show = false});
|
||||
this.module.images[index].show = !this.module.images[index].show;
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@push('footer-script')
|
||||
<script>
|
||||
register = @json($register);
|
||||
|
||||
// 定义模块的配置项
|
||||
register.make = {
|
||||
style: {
|
||||
background_color: ''
|
||||
},
|
||||
floor: languagesFill(''),
|
||||
images: [
|
||||
{
|
||||
image: languagesFill('https://via.placeholder.com/400x200/eeeeee'),
|
||||
show: true,
|
||||
link: {
|
||||
type: 'product',
|
||||
value:''
|
||||
}
|
||||
},
|
||||
{
|
||||
image: languagesFill('https://via.placeholder.com/400x200/eeeeee'),
|
||||
show: false,
|
||||
link: {
|
||||
type: 'product',
|
||||
value:''
|
||||
}
|
||||
},
|
||||
{
|
||||
image: languagesFill('https://via.placeholder.com/400x200/eeeeee'),
|
||||
show: false,
|
||||
link: {
|
||||
type: 'product',
|
||||
value:''
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
app.source.modules.push(register)
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
|
||||
data: {
|
||||
plugins: @json($plugins ?? []),
|
||||
page: 1,
|
||||
page: bk.getQueryString('page', 1) * 1,
|
||||
|
||||
filter: {
|
||||
keyword: bk.getQueryString('keyword'),
|
||||
|
|
@ -120,6 +120,21 @@
|
|||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
// 监听浏览器返回事件
|
||||
window.addEventListener('popstate', () => {
|
||||
const page = bk.getQueryString('page');
|
||||
|
||||
if (this.page < 2) {
|
||||
window.history.back(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
this.page = page * 1 - 1;
|
||||
this.loadData();
|
||||
});
|
||||
},
|
||||
|
||||
computed: {
|
||||
url: function() {
|
||||
let filter = {};
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@
|
|||
<td>
|
||||
<div v-if="plugin.installed">
|
||||
<span :style="!plugin.status ? 'cursor: not-allowed':''">
|
||||
<a :class="['btn btn-outline-secondary btn-sm', !plugin.status ? 'disabled' : '' ]" :href="plugin.edit_url">{{ __('admin/common.edit') }}</a>
|
||||
<a v-if="plugin.type != 'theme'" :class="['btn btn-outline-secondary btn-sm', !plugin.status ? 'disabled' : '' ]" :href="plugin.edit_url">{{ __('admin/common.edit') }}</a>
|
||||
<a v-else :class="['btn btn-outline-secondary btn-sm', !plugin.status ? 'disabled' : '' ]" href="{{ admin_route('theme.index') }}">{{ __('admin/plugin.to_enable') }}</a>
|
||||
</span>
|
||||
<a class="btn btn-outline-danger btn-sm" @click="installedPlugin(plugin.code, 'uninstall', index)">{{ __('admin/common.uninstall') }}</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -53,7 +53,9 @@
|
|||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="tab-basic">
|
||||
<h6 class="border-bottom pb-3 mb-4">{{ __('common.data') }}</h6>
|
||||
<x-admin-form-input-locale :width="600" name="descriptions.*.name" title="{{ __('common.name') }}" :value="$descriptions" :required="true" />
|
||||
<x-admin-form-input-locale
|
||||
:width="600" name="descriptions.*.name" title="{{ __('common.name') }}"
|
||||
:value="$descriptions" :required="true" />
|
||||
<x-admin::form.row title="{{ __('common.image') }}">
|
||||
<draggable
|
||||
element="div"
|
||||
|
|
@ -480,7 +482,7 @@
|
|||
isMove: false,
|
||||
form: {
|
||||
attributes: @json(old('pickups', $product_attributes) ?? []),
|
||||
images: @json($product->images ?? []),
|
||||
images: @json(old('images', $product->images) ?? []),
|
||||
model: @json($product->skus[0]['model'] ?? ''),
|
||||
price: @json($product->skus[0]['price'] ?? ''),
|
||||
quantity: @json($product->skus[0]['quantity'] ?? ''),
|
||||
|
|
|
|||
|
|
@ -85,10 +85,6 @@
|
|||
<x-admin-form-input name="product_per_page" title="{{ __('admin/setting.product_per_page') }}" required value="{{ old('product_per_page', system_setting('base.product_per_page', 20)) }}">
|
||||
</x-admin-form-input>
|
||||
|
||||
<x-admin-form-select title="模版主题" name="theme" :value="old('theme', system_setting('base.theme', 'default'))" :options="$themes">
|
||||
<div class="help-text font-size-12 lh-base">主题模板选择</div>
|
||||
</x-admin-form-select>
|
||||
|
||||
<x-admin-form-textarea name="head_code" title="{{ __('admin/setting.head_code') }}" value="{!! old('head_code', system_setting('base.head_code', '')) !!}">
|
||||
<div class="help-text font-size-12 lh-base">{{ __('admin/setting.head_code_info') }}</div>
|
||||
</x-admin-form-textarea>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
@extends('admin::layouts.master')
|
||||
|
||||
@section('title', __('admin/common.theme_index'))
|
||||
|
||||
@section('body-class', 'page-theme')
|
||||
|
||||
@section('content')
|
||||
<div id="customer-app" class="card h-min-600">
|
||||
<div class="card-header"><h5 class="card-title">{{ __('admin/theme.page_title') }}</h5></div>
|
||||
<div class="card-body">
|
||||
<div class="theme-wrap">
|
||||
<div class="row">
|
||||
@foreach ($themes as $item)
|
||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
||||
<div class="item">
|
||||
<div class="img"><img src="{{ $item['image'] }}" class="img-fluid"></div>
|
||||
<div class="theme-bottom d-flex justify-content-between align-items-center">
|
||||
<div class="name fs-5">{{ $item['name'] }}</div>
|
||||
<div class="theme-tool">
|
||||
@if ($item['status'])
|
||||
<div class="enabled-text">{{ __('admin/theme.enabled_text') }}</div>
|
||||
@else
|
||||
<button class="btn btn-outline-success enabled-theme" data-code="{{ $item['code'] }}">{{ __('common.enabled') }}</button>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="theme-config" class="p-3" style="display: none">
|
||||
<div class="form-check form-check-inline mb-3">
|
||||
<input class="form-check-input" type="checkbox" id="theme-demo-data" value="">
|
||||
<label class="form-check-label" for="theme-demo-data">{{ __('admin/theme.theme_pop_checkbox') }}</label>
|
||||
</div>
|
||||
<div class="text-danger"><i class="bi bi-exclamation-triangle-fill"></i> {{ __('admin/theme.theme_pop_text') }}</div>
|
||||
<div class="d-flex justify-content-end mt-3">
|
||||
<button class="btn btn-primary theme-config-btn">{{ __('common.confirm') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('footer')
|
||||
<script>
|
||||
$(function () {
|
||||
let theme = null;
|
||||
$('.enabled-theme').click(function () {
|
||||
theme = $(this).data('code');
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '{{ __('common.text_hint') }}',
|
||||
area: ['400px'],
|
||||
content: $('#theme-config'),
|
||||
})
|
||||
})
|
||||
|
||||
$('.theme-config-btn').click(function () {
|
||||
const demoData = $('#theme-demo-data').is(':checked');
|
||||
|
||||
$http.put(`themes/${theme}`, {import_demo: demoData}).then((res) => {
|
||||
layer.msg(res.message, {time: 600}, ()=> {
|
||||
window.location.reload();
|
||||
});
|
||||
})
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-01 16:23:34
|
||||
* @LastEditTime 2022-09-16 20:57:19
|
||||
*/
|
||||
|
||||
body.page-account {
|
||||
background-color: #F7F8FA;
|
||||
|
||||
.account-card {
|
||||
border: none;
|
||||
|
||||
.card-items {
|
||||
> a {
|
||||
width: 25%;
|
||||
color: #444444;
|
||||
text-decoration: none !important;
|
||||
i {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
span {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
@media (min-width: 992px) {
|
||||
min-height: 509px;
|
||||
}
|
||||
}
|
||||
|
||||
.order-wrap {
|
||||
background-color: #f6f8f9;
|
||||
|
||||
@media (min-width:768px) {
|
||||
padding: 2rem 1rem;
|
||||
}
|
||||
|
||||
.icon {
|
||||
i {
|
||||
font-size: 4.5rem;
|
||||
color: #777;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.account-sides-info {
|
||||
@media (max-width:768px) {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:45:17
|
||||
*/
|
||||
|
||||
@charset "UTF-8";
|
||||
|
||||
$primary: #ee403d;
|
||||
$sub_color: #78e723;
|
||||
$price: $primary;
|
||||
|
||||
@import './iconfont';
|
||||
@import './global';
|
||||
|
||||
@import './header';
|
||||
@import './footer';
|
||||
@import './product-style';
|
||||
@import './news';
|
||||
@import './login';
|
||||
@import './account/account';
|
||||
@import './page-product';
|
||||
@import './cart';
|
||||
@import './page-checkout';
|
||||
@import './page-categories';
|
||||
@import './element-ui';
|
||||
@import './order-success';
|
||||
@import './page-account-order';
|
||||
@import './page-account-address';
|
||||
@import './page-brands';
|
||||
@import './home';
|
||||
@import './module/module-image-plus';
|
||||
@import './module/module-brand';
|
||||
@import './module/module-tab-product';
|
||||
@import './module/module-icon';
|
||||
@import './module/slideshow';
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,176 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-17 19:26:53
|
||||
* @LastEditTime 2022-09-16 20:57:12
|
||||
*/
|
||||
|
||||
$primary: #ee403d;
|
||||
$success: #71c20b;
|
||||
$sub_color: #78e723;
|
||||
|
||||
$container-max-widths: (
|
||||
sm: 540px,
|
||||
md: 720px,
|
||||
lg: 960px,
|
||||
xl: 1140px,
|
||||
xxl: 1280px
|
||||
);
|
||||
|
||||
// $body-bg: #111;
|
||||
// $body-color: #fff;
|
||||
|
||||
$font-size-base: 0.8rem;
|
||||
$font-family-base: "Poppins","Helvetica","Arial","sans-serif";
|
||||
// $border-radius: 0;
|
||||
$form-check-input-width: 1.2em;
|
||||
// $form-check-input-border-radius: 0;
|
||||
|
||||
// 开启负边距
|
||||
$enable-negative-margins: true;
|
||||
|
||||
$nav-link-color: #1f1f1f;
|
||||
$hr-color: #bcbcbc;
|
||||
|
||||
// Breadcrumbs
|
||||
// scss-docs-start breadcrumb-variables
|
||||
// $breadcrumb-font-size: null !default;
|
||||
$breadcrumb-padding-y: 1.4rem;
|
||||
$breadcrumb-padding-x: 0;
|
||||
// $breadcrumb-item-padding-x: .5rem !default;
|
||||
$breadcrumb-margin-bottom: 0;
|
||||
$breadcrumb-bg: transparent;
|
||||
// $breadcrumb-divider-color: $gray-600 !default;
|
||||
// $breadcrumb-active-color: $gray-600 !default;
|
||||
// $breadcrumb-divider: quote("/") !default;
|
||||
// $breadcrumb-divider-flipped: $breadcrumb-divider !default;
|
||||
// $breadcrumb-border-radius: null !default;
|
||||
|
||||
// $border-radius: 0;
|
||||
$input-btn-padding-y: .46rem;
|
||||
$input-btn-font-size: 0.85rem;
|
||||
$input-focus-border-color: #222;
|
||||
$input-btn-focus-box-shadow: 0 0 11px 0 rgba($color: $sub_color, $alpha: .1);
|
||||
$form-select-focus-box-shadow: 0 0 11px 0 rgba($color: $sub_color, $alpha: .1);
|
||||
|
||||
// $input-btn-padding-x: .75rem !default;
|
||||
$btn-focus-width: 0;
|
||||
// $border-radius: 0;
|
||||
$btn-border-radius: 0.25rem;
|
||||
// $btn-border-radius-sm: 0;
|
||||
$btn-border-radius-lg: 0.25rem;
|
||||
// $btn-padding-y: $input-btn-padding-y !default;
|
||||
// $btn-focus-box-shadow: 0 0 11px 0 rgba($color: $primary, $alpha: .1);
|
||||
|
||||
$link-decoration: none;
|
||||
$link-hover-decoration: underline;
|
||||
// $link-color: #3480e7;
|
||||
$link-hover-color: $primary;
|
||||
$form-select-focus-box-shadow: 0 0 11px 0 rgba($color: $sub_color, $alpha: .1);
|
||||
|
||||
$form-floating-input-padding-t: 1.325rem;
|
||||
$form-floating-input-padding-b: .625rem;
|
||||
$form-floating-padding-y: .8rem;
|
||||
$form-floating-height: 50px;
|
||||
|
||||
$dropdown-border-color: rgba(0, 0, 0, 0.1);
|
||||
$dropdown-item-padding-y: .4rem;
|
||||
|
||||
|
||||
$card-border-width: 0;
|
||||
|
||||
$alert-padding-y: 0.5rem;
|
||||
|
||||
$form-feedback-icon-valid: none;
|
||||
$form-feedback-icon-valid-color: inherit;
|
||||
|
||||
// $dropdown-divider-bg: rgba(0, 0, 0, 0.1);
|
||||
@import './bootstrap-icons';
|
||||
@import 'node_modules/bootstrap/scss/bootstrap';
|
||||
|
||||
.btn-primary {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
padding-right: 50px;
|
||||
padding-left: 50px;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
.dropdown-divider {
|
||||
margin-left: 1rem;
|
||||
margin-right: 1rem;
|
||||
opacity: .1;
|
||||
}
|
||||
}
|
||||
|
||||
.table > :not(:first-child) {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.card {
|
||||
// box-shadow: rgba(0, 0, 0, .1) 0px 1px 4px 0px;
|
||||
// border: none;
|
||||
|
||||
.card-header {
|
||||
padding: 1rem 1rem .3rem;
|
||||
background-color: #fff;
|
||||
// font-weight: bold;
|
||||
// font-size: .8rem;
|
||||
border-bottom: 0 solid rgba(0,0,0,.125);
|
||||
|
||||
// &:first-child {
|
||||
// border-radius: 0;
|
||||
// }
|
||||
|
||||
.card-title {
|
||||
margin-bottom: 0;
|
||||
padding-left: 10px;
|
||||
border-left: 3px solid $primary;
|
||||
line-height: 1;
|
||||
// font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
.breadcrumb-item {
|
||||
&:last-of-type {
|
||||
a {
|
||||
color: #666;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
a {
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
|
||||
.was-validated {
|
||||
.form-control,
|
||||
.form-select {
|
||||
&:valid {
|
||||
border-color: $input-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
&:valid {
|
||||
border-color: rgba(#000, .25);
|
||||
|
||||
&:checked {
|
||||
background-color: $primary;
|
||||
border-color: $primary;
|
||||
}
|
||||
|
||||
&~.form-check-label {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-15 17:35:29
|
||||
* @LastEditTime 2022-09-16 20:47:16
|
||||
*/
|
||||
|
||||
body.page-checkout, body.page-cart {
|
||||
background-color: #f6f8fa;
|
||||
|
||||
.left-column {
|
||||
@media (min-width: 992px) {
|
||||
width: 70%;
|
||||
}
|
||||
}
|
||||
|
||||
.right-column {
|
||||
@media (min-width: 992px) {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
margin-top: 1.4rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.page-cart {
|
||||
.cart-products-wrap {
|
||||
.table {
|
||||
tbody {
|
||||
border-top: none;
|
||||
td {
|
||||
vertical-align: middle;
|
||||
border-color: #f0f2f4;
|
||||
}
|
||||
|
||||
// tr {
|
||||
// &.active {
|
||||
// background-color: #fff6f1;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
thead {
|
||||
background-color: #F8F9FA;
|
||||
|
||||
th {
|
||||
border-bottom: none;
|
||||
padding: 0.7rem 0.5rem;
|
||||
box-shadow: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.p-image {
|
||||
input {
|
||||
flex: 0 0 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.total-wrap {
|
||||
&.total-wrap-fixed {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding-top: 1rem;
|
||||
border-bottom: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
li {
|
||||
background-color: transparent;
|
||||
padding: 0.7rem 0;
|
||||
border-color: #EEEEEE;
|
||||
|
||||
&:not(.d-grid) {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between; // flex-end | center | space-between
|
||||
}
|
||||
|
||||
.total-price {
|
||||
color: #222222;
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
@charset "UTF-8;"
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:47:45
|
||||
*/
|
||||
|
||||
.el-input__inner {
|
||||
// border-radius: 0 !important;
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-03 22:32:29
|
||||
* @LastEditTime 2022-09-16 20:48:00
|
||||
*/
|
||||
|
||||
footer {
|
||||
// background: #F8F9FA;
|
||||
background: #161616;
|
||||
margin-top: 5rem;
|
||||
color: #cdcdcd;
|
||||
|
||||
@media (max-width:768px) {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.footer-content-left {
|
||||
@media (min-width: 992px) {
|
||||
padding-right: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-active {
|
||||
outline: 2px dashed #4bb1f0 !important;
|
||||
}
|
||||
|
||||
.services-wrap {
|
||||
padding: 2.2rem 0;
|
||||
border-bottom: 1px solid #222;
|
||||
|
||||
.service-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.icon {
|
||||
width: 34px;
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-bottom: 2px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
font-size: .6rem;
|
||||
color: #8D94A0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-content {
|
||||
padding: 3rem 0;
|
||||
|
||||
a {
|
||||
color: #cdcdcd;
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
.logo {
|
||||
max-width: 240px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.text {
|
||||
color: #cdcdcd;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-top: 1px solid #232323;
|
||||
|
||||
@media (min-width:768px) {
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
@media (max-width:768px) {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.right-img {
|
||||
max-height: 42px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,326 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-09 19:16:39
|
||||
* @LastEditTime 2022-09-16 20:55:07
|
||||
*/
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body[class^="page-account-"] {
|
||||
background-color: #F7F8FA;
|
||||
}
|
||||
|
||||
@font-face {font-family: 'Poppins';
|
||||
src: url('/fonts/poppins/Poppins-Regular.ttf') format("truetype");
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-weight: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {font-family: 'Poppins';
|
||||
src: url('/fonts/poppins/Poppins-Medium.ttf') format("truetype");
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@font-face {font-family: 'Poppins';
|
||||
src: url('/fonts/poppins/Poppins-SemiBold.ttf') format("truetype");
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h1,h2,h3, h4, h5, h6, b, strong {
|
||||
font-weight: 700;
|
||||
color: #282828;
|
||||
}
|
||||
|
||||
@for $i from 1 through 6 {
|
||||
.min-h#{$i} {
|
||||
min-height: #{$i}00px;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 100 200 300 ... 1000 的宽度
|
||||
@for $i from 1 through 10 {
|
||||
.wp-#{$i}00 {
|
||||
width: #{$i}00px;
|
||||
}
|
||||
}
|
||||
// clac(100% - #{$i}00px)
|
||||
@for $i from 1 through 10 {
|
||||
.wp-#{$i}00- {
|
||||
width: calc(100% - #{$i}00px);
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 100 200 300 ... 1000 的最小高度
|
||||
@for $i from 1 through 10 {
|
||||
.h-min-#{$i}00 {
|
||||
min-height: #{$i}00px;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 100 200 300 ... 1000 的最小宽度
|
||||
@for $i from 1 through 10 {
|
||||
.w-min-#{$i}00 {
|
||||
min-width: #{$i}00px;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 100 200 300 ... 1000 的最大宽度
|
||||
@for $i from 1 through 10 {
|
||||
.w-max-#{$i}00 {
|
||||
max-width: #{$i}00px;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 100 200 300 ... 1000 的高度
|
||||
@for $i from 1 through 10 {
|
||||
.hp-#{$i}00 {
|
||||
height: #{$i}00px;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成 10 20 30 ... 90 的高宽
|
||||
@for $i from 1 through 10 {
|
||||
.wh-#{$i}0 {
|
||||
height: #{$i}0px;
|
||||
width: #{$i}0px;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.col-form-label.required {
|
||||
&::before {
|
||||
content: "*";
|
||||
color: #f56c6c;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.login-pop-box {
|
||||
overflow: inherit;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
width: 90% !important;
|
||||
height: 80% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.module-title {
|
||||
font-size: 1.5rem;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
padding-bottom: 10px;
|
||||
color: #333;
|
||||
margin-bottom: 2rem;
|
||||
|
||||
@media (max-width: 992px) {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
transform:translateX(-50%);
|
||||
left: 50%;
|
||||
content: '';
|
||||
width: 60px;
|
||||
height: 2px;
|
||||
background: $sub_color;
|
||||
}
|
||||
}
|
||||
|
||||
.tinymce-format-p {
|
||||
p {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.steps-wrap {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
border-bottom: 3px solid #D7D7D7;
|
||||
}
|
||||
|
||||
> div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
&.active {
|
||||
.number {
|
||||
background-color: $sub_color;
|
||||
border-color: $sub_color;
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: #111;
|
||||
}
|
||||
}
|
||||
|
||||
.number-wrap {
|
||||
padding: 0 4px;
|
||||
margin-bottom: .5rem;
|
||||
}
|
||||
|
||||
.number {
|
||||
border: 2px solid #ddd;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
}
|
||||
|
||||
.title {
|
||||
color: #848484;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.quantity-wrap {
|
||||
width: 80px;
|
||||
height: 37px;
|
||||
display: flex;
|
||||
align-content: space-between;
|
||||
border: 1px solid #ced4da;
|
||||
input {
|
||||
border: none;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
> .right {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
// align-items: center;
|
||||
border-left: 1px solid #ced4da;
|
||||
|
||||
i {
|
||||
flex: 1;
|
||||
width: 20px;
|
||||
height: 17px;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
&:last-of-type {
|
||||
border-top: 1px solid #ced4da;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fixed-top-line-fixed {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.account-sides-info {
|
||||
.head {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 2rem 1rem;
|
||||
background-color: #fff;
|
||||
border-radius: 0.375rem 0.375rem 0 0;
|
||||
|
||||
.portrait {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.14);
|
||||
border: 2px solid #FFFFFF;
|
||||
overflow: hidden;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.account-name {
|
||||
font-weight: bold;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
|
||||
.account-email {
|
||||
color: #666666;
|
||||
}
|
||||
}
|
||||
|
||||
.account-links {
|
||||
> a {
|
||||
color: #4B566B;
|
||||
border: none;
|
||||
padding: 0.8rem 1rem;
|
||||
border-bottom: 1px solid #EEEEEE;
|
||||
transition: all .2s ease-in-out;
|
||||
text-decoration: none !important;
|
||||
|
||||
&:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #E9ECEF;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: #E9ECEF;
|
||||
color: #4B566B;
|
||||
}
|
||||
|
||||
.badge {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text-size-min {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.text-truncate-2 {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
@media (max-width: 768px) {
|
||||
padding-top: .8rem;
|
||||
padding-bottom: .8rem;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,457 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-03 22:32:29
|
||||
* @LastEditTime 2022-09-16 20:55:12
|
||||
*/
|
||||
|
||||
header {
|
||||
background: #fff;
|
||||
@media (min-width: 992px) {
|
||||
// border-bottom: 1px solid #dee0ea;
|
||||
// box-shadow: 0px 1px 10px rgba(0, 0, 0, .04);
|
||||
}
|
||||
// body:not(.page-home) & {
|
||||
// box-shadow: 0 6px 12px 0 rgba(0, 0, 0, .04);
|
||||
// }
|
||||
|
||||
body.page-home & {
|
||||
@media (min-width: 992px) {
|
||||
box-shadow: 0 2px 3px rgba(33,37,41,.07);
|
||||
// border-bottom: 1px solid #dee0ea;
|
||||
margin-bottom: 26px;
|
||||
}
|
||||
|
||||
.menu-box {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.top-wrap {
|
||||
// padding: 10px;
|
||||
height: 38px;
|
||||
// max-height: 50px;
|
||||
background: #F7F8FA;
|
||||
// background: #161616;
|
||||
display: flex;
|
||||
// border-bottom: 1px solid #dee0ea;
|
||||
}
|
||||
|
||||
.top-wrap, .header-content {
|
||||
.dropdown {
|
||||
&:hover {
|
||||
background-color: #fff;
|
||||
|
||||
.dropdown-menu {
|
||||
margin: 0;
|
||||
display: block;
|
||||
box-shadow: 0 0 15px rgb(0, 0, 0, .1);
|
||||
border: none;
|
||||
|
||||
&.dropdown-menu-end {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-wrap {
|
||||
flex: 1;
|
||||
margin: 0 20px;
|
||||
|
||||
.input-group {
|
||||
background-color: #f1f1f3;
|
||||
border-top-left-radius: 0.25rem;
|
||||
border-bottom-left-radius: 0.25rem;
|
||||
}
|
||||
|
||||
input {
|
||||
border-color: #f1f1f3 !important;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
background-color: transparent !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: $sub_color;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-box {
|
||||
// border-top: 1px solid #e5e5e5;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
.menu-wrap {
|
||||
.container {
|
||||
max-width: 1140px;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.navbar-nav {
|
||||
.dropdown {
|
||||
|
||||
&.position-static >.dropdown-menu {
|
||||
// top: 100%;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.dropdown-menu {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translate(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
>.dropdown-menu {
|
||||
left: 50%;
|
||||
transform: translate(-50%, 0.5rem);
|
||||
transition: all .2s ease-in-out;
|
||||
transition-property: visibility,transform,opacity;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
display: block;
|
||||
transform-origin: top center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> .navbar-nav {
|
||||
> .nav-item {
|
||||
background-color: transparent;
|
||||
margin: 0 10px;
|
||||
|
||||
> .nav-link {
|
||||
font-size: 14px;
|
||||
padding: .9rem;
|
||||
position: relative;
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
bottom: 80%;
|
||||
padding: 2px 4px;
|
||||
font-weight: 400;
|
||||
left: calc(50% - 0px);
|
||||
margin-left: 0px;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 10px;
|
||||
border: 4px solid;
|
||||
border-color: inherit;
|
||||
border-right-color: #0000!important;
|
||||
border-bottom-color: #0000!important;
|
||||
border-right-width: 7px;
|
||||
border-left-width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.group-name {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.ul-children {
|
||||
a {
|
||||
color: #7a7a7a;
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-content {
|
||||
position: relative;
|
||||
padding: 20px 0;
|
||||
background-color: #fff;
|
||||
|
||||
> .container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 25%;
|
||||
|
||||
img {
|
||||
max-width: 200px;
|
||||
max-height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.right-btn {
|
||||
width: 25%;
|
||||
|
||||
.nav-link {
|
||||
color: #333;
|
||||
padding-right: 0.7rem;
|
||||
padding-left: 0.7rem;
|
||||
position: relative;
|
||||
i {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.cart-badge-quantity {
|
||||
position: absolute;
|
||||
left: 25px;
|
||||
top: -3px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
display: none;
|
||||
width: 23px;
|
||||
zoom: 0.9;
|
||||
height: 23px;
|
||||
line-height: 24px;
|
||||
background-color: $sub_color;
|
||||
color: #222;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-mobile {
|
||||
.mobile-content {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
> div {
|
||||
width: 33.33%;
|
||||
|
||||
&.center a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 30px;
|
||||
|
||||
img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
> div {
|
||||
cursor: pointer;
|
||||
> i {
|
||||
font-size: 1.5rem;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-open-search {
|
||||
margin-left: 10px;
|
||||
|
||||
> i {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
.nav-link {
|
||||
padding: 0;
|
||||
i {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
// margin-left: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#offcanvas-search-top {
|
||||
height: 100px;
|
||||
justify-content: center;
|
||||
|
||||
.offcanvas-header {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
input {
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-close {
|
||||
padding: 1rem;
|
||||
opacity: 1;
|
||||
|
||||
&:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#offcanvas-right-cart {
|
||||
.select-wrap {
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
|
||||
i {
|
||||
font-size: 20px;
|
||||
color: #aaa;
|
||||
&.bi-check-circle-fill {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.offcanvas-right-products {
|
||||
.product-list {
|
||||
padding: 1rem 0;
|
||||
border-top: 1px solid #eee;
|
||||
|
||||
.left {
|
||||
width: 80px;
|
||||
flex: 0 0 80px;
|
||||
height: 80px;
|
||||
border: 1px solid #eee;
|
||||
margin-right: 10px;
|
||||
|
||||
img {
|
||||
max-height: 90px;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
.price {
|
||||
input {
|
||||
margin-left: 10px;
|
||||
width: 50px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.offcanvas-products-delete {
|
||||
cursor: pointer;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.offcanvas-footer {
|
||||
.to-checkout {
|
||||
&:hover {
|
||||
background-color: $sub_color;
|
||||
border-color: $sub_color;
|
||||
color: #111;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#offcanvas-mobile-menu {
|
||||
width: 80%;
|
||||
|
||||
.offcanvas-header {
|
||||
padding: 10px 20px 10px 10px;
|
||||
}
|
||||
|
||||
.mobile-menu-wrap {
|
||||
padding: 0;
|
||||
|
||||
#menu-accordion {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
|
||||
.accordion-item {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
|
||||
.nav-item-text {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
> a {
|
||||
flex: 1;
|
||||
height: 44px;
|
||||
padding-left: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.badge {
|
||||
position: relative;
|
||||
margin-left: 13px;
|
||||
// padding: 2px 4px;
|
||||
font-weight: 400;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 100%;
|
||||
transform: translate(0, -50%);
|
||||
border: 4px solid;
|
||||
border-right-width: 7px;
|
||||
border: 5px solid #0000;
|
||||
border-right-color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> span {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
display: flex;
|
||||
border-left: 1px solid #e5e5e5;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
&:active {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
&[aria-expanded="true"] {
|
||||
background-color: #eee;
|
||||
i {
|
||||
transform:rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-collapse {
|
||||
padding: 10px;
|
||||
border-top: 1px solid #e5e5e5;
|
||||
|
||||
.children-group {
|
||||
.group-name {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.nav {
|
||||
a {
|
||||
color: #777;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:55:22
|
||||
*/
|
||||
|
||||
.module-item {
|
||||
position: relative;
|
||||
|
||||
&.module-item-design {
|
||||
&:hover {
|
||||
.module-edit {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&:after {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 2px;
|
||||
right: 2px;
|
||||
top: 2px;
|
||||
bottom: 2px;
|
||||
z-index: 9;
|
||||
outline: 2px solid $primary;
|
||||
}
|
||||
|
||||
.module-edit {
|
||||
// position: relative;
|
||||
position: absolute;
|
||||
top: -28px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
z-index: 9;
|
||||
// display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
display: none;
|
||||
|
||||
.edit-wrap {
|
||||
background-color: $primary;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
> div {
|
||||
height: 28px;
|
||||
line-height: 30px;
|
||||
padding: 0 10px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
|
||||
&:first-of-type {
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
border: solid #0000;
|
||||
border-right: solid $primary;
|
||||
border-width: 28px 10px 0 0;
|
||||
right: 100%;
|
||||
}
|
||||
&:hover {
|
||||
&:after {
|
||||
border-right-color: darken($primary, 6%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
border: solid #0000;
|
||||
border-left: solid $primary;
|
||||
border-width: 28px 0 0 10px;
|
||||
left: 100%;
|
||||
}
|
||||
&:hover {
|
||||
&:after {
|
||||
border-left-color: darken($primary, 6%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: darken($primary, 6%);
|
||||
}
|
||||
}
|
||||
// flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:55:31
|
||||
*/
|
||||
|
||||
@font-face {font-family: 'iconfont';
|
||||
src: url('/fonts/iconfont/iconfont.woff') format('woff'), /* chrome、firefox */
|
||||
url('/fonts/iconfont/iconfont.ttf') format('truetype'); /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: "iconfont";
|
||||
font-size: 1rem;
|
||||
font-style:normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-stroke-width: 0.2px;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-09 19:16:39
|
||||
* @LastEditTime 2022-09-16 20:55:37
|
||||
*/
|
||||
|
||||
body.page-login, body.page-forgotten {
|
||||
@media (max-width: 768px) {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.el-form-item__error--inline {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.forgotten-link {
|
||||
display: block;
|
||||
margin-top: -14px;
|
||||
}
|
||||
|
||||
.btn-dark {
|
||||
&:hover {
|
||||
background-color: $sub_color;
|
||||
border-color: $sub_color;
|
||||
color: #111;
|
||||
}
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 18px;
|
||||
|
||||
.el-form-item__content {
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.login-item-header {
|
||||
background: #f8f9fa;
|
||||
border-bottom: none;
|
||||
padding: 1.2rem 1.5rem;
|
||||
h6 {
|
||||
font-weight: bold;
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.vr-wrap {
|
||||
margin: 0 80px;
|
||||
}
|
||||
|
||||
.login-wrap {
|
||||
@media (min-width: 768px) {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.card {
|
||||
border: none;
|
||||
@media (min-width: 768px) {
|
||||
width: 340px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-iframe {
|
||||
margin-bottom: 30px;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
padding: 0;
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.vr-wrap {
|
||||
margin: 0 60px;
|
||||
}
|
||||
|
||||
.card {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.social-wrap {
|
||||
.title {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
height: 1px;
|
||||
top: 47%;
|
||||
background: #e5e5e5;
|
||||
}
|
||||
|
||||
span {
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
padding: 0 5px;
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
// border-color: #ccc !important;
|
||||
color: #666;
|
||||
|
||||
img {
|
||||
// transform: translateY(-50%);
|
||||
position: absolute;
|
||||
left: 40px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-04 17:52:22
|
||||
* @LastEditTime 2022-09-16 20:57:25
|
||||
*/
|
||||
|
||||
.module-brand {
|
||||
.brand-item {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
box-shadow: 0 6px 18px rgba(0, 0, 0, .07);
|
||||
margin-bottom: 10px;
|
||||
height: 120px;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
border: 1px solid transparent;
|
||||
transition: all 0.3s ease-in-out;
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 6px 18px rgba(0, 0, 0, .1);
|
||||
border: 1px solid $sub_color;
|
||||
}
|
||||
|
||||
> img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-04 17:52:22
|
||||
* @LastEditTime 2022-09-16 20:57:25
|
||||
*/
|
||||
|
||||
.module-icon-wrap {
|
||||
.image-item {
|
||||
flex: 0 0 40px;
|
||||
height: 40px;
|
||||
@media (max-width: 768px) {
|
||||
flex: 0 0 30px;
|
||||
height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
@media (min-width: 992px) {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:57:29
|
||||
*/
|
||||
|
||||
.module-image-plus {
|
||||
.container-fluid {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
|
||||
img {
|
||||
transition: .3s ease-in-out;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
img {
|
||||
transform: rotate(6deg) scale(1.3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.module-image-plus-top {
|
||||
display: flex;
|
||||
|
||||
.right {
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.module-image-plus-bottom {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.module-image-banner {
|
||||
.container-fluid {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:57:33
|
||||
*/
|
||||
|
||||
.module-tab-product {
|
||||
.module-title {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.nav {
|
||||
.nav-link {
|
||||
color: #6c757d;
|
||||
font-size: .9rem;
|
||||
|
||||
&.active {
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:57:36
|
||||
*/
|
||||
|
||||
.swiper.module-slideshow {
|
||||
--swiper-theme-color: #78e723;/* 设置Swiper风格 */
|
||||
--swiper-navigation-color: #222;/* 单独设置按钮颜色 */
|
||||
--swiper-navigation-size: 30px;/* 设置按钮大小 */
|
||||
|
||||
.swiper-button-prev,.swiper-button-next {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.swiper-button-prev,.swiper-button-next {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
&.rounded-4 {
|
||||
@media (max-width: 992px) {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slideshow-container {
|
||||
@media (min-width: 992px) {
|
||||
padding: 0 5.3rem;
|
||||
}
|
||||
@media (min-width: 1460px) {
|
||||
padding: 0 6.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.swiper-style-plus {
|
||||
position: relative;
|
||||
|
||||
.swiper-button-prev,.swiper-button-next {
|
||||
width: 34px;
|
||||
height: 37px;
|
||||
color: #999;
|
||||
@media (max-width: 768px) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #111;
|
||||
}
|
||||
|
||||
&:after {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.swiper-button-prev {
|
||||
left: -40px;
|
||||
}
|
||||
|
||||
.swiper-button-next {
|
||||
right: -40px;
|
||||
}
|
||||
|
||||
.swiper-pagination {
|
||||
bottom: -10px !important;
|
||||
|
||||
.swiper-pagination-bullet-active {
|
||||
background: $sub_color;
|
||||
}
|
||||
|
||||
&.rectangle {
|
||||
span {
|
||||
border-radius: 0;
|
||||
height: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:47:45
|
||||
*/
|
||||
|
||||
.page-categories-home, .page-pages {
|
||||
background-color: #f6f6f6;
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-01 16:23:34
|
||||
* @LastEditTime 2022-09-16 20:55:44
|
||||
*/
|
||||
|
||||
body.page-order-success, body.page-payment {
|
||||
.order-wrap {
|
||||
.card-body {
|
||||
&.main-body {
|
||||
padding: 3rem;
|
||||
padding-left: 7rem;
|
||||
|
||||
@media (max-width:768px) {
|
||||
padding: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.order-top {
|
||||
padding-bottom: 2.7rem;
|
||||
margin-bottom: 2.7rem;
|
||||
display: flex;
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
|
||||
.left {
|
||||
margin-top: -6px;
|
||||
|
||||
@media (max-width:768px) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #4caf50;
|
||||
font-size: 80px;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
flex: 1;
|
||||
margin-left: 2rem;
|
||||
|
||||
@media (max-width:768px) {
|
||||
margin: 0;
|
||||
}
|
||||
.table {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.order-title {
|
||||
margin-bottom: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.order-info {
|
||||
padding: .7rem;
|
||||
background-color: #fffaf0;
|
||||
border: 1px solid #ffe1ad;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.order-bottom {
|
||||
margin-left: calc(2rem + 80px);
|
||||
line-height: 2;
|
||||
|
||||
@media (max-width:768px) {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-01 16:23:34
|
||||
* @LastEditTime 2022-09-16 20:55:54
|
||||
*/
|
||||
|
||||
body.page-account-address, body.page-checkout {
|
||||
.addresses-wrap {
|
||||
.item {
|
||||
position: relative;
|
||||
padding: 14px 14px 14px 18px;
|
||||
margin-bottom: 1.3rem;
|
||||
border: 1px solid #e8e8e8;
|
||||
height: 130px;
|
||||
cursor: pointer;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
padding: 10px 10px 10px 14px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: #222;
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-left: none;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: 0;
|
||||
width: 4px;
|
||||
height: calc(100% + 2px);
|
||||
background-color: #4991F4;
|
||||
background: repeating-linear-gradient(-45deg, #d60404 0, #d60404 10px, #fff 10px, #fff 20px, #4991F4 20px, #4991F4 30px, #fff 30px, #fff 40px);
|
||||
}
|
||||
}
|
||||
|
||||
.name-wrap {
|
||||
margin-bottom: .6rem;
|
||||
line-height: 1;
|
||||
|
||||
.name {
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.phone {
|
||||
font-size: .8rem;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
.zipcode {
|
||||
margin-bottom: .3rem;
|
||||
}
|
||||
|
||||
.address-info {
|
||||
// margin-bottom: .9rem;
|
||||
height: 32px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.address-bottom {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between; // flex-end | center | space-between
|
||||
// flex-wrap: wrap;
|
||||
a {
|
||||
color: #2d68a8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mobileWidth {
|
||||
width: 600px;
|
||||
@media (max-width: 768px) {
|
||||
width: 95%;
|
||||
}
|
||||
}
|
||||
|
||||
.dialog-address {
|
||||
display: block;
|
||||
|
||||
>div {
|
||||
@media (max-width:768px) {
|
||||
width: 100%;
|
||||
// margin-bottom: 10px;
|
||||
// &:nth-last-child(){
|
||||
// margin-bottom: 0;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width:768px) {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-01 16:23:34
|
||||
* @LastEditTime 2022-09-16 20:55:58
|
||||
*/
|
||||
|
||||
body.page-account-order-list {
|
||||
background-color: #F7F8FA;
|
||||
|
||||
.order-wrap {
|
||||
.table {
|
||||
.sep-row {
|
||||
height: 20px;
|
||||
|
||||
td {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.head-tr {
|
||||
background: #f5f5f5;
|
||||
td {
|
||||
border-bottom-color: #f5f5f5;
|
||||
}
|
||||
}
|
||||
|
||||
thead {
|
||||
background: #f5f5f5;
|
||||
th {
|
||||
font-weight: 500;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
tbody {
|
||||
td {
|
||||
border: 1px solid #e5e5e5;
|
||||
}
|
||||
}
|
||||
|
||||
.product-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.img {
|
||||
flex: 0 0 60px;
|
||||
margin-right: 10px;
|
||||
|
||||
@media (max-width:768px) {
|
||||
// display: none;
|
||||
flex: 0 0 50px;
|
||||
width: 50px
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
@media (max-width:768px) {
|
||||
a {
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.page-account-order-info {
|
||||
background-color: #F7F8FA;
|
||||
|
||||
.order-head {
|
||||
|
||||
}
|
||||
|
||||
.product-list {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
// justify-content: space-between; // flex-end | center | space-between
|
||||
|
||||
.left {
|
||||
flex: 0 0 80px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.right {
|
||||
color: #767676;
|
||||
font-size: .9375rem;
|
||||
|
||||
.name {
|
||||
// font-weight: bold;
|
||||
margin-bottom: .4rem;
|
||||
color: #1a1a1a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-15 15:43:12
|
||||
* @LastEditTime 2022-09-16 20:56:17
|
||||
*/
|
||||
|
||||
body.page-brands {
|
||||
.brand-item {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
box-shadow: 0 6px 18px rgba(0, 0, 0, .07);
|
||||
margin-bottom: 10px;
|
||||
height: 133px;
|
||||
width: 100%;
|
||||
|
||||
>img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.brand-list {
|
||||
li {
|
||||
list-style: none;
|
||||
|
||||
a {
|
||||
color: #242424;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.curser-list {
|
||||
cursor: pointer;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
display: block;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
margin-bottom: 6px;
|
||||
|
||||
& + .list-group-item {
|
||||
border-left: 1px solid #e4e4e4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
>li>a {
|
||||
color: #242424;
|
||||
transition: all .3s;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #aaa;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,230 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-02 19:19:52
|
||||
* @LastEditTime 2022-09-16 20:56:05
|
||||
*/
|
||||
|
||||
body.page-categories {
|
||||
.col-lg-9.right-column {
|
||||
@media (min-width: 992px) {
|
||||
width: 78%;
|
||||
}
|
||||
}
|
||||
|
||||
.col-lg-3.left-column {
|
||||
@media (min-width: 992px) {
|
||||
width: 22%;
|
||||
}
|
||||
|
||||
.card:not(:last-of-type) {
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
margin-bottom: 1.4rem;
|
||||
padding-bottom: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.children-wrap {
|
||||
@media (max-width: 992px) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #333;
|
||||
margin-right: 4px;
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.style-wrap {
|
||||
label {
|
||||
cursor: pointer;
|
||||
&.active {
|
||||
svg {
|
||||
fill: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter-value-wrap {
|
||||
.list-group {
|
||||
display: block;
|
||||
|
||||
.list-group-item {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
background: #f3f3f3;
|
||||
border: none;
|
||||
color: #666;
|
||||
padding: 4px 12px;
|
||||
&.delete-all {
|
||||
background: $primary;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: $primary;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.product-tool {
|
||||
@media (min-width: 992px) {
|
||||
.order-select {
|
||||
min-width: 170px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ui-widget-content {
|
||||
border-radius: 0;
|
||||
position: relative;
|
||||
border: none;
|
||||
margin-right: 4px;
|
||||
margin-bottom: 0;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
|
||||
.ui-widget-header {
|
||||
background: $primary;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
border-radius: 0;
|
||||
height: 3px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.slider-bg {
|
||||
background: #e3e3e3;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.ui-slider-handle {
|
||||
width: 4px;
|
||||
margin-left: 0;
|
||||
cursor: ew-resize;
|
||||
border: none !important;
|
||||
border-radius: 0;
|
||||
background: $primary;
|
||||
outline: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-widget {
|
||||
list-style: none;
|
||||
padding: 0 0 1.4rem;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
|
||||
> li {
|
||||
padding-top: 0.3rem;
|
||||
padding-bottom: 0.3rem;
|
||||
// border-bottom: 1px solid #e9ecef;
|
||||
|
||||
&:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.category-href {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
color: #333;
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
white-space: nowrap;
|
||||
width: calc(100% - 36px);
|
||||
}
|
||||
|
||||
&.active {
|
||||
> a {
|
||||
font-weight: bold;
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 12px;
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
line-height: 1;
|
||||
margin: 16px 0;
|
||||
|
||||
ul {
|
||||
margin-top: 8px;
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.active {
|
||||
> a {
|
||||
color: $primary;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: #868e96;
|
||||
&:first-of-type {
|
||||
width: calc(100% - 26px);
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-icon {
|
||||
float: right;
|
||||
font-size: 16px;
|
||||
padding: 0 6px;
|
||||
i {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
&.collapsed {
|
||||
transform: rotate(-180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter-box {
|
||||
.attribute-item {
|
||||
.form-check-label {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
.form-check-input {
|
||||
border-color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,220 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-01 16:23:34
|
||||
* @LastEditTime 2022-09-16 20:56:12
|
||||
*/
|
||||
|
||||
body.page-checkout {
|
||||
background-color: #f6f8fa;
|
||||
|
||||
.radio-line-wrap {
|
||||
.radio-line-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
padding: 20px;
|
||||
border: 1px solid transparent;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: #e5e5e5;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-color: #e5e5e5;
|
||||
|
||||
.radio {
|
||||
border-color: $sub_color;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background-color: $sub_color;
|
||||
left: 2px;
|
||||
top: 2px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.radio {
|
||||
position: relative;
|
||||
width: 18px;
|
||||
flex: 0 0 18px;
|
||||
height: 18px;
|
||||
border: 1px solid #d4d4d4;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.left {
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 0 0 88px;
|
||||
|
||||
img {
|
||||
width: 60px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
.title {
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.addresses-wrap {
|
||||
.item {
|
||||
&.address-right {
|
||||
@media (min-width: 768px) {
|
||||
padding: 0 2.6rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: auto;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.page-checkout, body.page-bk-stripe {
|
||||
.checkout-black {
|
||||
margin-bottom: 2.6rem;
|
||||
}
|
||||
|
||||
.checkout-title {
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
padding-bottom: 16px;
|
||||
margin-bottom: 16px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between; // flex-end | center | space-between
|
||||
|
||||
.btn {
|
||||
margin-bottom: -10px;
|
||||
&.icon {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.total-wrap {
|
||||
.card-body {
|
||||
@media (min-width: 768px) {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.card-header {
|
||||
background-color: #fff;
|
||||
margin-bottom: 1rem;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
|
||||
@media (min-width: 768px) {
|
||||
padding: 0 0 .8rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
span {
|
||||
line-height: 24px;
|
||||
min-width: 24px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.products-wrap {
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
margin-bottom: 1.3rem;
|
||||
padding-bottom: .3rem;
|
||||
max-height: 380px;
|
||||
overflow-y: auto;
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between; // flex-end | center | space-between
|
||||
margin-bottom: .8rem;
|
||||
|
||||
.image {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
padding-right: 4px;
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.quantity {
|
||||
margin-left: 3px;
|
||||
color: #7a7a7a;
|
||||
}
|
||||
}
|
||||
|
||||
.price {
|
||||
color: #7a7a7a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.totals {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
padding-bottom: .3rem;
|
||||
margin-bottom: 1.5rem;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
|
||||
> li {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: space-between; // flex-end | center | space-between
|
||||
margin-bottom: 14px;
|
||||
&:last-of-type {
|
||||
font-weight: bold;
|
||||
|
||||
> span {
|
||||
&:last-of-type {
|
||||
color: #dc3545;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> span {
|
||||
&:first-of-type {
|
||||
font-size: .8rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-15 15:43:12
|
||||
* @LastEditTime 2022-09-16 20:56:17
|
||||
*/
|
||||
|
||||
body.page-list {
|
||||
.brand-item {
|
||||
display: flex;
|
||||
align-items: center; // flex-start | center
|
||||
justify-content: center; // flex-end | center | space-between
|
||||
box-shadow: 0 6px 18px rgba(0, 0, 0, .07);
|
||||
margin-bottom: 10px;
|
||||
height: 133px;
|
||||
width: 100%;
|
||||
|
||||
>img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
|
||||
a{
|
||||
color: #242424;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.curser {
|
||||
cursor: pointer;
|
||||
|
||||
>li>a {
|
||||
display: block;
|
||||
color: #242424;
|
||||
transition: all .5s;
|
||||
margin: 0 auto;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,282 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-24 17:24:33
|
||||
* @LastEditTime 2022-09-16 20:56:21
|
||||
*/
|
||||
|
||||
body.page-product {
|
||||
@media (max-width: 768px) {
|
||||
.breadcrumb {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
|
||||
#product-description {
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.product-image {
|
||||
#swiper {
|
||||
height: 250px;
|
||||
@media (min-width: 480px) {
|
||||
height: 400px;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.swiper-pager > div {
|
||||
@media (max-width: 768px) {
|
||||
display: none;
|
||||
}
|
||||
background-color: rgba(255, 255, 255, 0.548);
|
||||
opacity: 1;
|
||||
&:hover {
|
||||
background-color: rgba(255, 255, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#swiper-mobile {
|
||||
.swiper-pagination {
|
||||
--swiper-theme-color: #ff6600;/* 设置Swiper风格 */
|
||||
--swiper-navigation-color: #ff6600;/* 单独设置按钮颜色 */
|
||||
--swiper-navigation-size: 30px;/* 设置按钮大小 */
|
||||
}
|
||||
}
|
||||
|
||||
.left {
|
||||
margin-right: 1rem;
|
||||
|
||||
.swiper > div > div{
|
||||
border: 1px solid #eee;
|
||||
margin-bottom: 10px;
|
||||
width: 80px;
|
||||
// height: 80px !important;
|
||||
padding: 2px;
|
||||
cursor: pointer;
|
||||
|
||||
&.active, &:hover {
|
||||
border: 1px solid #3a3a3a;
|
||||
}
|
||||
}
|
||||
|
||||
.swiper-pager {
|
||||
> div {
|
||||
opacity: 0;
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
transition: all .5s;
|
||||
}
|
||||
.swiper-button-next {
|
||||
border: 0;
|
||||
top: 485px;
|
||||
left: 50%;
|
||||
|
||||
height: 55px;
|
||||
width: 30px;
|
||||
transform-origin: center;
|
||||
transform: rotate(90deg) translate(0,25%);
|
||||
|
||||
&:hover,&.active {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
&::after {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.swiper-button-prev{
|
||||
border: 0;
|
||||
top: 8px;
|
||||
left: 50%;
|
||||
height: 55px;
|
||||
width: 30px;
|
||||
transform-origin: center;
|
||||
transform: rotate(90deg) translate(0,25%);
|
||||
|
||||
&:hover,&.active {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
&::after {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
}
|
||||
|
||||
.stock-and-sku {
|
||||
> div {
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
|
||||
.title {
|
||||
width: 80px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.variables-wrap {
|
||||
.variable-info {
|
||||
> div {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border: 1px solid #ddd;
|
||||
margin-left: 0;
|
||||
min-width: 3rem;
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
flex-direction: column;
|
||||
border-radius: 4px;
|
||||
transition: all .1s ease-in-out;
|
||||
&:hover, &.selected {
|
||||
border-color: #222;
|
||||
}
|
||||
|
||||
> span.image {
|
||||
width: 50px;
|
||||
margin-top: -0.5rem;
|
||||
margin-left: -0.5rem;
|
||||
margin-right: -0.5rem;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
&:not(.selected) {
|
||||
&.disabled {
|
||||
border: 1px dashed #bfbfbf;
|
||||
color: #999;
|
||||
font-weight: initial;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.peoduct-info {
|
||||
.product-name {
|
||||
font-size: 1.7rem;
|
||||
line-height: 1.3;
|
||||
font-weight: 600;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.rating-wrap {
|
||||
margin-bottom: 2rem;
|
||||
|
||||
.rating {
|
||||
margin-right: .5rem;
|
||||
i {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.price-wrap {
|
||||
margin-bottom: 2.4rem;
|
||||
}
|
||||
|
||||
.quantity-btns {
|
||||
@media (min-width: 768px) {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.add-cart {
|
||||
background-color: #12283f;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
background-color: $sub_color;
|
||||
color: #222;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-buy-now {
|
||||
border: 1px solid #e2e2e2;
|
||||
&:hover {
|
||||
border: 1px solid #12283f;
|
||||
}
|
||||
}
|
||||
|
||||
.quantity-input {
|
||||
max-width: 5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.quantity-wrap {
|
||||
height: 43px;
|
||||
@media (max-width: 768px) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.product-description {
|
||||
.nav-tabs {
|
||||
.nav-link {
|
||||
border: none;
|
||||
|
||||
&.active {
|
||||
position: relative;
|
||||
background-color: transparent;
|
||||
color: $primary;
|
||||
|
||||
&:before {
|
||||
border-top: 1px solid $primary;
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.attribute-table {
|
||||
tr {
|
||||
td:first-of-type {
|
||||
@media (min-width: 768px) {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.relations-wrap {
|
||||
.swiper-pagination {
|
||||
.swiper-pagination-bullet {
|
||||
height: 3px;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-03 22:32:29
|
||||
* @LastEditTime 2022-09-16 20:56:27
|
||||
*/
|
||||
|
||||
.product-list-wrap {
|
||||
.col-12:not(:last-of-type) {
|
||||
.product-wrap {
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
margin-bottom: 1.4rem;
|
||||
padding-bottom: 1.4rem;
|
||||
|
||||
&:hover {
|
||||
box-shadow: none;
|
||||
.image {
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.button-wrap {
|
||||
bottom: 10px;
|
||||
opacity: 1;
|
||||
|
||||
button {
|
||||
&:hover {
|
||||
background-color: $sub_color;
|
||||
border-color: $sub_color;
|
||||
color: #111 !important;
|
||||
i {
|
||||
color: #111;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.product-wrap {
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
padding-bottom: .7rem;
|
||||
transition: all 0.3s ease-in-out;
|
||||
background-color: #fff;
|
||||
border: 1px solid #E9ECEF;
|
||||
border-radius: 0.375rem;
|
||||
overflow: hidden;
|
||||
|
||||
&.list {
|
||||
display: flex;
|
||||
padding-bottom: 0;
|
||||
|
||||
.image {
|
||||
width: 200px;
|
||||
margin-bottom: 0;
|
||||
transition: all 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.product-name {
|
||||
height: auto;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.product-bottom-info {
|
||||
padding-top: 10px;
|
||||
padding-left: 20px;
|
||||
flex: 1;
|
||||
text-align: left;
|
||||
|
||||
.product-name {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.image {
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
|
||||
.image-old {
|
||||
opacity: 1;
|
||||
transition: all ease-out .4s;
|
||||
}
|
||||
|
||||
.button-wrap {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
z-index: 40;
|
||||
bottom: -30px;
|
||||
opacity: 0;
|
||||
transition: all .3s ease-out;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
button {
|
||||
&:hover {
|
||||
background-color: $sub_color;
|
||||
border-color: $sub_color;
|
||||
i {
|
||||
color: #111;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
&:hover {
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
||||
|
||||
.button-wrap {
|
||||
bottom: 10px;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.product-name {
|
||||
height: 39px;
|
||||
margin-bottom: 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
color: #3d3d3d;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
|
||||
.product-price {
|
||||
.price-new {
|
||||
color: $price;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.price-old {
|
||||
color: #aaa;
|
||||
margin-left: 4px;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-29 17:32:51
|
||||
* @LastEditTime 2023-02-02 11:06:01
|
||||
*/
|
||||
|
||||
import http from "../../../../js/http";
|
||||
import common from "./common";
|
||||
window.bk = common;
|
||||
window.$http = http;
|
||||
|
||||
const token = document.querySelector('meta[name="csrf-token"]').content;
|
||||
const base = document.querySelector('base').href;
|
||||
|
||||
import './product';
|
||||
import './header'
|
||||
import './bootstrap-validation'
|
||||
|
||||
$(document).ready(function ($) {
|
||||
$(document).on('click', '.offcanvas-products-delete', function () {
|
||||
const id = $(this).data('id');
|
||||
|
||||
$http.delete(`carts/${id}`).then((res) => {
|
||||
$(this).parents('.product-list').remove();
|
||||
if (!res.data.quantity) {
|
||||
$('.cart-badge-quantity').hide();
|
||||
} else {
|
||||
$('.cart-badge-quantity').show().html(res.data.quantity > 99 ? '99+' : res.data.quantity);
|
||||
}
|
||||
|
||||
$('.offcanvas-right-cart-count').text(res.data.quantity);
|
||||
$('.offcanvas-right-cart-amount').text(res.data.amount_format);
|
||||
})
|
||||
})
|
||||
|
||||
if ($(window).width() > 992 && $('.x-fixed-top').length) {
|
||||
$('.x-fixed-top').scrollToFixed({
|
||||
zIndex: 999,
|
||||
limit: function () {
|
||||
var limit = $('footer').offset().top - 84 - $('.x-fixed-top').outerHeight(true);
|
||||
return limit
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
||||
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
|
||||
});
|
||||
|
||||
bk.getCarts(); // 页面初始加载购物车数据
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-17 17:39:14
|
||||
* @LastEditTime 2022-09-16 20:56:42
|
||||
*/
|
||||
|
||||
// Example starter JavaScript for disabling form submissions if there are invalid fields
|
||||
$(function () {
|
||||
var forms = document.querySelectorAll(".needs-validation");
|
||||
|
||||
// Loop over them and prevent submission
|
||||
Array.prototype.slice.call(forms).forEach(function (form) {
|
||||
form.addEventListener(
|
||||
"submit",
|
||||
function (event) {
|
||||
if (!form.checkValidity()) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
form.classList.add("was-validated");
|
||||
},
|
||||
false
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-09-09 19:16:39
|
||||
* @LastEditTime 2023-03-12 21:16:10
|
||||
*/
|
||||
|
||||
export default {
|
||||
/**
|
||||
* @description: 获取购物车数据
|
||||
* @return {*}
|
||||
*/
|
||||
getCarts() {
|
||||
$(document).ready(() => {
|
||||
$http.get('carts/mini', null, {hload: true}).then((res) => {
|
||||
$('#offcanvas-right-cart').html(res.data.html);
|
||||
$('.cart-badge-quantity').show().html(res.data.quantity_all > 99 ? '99+' : res.data.quantity_all);
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 加入购物车
|
||||
* @param {*} sku_id 商品id
|
||||
* @param {*} quantity 商品数量
|
||||
* @param {*} isBuyNow 是否立即购买
|
||||
* @return {*} 返回Promise
|
||||
*/
|
||||
addCart({sku_id, quantity = 1, isBuyNow = false}, event) {
|
||||
if (!config.isLogin && !config.guestCheckout) {
|
||||
this.openLogin()
|
||||
return;
|
||||
}
|
||||
|
||||
const $btn = $(event);
|
||||
const btnHtml = $btn.html();
|
||||
const loadHtml = '<span class="spinner-border spinner-border-sm"></span>';
|
||||
$btn.html(loadHtml).prop('disabled', true);
|
||||
$(document).find('.tooltip').remove();
|
||||
|
||||
$http.post('/carts', {sku_id, quantity, buy_now: isBuyNow}, {hload: !!event}).then((res) => {
|
||||
this.getCarts();
|
||||
layer.msg(res.message)
|
||||
if (isBuyNow) {
|
||||
location.href = 'checkout'
|
||||
}
|
||||
}).finally(() => {$btn.html(btnHtml).prop('disabled', false)})
|
||||
},
|
||||
|
||||
addWishlist(id, event) {
|
||||
if (!config.isLogin) {
|
||||
this.openLogin()
|
||||
return;
|
||||
}
|
||||
|
||||
const $btn = $(event);
|
||||
const btnHtml = $btn.html();
|
||||
const isWishlist = $btn.attr('data-in-wishlist') * 1;
|
||||
const loadHtml = '<span class="spinner-border spinner-border-sm"></span>';
|
||||
$(document).find('.tooltip').remove();
|
||||
|
||||
if (isWishlist) {
|
||||
$btn.html(loadHtml).prop('disabled', true);
|
||||
$http.delete(`account/wishlist/${isWishlist}`, null, {hload: true}).then((res) => {
|
||||
layer.msg(res.message)
|
||||
$btn.attr('data-in-wishlist', '0');
|
||||
}).finally((e) => {
|
||||
$btn.html(btnHtml).prop('disabled', false).find('i.bi').prop('class', 'bi bi-heart')
|
||||
})
|
||||
} else {
|
||||
$btn.html(loadHtml).prop('disabled', true);
|
||||
$http.post('account/wishlist', {product_id: id}, {hload: true}).then((res) => {
|
||||
layer.msg(res.message)
|
||||
$btn.attr('data-in-wishlist', res.data.id);
|
||||
$btn.html(btnHtml).prop('disabled', false).find('i.bi').prop('class', 'bi bi-heart-fill')
|
||||
}).catch((e) => {
|
||||
$btn.html(btnHtml).prop('disabled', false)
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
openLogin() {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '',
|
||||
shadeClose: true,
|
||||
scrollbar: false,
|
||||
area: ['900px', '600px'],
|
||||
skin: 'login-pop-box',
|
||||
content: 'login?iframe=true' //iframe的url
|
||||
});
|
||||
},
|
||||
|
||||
getQueryString(name, defaultValue) {
|
||||
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
|
||||
const r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) {
|
||||
return decodeURIComponent(r[2]);
|
||||
}
|
||||
|
||||
return typeof(defaultValue) != 'undefined' ? defaultValue : '';
|
||||
},
|
||||
|
||||
removeURLParameters(url, ...parameters) {
|
||||
const parsed = new URL(url);
|
||||
parameters.forEach(e => parsed.searchParams.delete(e))
|
||||
return parsed.toString()
|
||||
},
|
||||
|
||||
updateQueryStringParameter(uri, key, value) {
|
||||
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
|
||||
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
|
||||
if (uri.match(re)) {
|
||||
return uri.replace(re, '$1' + key + "=" + value + '$2');
|
||||
} else {
|
||||
return uri + separator + key + "=" + value;
|
||||
}
|
||||
},
|
||||
|
||||
openWin(url, name = '', iWidth = 700, iHeight = 500) {
|
||||
var iTop = (window.screen.height - 30 - iHeight) / 2;
|
||||
var iLeft = (window.screen.width - 10 - iWidth) / 2;
|
||||
window.open(url, name, 'height=' + iHeight + ',innerHeight=' + iHeight
|
||||
+ ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft
|
||||
+ ',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-16 18:47:18
|
||||
* @LastEditTime 2023-03-13 18:18:09
|
||||
*/
|
||||
|
||||
$(function () {
|
||||
// 搜索弹出层交互
|
||||
// $("#offcanvas-search-top input").focus();
|
||||
$(".search-wrap input").keydown(function (e) {
|
||||
if (e.keyCode == 13) {
|
||||
if ($(this).val() != "") {
|
||||
location.href = "products/search?keyword=" + $(this).val();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(".search-wrap .btn").click(function () {
|
||||
if ($(".search-wrap input").val() != "") {
|
||||
location.href = "products/search?keyword=" + $(".search-wrap input").val();
|
||||
}
|
||||
});
|
||||
|
||||
// const myOffcanvas = document.getElementById("offcanvas-search-top");
|
||||
// if (myOffcanvas) {
|
||||
// myOffcanvas.addEventListener("shown.bs.offcanvas", function () {
|
||||
// });
|
||||
// }
|
||||
|
||||
// 响应式下弹窗菜单交互
|
||||
$(document).on("click", ".mobile-open-menu", function () {
|
||||
const offcanvasMobileMenu = new bootstrap.Offcanvas('#offcanvas-mobile-menu')
|
||||
offcanvasMobileMenu.show()
|
||||
});
|
||||
|
||||
// 右侧购物车弹出层内交互
|
||||
$(document).on("click", "#offcanvas-right-cart .select-wrap", function () {
|
||||
const [unchecked, checked] = ['bi bi-circle', 'bi bi-check-circle-fill'];
|
||||
const productListAll = $('#offcanvas-right-cart .product-list').length;
|
||||
|
||||
const isChecked = $(this).children('i').hasClass(unchecked);
|
||||
$(this).children('i').prop('class', isChecked ? checked : unchecked);
|
||||
|
||||
const checkedProduct = $('#offcanvas-right-cart .offcanvas-right-products i.bi-check-circle-fill').length;
|
||||
|
||||
if ($(this).hasClass('all-select')) {
|
||||
const isAll = $('.all-select i').hasClass(checked);
|
||||
$('#offcanvas-right-cart .product-list').find('.select-wrap i').prop('class', isAll ? checked : unchecked)
|
||||
} else {
|
||||
$('.offcanvas-footer .all-select i').prop('class', productListAll == checkedProduct ? checked : unchecked);
|
||||
}
|
||||
|
||||
const checkedIds = $('#offcanvas-right-cart .product-list').map(function() {
|
||||
return $(this).find('i.bi-check-circle-fill').data('id');
|
||||
}).get();
|
||||
|
||||
if (!checkedIds.length) {
|
||||
$('#offcanvas-right-cart .to-checkout').addClass('disabled')
|
||||
} else {
|
||||
$('#offcanvas-right-cart .to-checkout').removeClass('disabled')
|
||||
}
|
||||
|
||||
$http.post(`/carts/select`, {cart_ids: checkedIds}, {hload: true}).then((res) => {
|
||||
updateMiniCartData(res);
|
||||
})
|
||||
});
|
||||
|
||||
// 右侧购物车弹出层内交互
|
||||
$(document).on("change", "#offcanvas-right-cart .price input", function () {
|
||||
const [id, sku_id, quantity] = [$(this).data('id'), $(this).data('sku'), $(this).val() * 1];
|
||||
if ($(this).val() === '') $(this).val(1);
|
||||
|
||||
$http.put(`/carts/${id}`, {quantity: quantity, sku_id}, {hload: true}).then((res) => {
|
||||
updateMiniCartData(res);
|
||||
})
|
||||
})
|
||||
|
||||
function updateMiniCartData(res) {
|
||||
$('.offcanvas-right-cart-count').text(res.data.quantity);
|
||||
$('.offcanvas-right-cart-amount').text(res.data.amount_format);
|
||||
}
|
||||
|
||||
// 导航菜单防止小屏幕下(非手机端),配置列数过多 显示错误
|
||||
$('.menu-wrap > ul > li').each(function(index, el) {
|
||||
if ($(el).children('.dropdown-menu').length) {
|
||||
const offsetLeft = $(el).children('.dropdown-menu').offset().left;
|
||||
const width = $(el).children('.dropdown-menu').width();
|
||||
const windowWidth = $(window).width();
|
||||
|
||||
if (offsetLeft < 0) {
|
||||
$(el).addClass('position-static')
|
||||
.children('.dropdown-menu')
|
||||
.css({'left': (windowWidth - width) / 2, 'transform': 'translate(0, 0.5rem)'});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved.
|
||||
* @link https://beikeshop.com
|
||||
* @Author pu shuo <pushuo@guangda.work>
|
||||
* @Date 2022-08-19 18:21:32
|
||||
* @LastEditTime 2022-09-16 20:57:00
|
||||
*/
|
||||
|
||||
$(document).on('click', '.quantity-wrap .right i', function(event) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
|
||||
let input = $(this).parent().siblings('input')
|
||||
|
||||
if ($(this).hasClass('bi-chevron-up')) {
|
||||
input.val(input.val() * 1 + 1)
|
||||
input.get(0).dispatchEvent(new Event('input'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (input.val() * 1 <= input.attr('minimum') * 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (input.val () * 1 <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
input.val(input.val() * 1 - 1)
|
||||
input.get(0).dispatchEvent(new Event('input'));
|
||||
});
|
||||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'Aktualisierungsstatus',
|
||||
'plugins_install' => 'installieren',
|
||||
'plugins_uninstall' => 'deinstallieren',
|
||||
'to_enable' => 'To Enable',
|
||||
|
||||
'plugin_list' => 'Plugin-Liste',
|
||||
'plugin_code' => 'plugin-code',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'Meine Vorlage',
|
||||
'theme_name' => 'Standarddesign',
|
||||
'enabled_text' => 'derzeit aktiviert',
|
||||
'theme_pop_checkbox' => 'Vorlagendaten importieren',
|
||||
'theme_pop_text' => 'Wenn Sie die Daten der Importvorlage überprüfen, werden möglicherweise das vorhandene konfigurierte Seitenlayout, die Klassifizierung, das Produkt und andere Daten überschrieben. Bitte erstellen Sie zuerst eine Sicherungskopie! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'Liste',
|
||||
'text_form' => 'von',
|
||||
'text_to' => 'an',
|
||||
'batch_setting' => 'Stapeleinstellung',
|
||||
'show_all' => 'Alle anzeigen',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'Erstellungszeit',
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ return [
|
|||
'access_frontend' => 'Frontend',
|
||||
|
||||
// sidebar
|
||||
'theme_index' => 'Theme Setting',
|
||||
'attribute_groups_index' => 'Attribute Group',
|
||||
'attributes_index' => 'Attributes',
|
||||
'settings_index' => 'Setting',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'Update Status',
|
||||
'plugins_install' => 'Install',
|
||||
'plugins_uninstall' => 'Uninstall',
|
||||
'to_enable' => 'To Enable',
|
||||
|
||||
'plugin_list' => 'Plugin List',
|
||||
'plugin_code' => 'Code',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'My template',
|
||||
'theme_name' => 'default theme',
|
||||
'enabled_text' => 'Currently enabled',
|
||||
'theme_pop_checkbox' => 'import template data',
|
||||
'theme_pop_text' => 'If you check the import template data, it may overwrite the existing configured page layout, classification, product and other data, please make a backup first! ',
|
||||
];
|
||||
|
|
@ -77,6 +77,7 @@ return [
|
|||
'text_form' => 'From',
|
||||
'text_to' => 'To',
|
||||
'batch_setting' => 'Batch setting',
|
||||
'show_all' => 'View all',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'Created At',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'estado de actualización',
|
||||
'plugins_install' => 'Instalar',
|
||||
'plugins_uninstall' => 'desinstalar',
|
||||
'to_enable' => 'To Enable',
|
||||
|
||||
'plugin_list' => 'Lista de complementos',
|
||||
'plugin_code' => 'código de complemento',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'Mi plantilla',
|
||||
'theme_name' => 'tema predeterminado',
|
||||
'enabled_text' => 'actualmente habilitado',
|
||||
'theme_pop_checkbox' => 'importar datos de plantilla',
|
||||
'theme_pop_text' => 'Si verifica los datos de la plantilla de importación, es posible que se sobrescriba el diseño de página, la clasificación, el producto y otros datos configurados existentes. ¡Haga una copia de seguridad primero! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'lista',
|
||||
'text_form' => 'desde',
|
||||
'texto_a' => 'a',
|
||||
'batch_setting' => 'configuración de lote',
|
||||
'show_all' => 'Ver todo',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'tiempo de creación',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'état de mise à jour',
|
||||
'plugins_install' => 'installer',
|
||||
'plugins_uninstall' => 'désinstaller',
|
||||
'to_enable' => 'To Enable',
|
||||
|
||||
'plugin_list' => 'liste des plugins',
|
||||
'plugin_code' => 'code du plugin',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'Mon modèle',
|
||||
'theme_name' => 'thème par défaut',
|
||||
'enabled_text' => 'actuellement activé',
|
||||
'theme_pop_checkbox' => 'importer les données du modèle',
|
||||
'theme_pop_text' => 'Si vous vérifiez les données du modèle d\'importation, il se peut qu\'elles écrasent la mise en page, la classification, le produit et d\'autres données configurées existantes, veuillez d\'abord faire une sauvegarde ! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'liste',
|
||||
'text_form' => 'de',
|
||||
'text_to' => 'à',
|
||||
'batch_setting' => 'paramétrage par lots',
|
||||
'show_all' => 'Voir tout',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'temps de creation',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'stato di aggiornamento',
|
||||
'plugins_install' => 'installa',
|
||||
'plugins_uninstall' => 'disinstalla',
|
||||
'to_enable' => 'To Enable',
|
||||
|
||||
'plugin_list' => 'elenco dei plugin',
|
||||
'plugin_code' => 'codice plugin',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'Il mio modello',
|
||||
'theme_name' => 'tema predefinito',
|
||||
'enabled_text' => 'attualmente abilitato',
|
||||
'theme_pop_checkbox' => 'importa i dati del modello',
|
||||
'theme_pop_text' => 'Se controlli i dati del modello di importazione, potrebbe sovrascrivere il layout di pagina configurato esistente, la classificazione, il prodotto e altri dati, per favore fai prima un backup! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'lista',
|
||||
'text_form' => 'da',
|
||||
'text_to' => 'a',
|
||||
'batch_setting' => 'impostazione batch',
|
||||
'show_all' => 'Visualizza tutto',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'tempo di creazione',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => '更新ステータス',
|
||||
'plugins_install' => 'インストール',
|
||||
'plugins_uninstall' => 'アンインストール',
|
||||
'to_enable' => '有効にする',
|
||||
|
||||
'plugin_list' => 'プラグイン リスト',
|
||||
'plugin_code' => 'プラグインコード',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => '私のテンプレート',
|
||||
'theme_name' => 'デフォルトのテーマ',
|
||||
'enabled_text' => '現在有効',
|
||||
'theme_pop_checkbox' => 'テンプレート データのインポート',
|
||||
'theme_pop_text' => 'インポート テンプレート データを確認すると、既存の設定済みのページ レイアウト、分類、製品、およびその他のデータが上書きされる可能性があります。最初にバックアップを作成してください! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'リスト',
|
||||
'text_form' => 'From',
|
||||
'text_to' => 'To',
|
||||
'batch_setting' => 'バッチ設定',
|
||||
'show_all' => 'すべて表示',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => '作成時間',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => 'статус обновления',
|
||||
'plugins_install' => 'Установить',
|
||||
'plugins_uninstall' => 'удалить',
|
||||
'to_enable' => 'включить',
|
||||
|
||||
'plugin_list' => 'Список плагинов',
|
||||
'plugin_code' => 'код плагина',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => 'Мой шаблон',
|
||||
'theme_name' => 'тема по умолчанию',
|
||||
'enabled_text' => 'включено в данный момент',
|
||||
'theme_pop_checkbox' => 'импортировать данные шаблона',
|
||||
'theme_pop_text' => 'Если вы проверите данные шаблона импорта, они могут перезаписать существующий настроенный макет страницы, классификацию, продукт и другие данные, сначала сделайте резервную копию! ',
|
||||
];
|
||||
|
|
@ -75,6 +75,8 @@ return [
|
|||
'text_list' => 'список',
|
||||
'text_form' => 'от',
|
||||
'text_to' => 'кому',
|
||||
'batch_setting' => 'пакетная настройка',
|
||||
'show_all' => 'Просмотреть все',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => 'время создания',
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ return [
|
|||
'access_frontend' => '访问前台',
|
||||
|
||||
// sidebar
|
||||
'theme_index' => '模板设置',
|
||||
'attribute_groups_index' => '属性组',
|
||||
'attributes_index' => '属性',
|
||||
'settings_index' => '系统设置',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => '更新状态',
|
||||
'plugins_install' => '安装',
|
||||
'plugins_uninstall' => '卸载',
|
||||
'to_enable' => '去启用',
|
||||
|
||||
'plugin_list' => '插件设置',
|
||||
'plugin_code' => '插件代码',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => '我的模板',
|
||||
'theme_name' => '默认主题',
|
||||
'enabled_text' => '当前启用',
|
||||
'theme_pop_checkbox' => '导入模板数据',
|
||||
'theme_pop_text' => '如果勾选导入模板数据,可能会覆盖现有配置的页面布局、分类、商品等数据,请先做好备份!',
|
||||
];
|
||||
|
|
@ -76,6 +76,7 @@ return [
|
|||
'text_form' => '从',
|
||||
'text_to' => '到',
|
||||
'batch_setting' => '批量设置',
|
||||
'show_all' => '查看所有',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => '创建时间',
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ return [
|
|||
'access_frontend' => '訪問前台',
|
||||
|
||||
// sidebar
|
||||
'theme_index' => '模板設置',
|
||||
'attribute_groups_index' => '屬性組',
|
||||
'attributes_index' => '屬性',
|
||||
'settings_index' => '系統設置',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ return [
|
|||
'plugins_update_status' => '更新狀態',
|
||||
'plugins_install' => '安裝',
|
||||
'plugins_uninstall' => '卸載',
|
||||
'to_enable' => '去啟用',
|
||||
|
||||
'plugin_list' => '插件設置',
|
||||
'plugin_code' => '插件代碼',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* header.php
|
||||
*
|
||||
* @copyright 2022 beikeshop.com - All Rights Reserved
|
||||
* @link https://beikeshop.com
|
||||
* @author Edward Yang <yangjin@guangda.work>
|
||||
* @created 2022-08-02 19:03:19
|
||||
* @modified 2022-08-02 19:03:19
|
||||
*/
|
||||
|
||||
return [
|
||||
'page_title' => '我的模板',
|
||||
'theme_name' => '默認主題',
|
||||
'enabled_text' => '當前啟用',
|
||||
'theme_pop_checkbox' => '導入模板數據',
|
||||
'theme_pop_text' => '如果勾選導入模板數據,可能會覆蓋現有配置的頁面佈局、分類、商品等數據,請先做好備份! ',
|
||||
];
|
||||
|
|
@ -76,6 +76,7 @@ return [
|
|||
'text_form' => '從',
|
||||
'text_to' => '到',
|
||||
'batch_setting' => '批量設置',
|
||||
'show_all' => '查看所有',
|
||||
|
||||
'id' => 'ID',
|
||||
'created_at' => '創建時間',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!default
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
@extends('layout.master')
|
||||
@section('body-class', 'page-home')
|
||||
@section('content')
|
||||
<section class="module-image-plus mb-5" style="padding: 100px 0; font-size: 16px;">
|
||||
<div class="container" style="text-align:center;">
|
||||
这里是 black 模板, 后台设置使用该模板后系统优先读取该模板, 删除该文件系统将调用 default 模板下对应文件
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
<footer>
|
||||
@php
|
||||
$locale = locale();
|
||||
@endphp
|
||||
|
||||
@if ($footer_content['services']['enable'])
|
||||
<div class="services-wrap">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@foreach ($footer_content['services']['items'] as $item)
|
||||
<div class="col-lg-3 col-md-6 col-12">
|
||||
<div class="service-item my-1">
|
||||
<div class="icon"><img src="{{ image_resize($item['image'], 80, 80) }}" class="img-fluid"></div>
|
||||
<div class="text">
|
||||
<p class="title">{{ $item['title'][locale()] ?? '' }}</p>
|
||||
<p class="sub-title">{{ $item['sub_title'][locale()] ?? '' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-3">
|
||||
<div class="footer-content-left">
|
||||
<div class="logo"><a href="http://"><img
|
||||
src="{{ image_origin($footer_content['content']['intro']['logo']) }}" class="img-fluid"></a></div>
|
||||
<div class="text tinymce-format-p">{!! $footer_content['content']['intro']['text'][$locale] ?? '' !!}</div>
|
||||
</div>
|
||||
</div>
|
||||
@for ($i = 1; $i <= 3; $i++)
|
||||
@php
|
||||
$link = $footer_content['content']['link' . $i];
|
||||
@endphp
|
||||
<div class="col-6 col-sm footer-content-link{{ $i }}">
|
||||
<h6 class="text-uppercase text-dark mb-3">{{ $link['title'][$locale] ?? '' }}</h6>
|
||||
<ul class="list-unstyled">
|
||||
@foreach ($link['links'] as $item)
|
||||
@if ($item['link'])
|
||||
<li class="lh-lg mb-2">
|
||||
<a href="{{ $item['link'] }}" @if (isset($item['new_window']) && $item['new_window']) target="_blank" @endif>
|
||||
{{ $item['text'] }}
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endfor
|
||||
<div class="col-12 col-md-3 footer-content-contact">
|
||||
<h6 class="text-uppercase text-dark mb-3">{{ __('common.contact_us') }}</h6>
|
||||
<ul class="list-unstyled">
|
||||
@if ($footer_content['content']['contact']['email'])
|
||||
<li class="lh-lg mb-2"><i class="bi bi-envelope-fill"></i> {{ $footer_content['content']['contact']['email'] }}</li>
|
||||
@endif
|
||||
@if ($footer_content['content']['contact']['telephone'])
|
||||
<li class="lh-lg mb-2"><i class="bi bi-telephone-fill"></i> {{ $footer_content['content']['contact']['telephone'] }}</li>
|
||||
@endif
|
||||
@if ($footer_content['content']['contact']['address'][$locale] ?? '')
|
||||
<li class="lh-lg mb-2"><i class="bi bi-geo-alt-fill"></i> {{ $footer_content['content']['contact']['address'][$locale] ?? '' }}</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col">
|
||||
{!! $footer_content['bottom']['copyright'][$locale] ?? '' !!}
|
||||
</div>
|
||||
@if (isset($footer_content['bottom']['image']) && $footer_content['bottom']['image'])
|
||||
<div class="col-auto right-img">
|
||||
<img src="{{ image_origin($footer_content['bottom']['image']) }}" class="img-fluid">
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
@ -1,168 +0,0 @@
|
|||
<header>
|
||||
<div class="top-wrap" style="background: #000; color: #fff;">
|
||||
<div class="container d-flex justify-content-between align-items-center">
|
||||
<div class="left d-flex align-items-center">
|
||||
@hookwrapper('header.top.currency')
|
||||
<div class="dropdown">
|
||||
<a class="btn dropdown-toggle ps-0" href="javascript:void(0)" role="button" id="currency-dropdown" data-toggle="dropdown"
|
||||
aria-expanded="false" style="color: #fff;">
|
||||
@foreach (currencies() as $currency)
|
||||
@if ($currency->code == current_currency_code())
|
||||
@if ($currency->symbol_left)
|
||||
{{ $currency->symbol_left }}
|
||||
@endif
|
||||
{{ $currency->name }}
|
||||
@if ($currency->symbol_right)
|
||||
{{ $currency->symbol_right }}
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="currency-dropdown">
|
||||
@foreach (currencies() as $currency)
|
||||
<a class="dropdown-item"
|
||||
href="{{ shop_route('currency.switch', [$currency->code]) }}">
|
||||
@if ($currency->symbol_left)
|
||||
{{ $currency->symbol_left }}
|
||||
@endif
|
||||
{{ $currency->name }}
|
||||
@if ($currency->symbol_right)
|
||||
{{ $currency->symbol_right }}
|
||||
@endif
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endhookwrapper
|
||||
|
||||
@hookwrapper('header.top.language')
|
||||
<div class="dropdown">
|
||||
<a class="btn dropdown-toggle" href="javascript:void(0)" role="button" id="language-dropdown" data-toggle="dropdown"
|
||||
style="color: #fff;"
|
||||
aria-expanded="false">
|
||||
{{ current_language()->name }}
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="language-dropdown">
|
||||
@foreach ($languages as $language)
|
||||
<a class="dropdown-item" href="{{ shop_route('lang.switch', [$language->code]) }}">
|
||||
{{ $language->name }}
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endhookwrapper
|
||||
</div>
|
||||
|
||||
@if (system_setting('base.telephone', ''))
|
||||
<div class="right nav">
|
||||
@hookwrapper('header.top.telephone')
|
||||
<span class="px-2"><i class="bi bi-telephone-forward me-2"></i> {{ system_setting('base.telephone') }}</span>
|
||||
@endhookwrapper
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-content d-none d-lg-block py-3" style="background: #000">
|
||||
<div class="container navbar-expand-lg">
|
||||
@hookwrapper('header.menu.logo')
|
||||
<div class="logo"><a href="{{ shop_route('home.index') }}">
|
||||
<img src="{{ image_origin(system_setting('base.logo')) }}" class="img-fluid"></a>
|
||||
</div>
|
||||
@endhookwrapper
|
||||
<div class="menu-wrap">
|
||||
@if (!is_mobile())
|
||||
@include('shared.menu-pc')
|
||||
@endif
|
||||
</div>
|
||||
<div class="right-btn">
|
||||
<ul class="navbar-nav flex-row">
|
||||
@hookwrapper('header.menu.icon')
|
||||
<li class="nav-item"><a href="#offcanvas-search-top" style="color: #fff;" data-bs-toggle="offcanvas"
|
||||
aria-controls="offcanvasExample" class="nav-link"><i class="iconfont"></i></a></li>
|
||||
<li class="nav-item"><a href="{{ shop_route('account.wishlist.index') }}" style="color: #fff;" class="nav-link"><i
|
||||
class="iconfont"></i></a></li>
|
||||
<li class="nav-item dropdown">
|
||||
<a href="{{ shop_route('account.index') }}" style="color: #fff;" class="nav-link"><i class="iconfont"></i></a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
@auth('web_shop')
|
||||
<li class="dropdown-item">
|
||||
<h6 class="mb-0">{{ current_customer()->name }}</h6>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider opacity-100">
|
||||
</li>
|
||||
<li><a href="{{ shop_route('account.index') }}" class="dropdown-item"><i class="bi bi-person me-1"></i>
|
||||
{{ __('shop/account.index') }}</a></li>
|
||||
<li><a href="{{ shop_route('account.order.index') }}" class="dropdown-item"><i
|
||||
class="bi bi-clipboard-check me-1"></i> {{ __('shop/account.order.index') }}</a></li>
|
||||
<li><a href="{{ shop_route('account.wishlist.index') }}" class="dropdown-item"><i
|
||||
class="bi bi-heart me-1"></i> {{ __('shop/account.wishlist.index') }}</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider opacity-100">
|
||||
</li>
|
||||
<li><a href="{{ shop_route('logout') }}" class="dropdown-item"><i class="bi bi-box-arrow-left me-1"></i>
|
||||
{{ __('common.sign_out') }}</a></li>
|
||||
@else
|
||||
<li><a href="{{ shop_route('login.index') }}" class="dropdown-item"><i
|
||||
class="bi bi-box-arrow-right me-1"></i>{{ __('shop/login.login_and_sign') }}</a></li>
|
||||
@endauth
|
||||
</ul>
|
||||
</li>
|
||||
@endhookwrapper
|
||||
<li class="nav-item">
|
||||
<a class="nav-link position-relative" style="color: #fff;" {{ !equal_route('shop.carts.index') ? 'data-bs-toggle=offcanvas' : '' }}
|
||||
href="{{ !equal_route('shop.carts.index') ? '#offcanvas-right-cart' : 'javascript:void(0);' }}" role="button"
|
||||
aria-controls="offcanvasExample">
|
||||
<i class="iconfont"></i>
|
||||
<span class="cart-badge-quantity"></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-mobile d-lg-none">
|
||||
<div class="mobile-content">
|
||||
<div class="left">
|
||||
<div class="mobile-open-menu"><i class="bi bi-list"></i></div>
|
||||
<div class="mobile-open-search" href="#offcanvas-search-top" data-bs-toggle="offcanvas" aria-controls="offcanvasExample">
|
||||
<i class="iconfont"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center"><a href="{{ shop_route('home.index') }}">
|
||||
<img src="{{ image_origin(system_setting('base.logo')) }}" class="img-fluid"></a>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a href="{{ shop_route('account.index') }}" class="nav-link"><i class="iconfont"></i></a>
|
||||
<a href="{{ shop_route('carts.index') }}" class="nav-link ms-3"><i class="iconfont"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvas-mobile-menu">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">{{ __('common.menu') }}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body mobile-menu-wrap">
|
||||
@if (is_mobile())
|
||||
@include('shared.menu-mobile')
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (!equal_route('shop.carts.index'))
|
||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvas-right-cart" aria-labelledby="offcanvasRightLabel"></div>
|
||||
@endif
|
||||
|
||||
<div class="offcanvas offcanvas-top" tabindex="-1" id="offcanvas-search-top" aria-labelledby="offcanvasTopLabel">
|
||||
<div class="offcanvas-header">
|
||||
<input type="text" class="form-control input-group-lg border-0 fs-4" focus
|
||||
placeholder="{{ __('common.input') }}" aria-label="Type your search here" aria-describedby="button-addon2">
|
||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
<ul class="navbar-nav mx-auto">
|
||||
@hook('header.menu.before')
|
||||
@foreach ($menu_content as $menu)
|
||||
@if ($menu['name'])
|
||||
<li
|
||||
class="nav-item {{ isset($menu['children_group']) ? 'dropdown' : '' }} {{ isset($menu['isFull']) && $menu['isFull'] ? 'position-static' : '' }}" style="color: #fff;">
|
||||
<a class="nav-link fw-bold {{ isset($menu['children_group']) ? 'dropdown-toggle' : '' }}"
|
||||
target="{{ isset($menu['new_window']) && $menu['new_window'] ? '_blank' : '_self' }}"
|
||||
href="{{ $menu['link'] ?: 'javascript:void(0)' }}">
|
||||
{{ $menu['name'] }}
|
||||
@if (isset($menu['badge']) && $menu['badge']['name'])
|
||||
<span class="badge"
|
||||
style="background-color: {{ $menu['badge']['bg_color'] }}; color: {{ $menu['badge']['text_color'] }}; border-color: {{ $menu['badge']['bg_color'] }}">
|
||||
{{ $menu['badge']['name'] }}
|
||||
</span>
|
||||
@endif
|
||||
</a>
|
||||
@if (isset($menu['children_group']) && $menu['children_group'])
|
||||
<div class="dropdown-menu {{ $menu['isFull'] ? 'w-100' : '' }}"
|
||||
style="min-width: {{ count($menu['children_group']) * 240 }}px">
|
||||
<div class="card card-lg">
|
||||
<div class="card-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@forelse ($menu['children_group'] as $group)
|
||||
<div class="col-6 col-md">
|
||||
@if ($group['name'])
|
||||
<div class="mb-3 fw-bold group-name">{{ $group['name'] }}</div>
|
||||
@endif
|
||||
@if ($group['type'] == 'image')
|
||||
<a
|
||||
target="{{ isset($group['image']['link']['new_window']) && $group['image']['link']['new_window'] ? '_blank' : '_self' }}"
|
||||
href="{{ $group['image']['link'] ?: 'javascript:void(0)' }}"><img src="{{ $group['image']['image'] }}"
|
||||
class="img-fluid"></a>
|
||||
@else
|
||||
<ul class="nav flex-column ul-children">
|
||||
@foreach ($group['children'] as $children)
|
||||
@if (!is_array($children['link']['text']) && $children['link']['text'])
|
||||
<li class="nav-item">
|
||||
<a
|
||||
target="{{ isset($children['link']['new_window']) && $children['link']['new_window'] ? '_blank' : '_self' }}"
|
||||
class="nav-link px-0"
|
||||
href="{{ $children['link']['link'] ?: 'javascript:void(0)' }}">{{ $children['link']['text'] }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
@hook('header.menu.after')
|
||||
</ul>
|
||||
|
|
@ -17,5 +17,10 @@
|
|||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@if ($content['brands'])
|
||||
<div class="d-flex justify-content-center mt-4">
|
||||
<a class="btn btn-outline-secondary btn-lg" href="{{ shop_route('brands.index') }}">{{ __('common.show_all') }}</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -2,16 +2,23 @@
|
|||
@include('design._partial._module_tool')
|
||||
|
||||
<div class="module-info mb-3 mb-md-5">
|
||||
@if ($content['title'])
|
||||
<div class="module-title">{{ $content['title'] }}</div>
|
||||
@endif
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@foreach ($content['images'] as $image)
|
||||
<div class="col-6 col-md-4 col-lg-2">
|
||||
<a href="{{ $image['link'] }}" class="text-decoration-none">
|
||||
<div class="image-item">
|
||||
<a href="{{ $image['link'] ?: 'javascript:void(0)' }}" class="text-decoration-none">
|
||||
<div class="image-item d-flex justify-content-center mb-3">
|
||||
<img src="{{ $image['image'] }}" class="img-fluid">
|
||||
</div>
|
||||
<p class="text-center text-dark mb-4 mt-2">{{ $image['text'] }}</p>
|
||||
@if ($image['text'])
|
||||
<p class="text-center text-dark mb-2 mt-2 fs-5">{{ $image['text'] }}</p>
|
||||
@endif
|
||||
@if ($image['sub_text'])
|
||||
<p class="text-center text-secondary my-2">{{ $image['sub_text'] }}</p>
|
||||
@endif
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
<section class="module-item {{ $design ? 'module-item-design' : ''}}" id="module-{{ $module_id }}">
|
||||
@include('design._partial._module_tool')
|
||||
|
||||
<div class="module-image-banner module-info mb-3 mb-md-5">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@foreach ($content['images'] as $item)
|
||||
<div class="col-12 col-md-6 mb-2 mb-xl-0"><a href="{{ $item['link']['link'] ?: 'javascript:void(0)' }}"><img src="{{ $item['image'] }}" class="img-fluid"></a></div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue