diff --git a/beike/Repositories/ProductRepo.php b/beike/Repositories/ProductRepo.php index 8a748981..c9937467 100644 --- a/beike/Repositories/ProductRepo.php +++ b/beike/Repositories/ProductRepo.php @@ -41,14 +41,14 @@ class ProductRepo * 通过单个或多个商品分类获取商品列表 * * @param $categoryId - * @return AnonymousResourceCollection + * @return */ - public static function getProductsByCategory($categoryId, $filterData): AnonymousResourceCollection + public static function getProductsByCategory($categoryId, $filterData) { $builder = self::getBuilder(array_merge(['category_id' => $categoryId, 'active' => 1], $filterData)); - $products = $builder->with('inCurrentWishlist')->paginate(perPage()); + $products = $builder->with('inCurrentWishlist')->paginate($filterData['per_page'] ?? perPage()); - return ProductSimple::collection($products); + return $products; } /** @@ -161,7 +161,7 @@ class ProductRepo $builder->onlyTrashed(); } - $sort = $data['sort'] ?? 'products.updated_at'; + $sort = $data['sort'] ?? 'products.position'; $order = $data['order'] ?? 'desc'; $builder->orderBy($sort, $order); @@ -193,7 +193,7 @@ class ProductRepo ->select(['pa.attribute_id', 'pa.attribute_value_id']) ->distinct() ->reorder('pa.attribute_id'); - $productAttributes = $builder->get(); + $productAttributes = $builder->get()->toArray(); $attributeMap = array_column(Attribute::query()->with('description')->orderBy('sort_order')->get()->toArray(), null, 'id'); $attributeValueMap = array_column(AttributeValue::query()->with('description')->get()->toArray(), null, 'id'); @@ -222,7 +222,12 @@ class ProductRepo } } - return $results; + $results = array_map(function($item) { + $item['values'] = array_values($item['values']); + return $item; + }, $results); + + return array_values($results); } public static function getFilterPrice($data) diff --git a/beike/Shop/Http/Controllers/CategoryController.php b/beike/Shop/Http/Controllers/CategoryController.php index 723f04e9..2c46954b 100644 --- a/beike/Shop/Http/Controllers/CategoryController.php +++ b/beike/Shop/Http/Controllers/CategoryController.php @@ -5,6 +5,7 @@ namespace Beike\Shop\Http\Controllers; use Beike\Models\Category; use Beike\Repositories\CategoryRepo; use Beike\Repositories\ProductRepo; +use Beike\Shop\Http\Resources\ProductSimple; use Illuminate\Http\Request; class CategoryController extends Controller @@ -16,16 +17,16 @@ class CategoryController extends Controller public function show(Request $request, Category $category) { - $filterData = $request->only('attr', 'price'); + $filterData = $request->only('attr', 'price', 'sort', 'order', 'per_page'); $products = ProductRepo::getProductsByCategory($category->id, $filterData); - $category->load('description'); $filterData = array_merge($filterData, ['category_id' => $category->id, 'active' => 1]); + $data = [ 'all_categories' => CategoryRepo::getTwoLevelCategories(), 'category' => $category, 'filter_data' => ['attr' => ProductRepo::getFilterAttribute($filterData), 'price' => ProductRepo::getFilterPrice($filterData)], - 'products_format' => $products->jsonSerialize(), + 'products_format' => ProductSimple::collection($products)->jsonSerialize(), 'products' => $products, 'per_pages' => CategoryRepo::getPerPages(), ]; diff --git a/public/vendor/jquery/jquery-ui/jquery-ui.min.css b/public/vendor/jquery/jquery-ui/jquery-ui.min.css new file mode 100644 index 00000000..4daf57d9 --- /dev/null +++ b/public/vendor/jquery/jquery-ui/jquery-ui.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.13.2 - 2023-01-11 +* http://jqueryui.com +* Includes: core.css, slider.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;-ms-filter:"alpha(opacity=70)";font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;-ms-filter:"alpha(opacity=35)";background-image:none}.ui-state-disabled .ui-icon{-ms-filter:"alpha(opacity=35)"}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;-ms-filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666} \ No newline at end of file diff --git a/public/vendor/jquery/jquery-ui/jquery-ui.min.js b/public/vendor/jquery/jquery-ui/jquery-ui.min.js new file mode 100644 index 00000000..364a7082 --- /dev/null +++ b/public/vendor/jquery/jquery-ui/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.13.2 - 2023-01-11 +* http://jqueryui.com +* Includes: widget.js, keycode.js, widgets/mouse.js, widgets/slider.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(l){"use strict";l.ui=l.ui||{};l.ui.version="1.13.2";var n,i=0,o=Array.prototype.hasOwnProperty,h=Array.prototype.slice;l.cleanData=(n=l.cleanData,function(e){for(var t,i,s=0;null!=(i=e[s]);s++)(t=l._data(i,"events"))&&t.remove&&l(i).triggerHandler("remove");n(e)}),l.widget=function(e,i,t){var s,n,a,o={},h=e.split(".")[0],r=h+"-"+(e=e.split(".")[1]);return t||(t=i,i=l.Widget),Array.isArray(t)&&(t=l.extend.apply(null,[{}].concat(t))),l.expr.pseudos[r.toLowerCase()]=function(e){return!!l.data(e,r)},l[h]=l[h]||{},s=l[h][e],n=l[h][e]=function(e,t){if(!this||!this._createWidget)return new n(e,t);arguments.length&&this._createWidget(e,t)},l.extend(n,s,{version:t.version,_proto:l.extend({},t),_childConstructors:[]}),(a=new i).options=l.widget.extend({},a.options),l.each(t,function(t,s){function n(){return i.prototype[t].apply(this,arguments)}function a(e){return i.prototype[t].apply(this,e)}o[t]="function"==typeof s?function(){var e,t=this._super,i=this._superApply;return this._super=n,this._superApply=a,e=s.apply(this,arguments),this._super=t,this._superApply=i,e}:s}),n.prototype=l.widget.extend(a,{widgetEventPrefix:s&&a.widgetEventPrefix||e},o,{constructor:n,namespace:h,widgetName:e,widgetFullName:r}),s?(l.each(s._childConstructors,function(e,t){var i=t.prototype;l.widget(i.namespace+"."+i.widgetName,n,t._proto)}),delete s._childConstructors):i._childConstructors.push(n),l.widget.bridge(e,n),n},l.widget.extend=function(e){for(var t,i,s=h.call(arguments,1),n=0,a=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,t){t=l(t||this.defaultElement||this)[0],this.element=l(t),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=l(),this.hoverable=l(),this.focusable=l(),this.classesElementLookup={},t!==this&&(l.data(t,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===t&&this.destroy()}}),this.document=l(t.style?t.ownerDocument:t.document||t),this.window=l(this.document[0].defaultView||this.document[0].parentWindow)),this.options=l.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:l.noop,_create:l.noop,_init:l.noop,destroy:function(){var i=this;this._destroy(),l.each(this.classesElementLookup,function(e,t){i._removeClass(t,e)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:l.noop,widget:function(){return this.element},option:function(e,t){var i,s,n,a=e;if(0===arguments.length)return l.widget.extend({},this.options);if("string"==typeof e)if(a={},e=(i=e.split(".")).shift(),i.length){for(s=a[e]=l.widget.extend({},this.options[e]),n=0;n=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),l.widget("ui.slider",l.ui.mouse,{version:"1.13.2",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,t=this.options,i=this.element.find(".ui-slider-handle"),s=[],n=t.values&&t.values.length||1;for(i.length>n&&(i.slice(n).remove(),i=i.slice(0,n)),e=i.length;e");this.handles=i.add(l(s.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){l(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:Array.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=l("
").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,t,o,h=this,r=this.options;return!r.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),o={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(o),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var t=Math.abs(i-h.values(e));(t=this._valueMax())return this._valueMax();var t=0=t&&(e+=0this.options.max&&(e-=i),this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return e=null!==this.options.min?Math.max(e,this._precisionOf(this.options.min)):e},_precisionOf:function(e){var t=e.toString(),e=t.indexOf(".");return-1===e?0:t.length-e-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(e){"vertical"===e&&this.range.css({width:"",left:""}),"horizontal"===e&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var t,i,e,s,n,a=this.options.range,o=this.options,h=this,r=!this._animateOff&&o.animate,u={};this._hasMultipleValues()?this.handles.each(function(e){i=(h.values(e)-h._valueMin())/(h._valueMax()-h._valueMin())*100,u["horizontal"===h.orientation?"left":"bottom"]=i+"%",l(this).stop(1,1)[r?"animate":"css"](u,o.animate),!0===h.options.range&&("horizontal"===h.orientation?(0===e&&h.range.stop(1,1)[r?"animate":"css"]({left:i+"%"},o.animate),1===e&&h.range[r?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:o.animate})):(0===e&&h.range.stop(1,1)[r?"animate":"css"]({bottom:i+"%"},o.animate),1===e&&h.range[r?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:o.animate}))),t=i}):(e=this.value(),s=this._valueMin(),n=this._valueMax(),i=n!==s?(e-s)/(n-s)*100:0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[r?"animate":"css"](u,o.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[r?"animate":"css"]({width:i+"%"},o.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[r?"animate":"css"]({width:100-i+"%"},o.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[r?"animate":"css"]({height:i+"%"},o.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[r?"animate":"css"]({height:100-i+"%"},o.animate))},_handleEvents:{keydown:function(e){var t,i,s,n=l(e.target).data("ui-slider-handle-index");switch(e.keyCode){case l.ui.keyCode.HOME:case l.ui.keyCode.END:case l.ui.keyCode.PAGE_UP:case l.ui.keyCode.PAGE_DOWN:case l.ui.keyCode.UP:case l.ui.keyCode.RIGHT:case l.ui.keyCode.DOWN:case l.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(l(e.target),null,"ui-state-active"),!1===this._start(e,n)))return}switch(s=this.options.step,t=i=this._hasMultipleValues()?this.values(n):this.value(),e.keyCode){case l.ui.keyCode.HOME:i=this._valueMin();break;case l.ui.keyCode.END:i=this._valueMax();break;case l.ui.keyCode.PAGE_UP:i=this._trimAlignValue(t+(this._valueMax()-this._valueMin())/this.numPages);break;case l.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(t-(this._valueMax()-this._valueMin())/this.numPages);break;case l.ui.keyCode.UP:case l.ui.keyCode.RIGHT:if(t===this._valueMax())return;i=this._trimAlignValue(t+s);break;case l.ui.keyCode.DOWN:case l.ui.keyCode.LEFT:if(t===this._valueMin())return;i=this._trimAlignValue(t-s)}this._slide(e,n,i)},keyup:function(e){var t=l(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,t),this._change(e,t),this._removeClass(l(e.target),null,"ui-state-active"))}}})}); \ No newline at end of file diff --git a/resources/beike/admin/views/pages/design/builder/index.blade.php b/resources/beike/admin/views/pages/design/builder/index.blade.php index e83feb04..bdb3f7de 100644 --- a/resources/beike/admin/views/pages/design/builder/index.blade.php +++ b/resources/beike/admin/views/pages/design/builder/index.blade.php @@ -185,6 +185,7 @@ $http.post('design/builder/preview?design=1', data, {hload: true}).then((res) => { $(previewWindow.document).find('#module-' + data.module_id).replaceWith(res); + $(previewWindow.document).find('.tooltip').remove(); const tooltipTriggerList = previewWindow.document.querySelectorAll('[data-bs-toggle="tooltip"]') const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new previewWindow.bootstrap.Tooltip(tooltipTriggerEl)) }) diff --git a/resources/beike/admin/views/pages/products/form/form.blade.php b/resources/beike/admin/views/pages/products/form/form.blade.php index cf838b69..72dd7040 100644 --- a/resources/beike/admin/views/pages/products/form/form.blade.php +++ b/resources/beike/admin/views/pages/products/form/form.blade.php @@ -324,14 +324,7 @@
SEO
- - @foreach ($languages as $language) -
- {{ $language['name'] }} - -
- @endforeach -
+ @foreach ($languages as $language)
diff --git a/resources/beike/shop/default/css/app.scss b/resources/beike/shop/default/css/app.scss index af197e00..e4fe994f 100644 --- a/resources/beike/shop/default/css/app.scss +++ b/resources/beike/shop/default/css/app.scss @@ -21,6 +21,7 @@ $primary: #fd560f; @import './page-product'; @import './cart'; @import './page-checkout'; +@import './page-categories'; @import './element-ui'; @import './order-success'; @import './page-account-order'; diff --git a/resources/beike/shop/default/css/page-categories.scss b/resources/beike/shop/default/css/page-categories.scss index c76d8ed1..0539338f 100644 --- a/resources/beike/shop/default/css/page-categories.scss +++ b/resources/beike/shop/default/css/page-categories.scss @@ -9,5 +9,100 @@ */ body.page-categories { + .right-column { + @media (min-width: 992px) { + width: 78%; + } + } + + .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; + } + } + + .style-wrap { + span { + 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 { + .order-wrap { + min-width: 150px; + } + } + + .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: 2px; + margin-top: -1px; + } + + .ui-slider-active { + border: none; + } + + .ui-slider-handle { + width: 4px; + margin-left: 0; + cursor: ew-resize; + border: none !important; + border-radius: 0; + background: $primary; + } + } +} -} \ No newline at end of file diff --git a/resources/beike/shop/default/css/product-style.scss b/resources/beike/shop/default/css/product-style.scss index 37917c89..4499a576 100644 --- a/resources/beike/shop/default/css/product-style.scss +++ b/resources/beike/shop/default/css/product-style.scss @@ -8,6 +8,28 @@ * @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; + } + } + } + } +} + .product-wrap { margin-bottom: 20px; text-align: center; @@ -15,6 +37,28 @@ transition: all 0.3s ease-in-out; background-color: #fff; + &.list { + display: flex; + padding-bottom: 0; + + .image { + width: 200px; + margin-bottom: 0; + transition: all 0.3s ease-in-out; + } + + .product-bottom-info { + padding-top: 10px; + padding-left: 20px; + flex: 1; + text-align: left; + + .product-name { + font-size: 18px; + } + } + } + .image { margin-bottom: 10px; position: relative; diff --git a/resources/beike/shop/default/js/common.js b/resources/beike/shop/default/js/common.js index 77d711b5..f804171d 100644 --- a/resources/beike/shop/default/js/common.js +++ b/resources/beike/shop/default/js/common.js @@ -144,4 +144,20 @@ export default { 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; + } + }, } \ No newline at end of file diff --git a/resources/lang/de/common.php b/resources/lang/de/common.php index 0ae75c9b..84c1af05 100644 --- a/resources/lang/de/common.php +++ b/resources/lang/de/common.php @@ -38,6 +38,7 @@ return [ 'no' => 'nein', 'yes' => 'ja', 'delete' => 'löschen', + 'delete_all' => 'alle löschen', 'sign_out' => 'Abmelden', 'contact_us' => 'kontaktiere uns', 'input' => 'Geben Sie hier Ihre Suche ein', diff --git a/resources/lang/en/common.php b/resources/lang/en/common.php index 1ec442af..e6180bdd 100644 --- a/resources/lang/en/common.php +++ b/resources/lang/en/common.php @@ -39,6 +39,7 @@ return [ 'no' => 'No', 'yes' => 'Yes', 'delete' => 'Delete', + 'delete_all' => 'Delete all', 'sign_out' => 'Sign Out', 'contact_us' => 'Contact us', 'input' => 'Type your search here', @@ -67,6 +68,9 @@ return [ 'whether_open' => 'Status', 'default' => 'Default', 'to_setting' => 'to configure', + 'low' => 'Low', + 'high' => 'High', + 'sales' => 'Sales', 'id' => 'ID', 'created_at' => 'Created At', diff --git a/resources/lang/es/common.php b/resources/lang/es/common.php index de393b64..3cd8ddea 100644 --- a/resources/lang/es/common.php +++ b/resources/lang/es/common.php @@ -38,6 +38,7 @@ return [ 'no' => 'no', 'yes' => 'Sí', 'delete' => 'Eliminar', + 'delete_all' => 'borrar todo', 'sign_out' => 'desconectar', 'contact_us' => 'Contáctenos', 'input' => 'ingrese su búsqueda aquí', diff --git a/resources/lang/fr/common.php b/resources/lang/fr/common.php index f7c5adfa..92328ae5 100644 --- a/resources/lang/fr/common.php +++ b/resources/lang/fr/common.php @@ -38,6 +38,7 @@ return [ 'no' => 'non', 'yes' => 'Oui', 'delete' => 'effacer', + 'delete_all' => 'supprimer tout', 'sign_out' => 'se déconnecter', 'contact_us' => 'Nous contacter', 'input' => 'entrez votre recherche ici', diff --git a/resources/lang/it/common.php b/resources/lang/it/common.php index 0a3d8eb7..6a19c08d 100644 --- a/resources/lang/it/common.php +++ b/resources/lang/it/common.php @@ -38,6 +38,7 @@ return [ 'no' => 'No', 'yes' => 'Yes', 'delete' => 'Elimina', + 'delete_all' => 'elimina tutto', 'sign_out' => 'disconnessione', 'contact_us' => 'Contattaci', 'input' => 'inserisci qui la tua ricerca', diff --git a/resources/lang/ja/common.php b/resources/lang/ja/common.php index 7cd3775b..c73e0cd9 100644 --- a/resources/lang/ja/common.php +++ b/resources/lang/ja/common.php @@ -38,6 +38,7 @@ return [ 'no' => '番号', 'yes' => 'はい', 'delete' => '消去', + 'delete_all' => 'すべて削除', 'sign_out' => 'サインアウト', 'contact_us' => 'お問い合わせ', 'input' => 'ここに検索を入力してください', diff --git a/resources/lang/ru/common.php b/resources/lang/ru/common.php index 3e0b9ea2..39e63e6c 100644 --- a/resources/lang/ru/common.php +++ b/resources/lang/ru/common.php @@ -38,6 +38,7 @@ return [ 'no' => 'нет', 'yes' => 'да', 'delete' => 'удалить', + 'delete_all' => 'удалить все', 'sign_out' => 'Выйти', 'contact_us' => 'свяжитесь с нами', 'input' => 'Введите свой поиск здесь', diff --git a/resources/lang/zh_cn/common.php b/resources/lang/zh_cn/common.php index 3c003c6b..530c5d8b 100644 --- a/resources/lang/zh_cn/common.php +++ b/resources/lang/zh_cn/common.php @@ -38,6 +38,7 @@ return [ 'no' => '否', 'yes' => '是', 'delete' => '删除', + 'delete_all' => '删除所有', 'sign_out' => '退出登录', 'contact_us' => '联系我们', 'input' => '在此处输入您的搜索', @@ -67,6 +68,9 @@ return [ 'whether_open' => '是否开启', 'default' => '默认', 'to_setting' => '去配置', + 'low' => '低', + 'high' => '高', + 'sales' => '销量', 'id' => 'ID', 'created_at' => '创建时间', diff --git a/resources/lang/zh_hk/common.php b/resources/lang/zh_hk/common.php index ee17f36e..3514aa1d 100644 --- a/resources/lang/zh_hk/common.php +++ b/resources/lang/zh_hk/common.php @@ -38,6 +38,7 @@ return [ 'no' => '否', 'yes' => '是', 'delete' => '刪除', + 'delete_all' => '刪除所有', 'sign_out' => '退出登錄', 'contact_us' => '聯繫我們', 'input' => '在此處輸入您的搜索', @@ -66,6 +67,9 @@ return [ 'menu' => '菜單', 'whether_open' => '是否開啟', 'to_setting' => '去配置', + 'low' => '低', + 'high' => '高', + 'sales' => '銷量', 'id' => 'ID', 'created_at' => '創建時間', diff --git a/themes/default/account/login.blade.php b/themes/default/account/login.blade.php index 39df8ef6..17c606a0 100644 --- a/themes/default/account/login.blade.php +++ b/themes/default/account/login.blade.php @@ -31,7 +31,9 @@ - {{ __('shop/login.forget_password') }} + @if (!request('iframe')) + {{ __('shop/login.forget_password') }} + @endif
diff --git a/themes/default/category.blade.php b/themes/default/category.blade.php index fba5d7b2..7900bb81 100644 --- a/themes/default/category.blade.php +++ b/themes/default/category.blade.php @@ -4,19 +4,114 @@ @section('keywords', $category->description->meta_keywords ?: system_setting('base.meta_keyword')) @section('description', $category->description->meta_description ?: system_setting('base.meta_description')) +@push('header') + + +@endpush + @section('content')
- @if (count($products_format)) - @foreach ($products_format as $product) -
@include('shared.product')
- @endforeach - @else +
+
+ @if ($filter_data['price']['min'] != $filter_data['price']['max']) +
+
+

{{ __('product.price') }}

+
+
+
+ {{ currency_format($filter_data['price']['select_min'], current_currency_code()) }} + - + {{ currency_format($filter_data['price']['select_max'], current_currency_code()) }} +
+ + +
+
+
+ @endif + + @foreach ($filter_data['attr'] as $index => $attr) +
+
+

{{ $attr['name'] }}

+
+
    + @foreach ($attr['values'] as $value_index => $value) +
  • + +
  • + @endforeach +
+
+ @endforeach +
+
+ +
+
+
    + @foreach ($filter_data['attr'] as $index => $attr) + @foreach ($attr['values'] as $value_index => $value) + @if ($value['selected']) +
  • + {{ $attr['name'] }}: {{ $value['name'] }} +
  • + @endif + @endforeach + @endforeach +
  • {{ __('common.delete_all') }}
  • +
+
+ +
+
+ + + + + + +
+
+ {{--
Showing 1-19 of 20 item(s)
--}} + + + + +
+
+ + @if (count($products_format)) +
+ @foreach ($products_format as $product) +
+ @include('shared.product') +
+ @endforeach +
+ @else - @endif + @endif +
{{ $products->links('shared/pagination/bootstrap-4') }} @@ -24,3 +119,104 @@
@endsection + +@push('add-scripts') + +@endpush \ No newline at end of file diff --git a/themes/default/shared/product.blade.php b/themes/default/shared/product.blade.php index fc232433..451b3a57 100644 --- a/themes/default/shared/product.blade.php +++ b/themes/default/shared/product.blade.php @@ -1,33 +1,54 @@ -
+
-
- - -
+ @if (!request('style_list') || request('style_list') == 'grid') +
+ + +
+ @endif
-
{{ $product['name_format'] }}
-
- {{ $product['price_format'] }} - {{ $product['origin_price_format'] }} +
+
{{ $product['name_format'] }}
+
+ {{ $product['price_format'] }} + {{ $product['origin_price_format'] }} +
+ + @if (request('style_list') == 'list') +
+ +
+ +
+ +
+ @endif
\ No newline at end of file