Browse Source

feat: 优化前端 产品页

xiansin 2 years ago
parent
commit
f8d1c4fa1a

+ 8 - 0
mini/api/product.js

xqd xqd
@@ -1,5 +1,12 @@
 const request = uni.$u.http
 
+export async function cate(params) {
+  return request.get(
+    'product/cate',
+    { params }
+  )
+}
+
 export async function search(params) {
   return request.get(
     'product/search',
@@ -26,6 +33,7 @@ export async function download(id) {
 }
 
 export default {
+  cate,
   search,
   detail,
   viewer,

+ 2 - 3
mini/pages/product/index.vue

xqd xqd xqd
@@ -19,7 +19,7 @@
           v-for="(item,index) in lists"
           :key="index"
           class="product-item main-left"
-          @click="$u.route({url: `/pages/product/detail?id=${item.id}`})"
+          @click="$u.route({url: `/pages/product/list?cate_id=${item.id}`})"
         >
           <view class="detail dir-top-wrap">
             <text>热销品类排名</text>
@@ -53,7 +53,7 @@ export default {
       this.$u.route({ url: `/pages/product/list?keywords=${this.keywords}` })
     },
     getLists() {
-      this.$api.product.search({
+      this.$api.product.cate({
         limit: this.limit,
         page: this.page
       }).then(res => {
@@ -64,7 +64,6 @@ export default {
   },
   onLoad() {
     this.loading = true
-    this.getLists()
   },
   onShow() {
     this.getLists()

+ 3 - 0
mini/pages/product/list.vue

xqd xqd xqd
@@ -37,6 +37,7 @@ export default {
     return {
       loading: false,
       keywords: '',
+      cate_id: 0,
       limit: 6,
       page: 1,
       isMore: true,
@@ -59,6 +60,7 @@ export default {
       this.$api.product.search({
         limit: this.limit,
         keywords: this.keywords,
+        cate_id: this.cate_id,
         page: this.page
       }).then(res => {
         this.loading = false
@@ -74,6 +76,7 @@ export default {
   },
   onLoad(options) {
     this.keywords = options.keywords
+    this.cate_id = options?.cate_id
     this.loading = true
     this.getLists()
   },

+ 0 - 1
server/app/Admin/Controllers/AuthController.php

xqd
@@ -6,5 +6,4 @@ use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
 
 class AuthController extends BaseAuthController
 {
-    protected $view = 'admin.login';
 }

+ 6 - 0
server/app/Admin/Controllers/ProductCategoryController.php

xqd xqd
@@ -21,6 +21,7 @@ class ProductCategoryController extends AdminController
             $grid->model()->orderByDesc('sort');
             $grid->column('id')->sortable();
             $grid->column('name');
+            $grid->column('cover_img')->image('',100);
             $grid->column('level')->using(config('global.cat_level'));
             $grid->column('is_opened')->switch();
             $grid->column('sort')->editable();
@@ -50,6 +51,11 @@ class ProductCategoryController extends AdminController
                 ->options(config('global.cat_level'))
                 ->default(1);
             $form->text('name')->required();
+            $form->image('cover_img')->saveFullUrl()
+                ->uniqueName()->autoUpload()
+                ->autoSave(false)
+                ->removable(false)
+                ->width(4)->required();
             $form->radio('is_opened')
                 ->options(config('global.bool_status'))
                 ->default(1);

+ 28 - 1
server/app/Http/Controllers/V1/ProductController.php

xqd xqd
@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\V1;
 
 use App\Models\Product;
+use App\Models\ProductCategory;
 use App\Models\StatProduct;
 use App\Models\StatProductDownload;
 use Dingo\Api\Http\Request;
@@ -17,19 +18,45 @@ use Illuminate\Http\JsonResponse;
 
 class ProductController extends Controller
 {
+
+    public function cate(Request $request): JsonResponse
+    {
+        $limit = $request->input('limit', 3);
+        $keywords = $request->input('keywords', '');
+        $page = request()->input('page',1);
+        $offset = ($page - 1) * $limit;
+
+        $lists = ProductCategory::where('is_opened', 1)
+            ->when($keywords, function ($query, $keywords) {
+                /* @var Builder  $query*/
+                return $query->where('name','like', "%$keywords%");
+            })
+            ->orderByDesc('sort')
+            ->limit($limit)
+            ->offset($offset)
+            ->get();
+
+        return $this->success($lists);
+    }
+
+
     public function search(Request $request): JsonResponse
     {
         $limit = $request->input('limit');
         $keywords = $request->input('keywords', '');
         $page = request()->input('page',1);
+        $cateId = request()->input('cate_id',0);
         $offset = ($page - 1) * $limit;
 
-
         $lists = Product::withCount(['viewer'])->where('is_opened', 1)
             ->when($keywords, function ($query, $keywords) {
                 /* @var Builder  $query*/
                 return $query->where('name','like', "%$keywords%");
             })
+            ->when($cateId, function ($query, $cateId) {
+                /* @var Builder  $query*/
+                return $query->where('cate_id', $cateId);
+            })
             ->orderByDesc('viewer_count')
             ->orderByDesc('sort')
             ->limit($limit)

+ 5 - 0
server/app/Models/ProductCategory.php

xqd xqd
@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Casts\HttpToHttps;
 use Dcat\Admin\Traits\HasDateTimeFormatter;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -47,6 +48,10 @@ class ProductCategory extends Model
 
     protected $table = 'product_categories';
 
+    protected $casts = [
+        'cover_img' => HttpToHttps::class
+    ];
+
     public function parent(): BelongsTo
     {
         return $this->belongsTo(ProductCategory::class,'pid','id');

+ 1 - 0
server/resources/lang/zh/product-category.php

xqd
@@ -7,6 +7,7 @@ return [
     ],
     'fields' => [
         'name' => '名称',
+        'cover_img' => '封面图',
         'level' => '分类级别',
         'pid' => '父分类',
         'sort' => '排序',

+ 7 - 2
server/resources/views/admin/dashboard/product.blade.php

xqd xqd
@@ -23,12 +23,12 @@
     }
 </style>
 <div class=" card" style=";padding:.25rem .4rem .4rem">
-    <ul class="nav nav-tabs " role="tablist">
+    <ul class="nav nav-tabs" role="tablist">
         <li class="nav-item">
             <a href="#product_pane" class="nav-link active">产品查看数据</a>
         </li>
         <li class="nav-item">
-            <a href="/admin/dashboard/view?product=0" class="nav-link" data-toggle="tab">展厅查看数据</a>
+            <a href="javascript:;" class="nav-link redirect" data-toggle="tab">展厅查看数据</a>
         </li>
         <li class="nav-item pull-right header"></li>
     </ul>
@@ -83,3 +83,8 @@
         </div>
     </div>
 </div>
+<script>
+    document.querySelector('.redirect').onclick =  function() {
+        window.location.href = '/admin/dashboard/view?product=0'
+    }
+</script>

+ 6 - 2
server/resources/views/admin/dashboard/showroom.blade.php

xqd xqd
@@ -15,7 +15,7 @@
 <div class=" card" style=";padding:.25rem .4rem .4rem">
     <ul class="nav nav-tabs " role="tablist">
         <li class="nav-item">
-            <a href="/admin/dashboard/view?product=1" class="nav-link">产品查看数据</a>
+            <a href="javascript:;" class="nav-link redirect">产品查看数据</a>
         </li>
         <li class="nav-item">
             <a href="#showroom_pane" class="nav-link active" data-toggle="tab">展厅查看数据</a>
@@ -67,4 +67,8 @@
 
     </div>
 </div>
-
+<script>
+    document.querySelector('.redirect').onclick =  function() {
+        window.location.href = '/admin/dashboard/view?product=1'
+    }
+</script>

+ 1 - 0
server/routes/api.php

xqd
@@ -88,6 +88,7 @@ $api->version('v1', ['namespace' => 'App\Http\Controllers\V1'], function ($api)
         // 产品
         $api->group(['prefix' => 'product'],function ($api){
             /* @var Dingo\Api\Routing\Router $api*/
+            $api->get('cate', 'ProductController@cate');
             $api->get('search', 'ProductController@search');
             $api->get('{id}/detail', 'ProductController@detail');
             $api->post('{id}/viewer', 'ProductController@viewer');