后台商品列表

This commit is contained in:
pushuo 2022-08-16 13:54:26 +08:00
parent 2ccc43163c
commit 4648eb4064
2 changed files with 20 additions and 17 deletions

View File

@ -17,21 +17,16 @@ class ProductController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
// $product = ProductRepo::list($request->all()); $productList = ProductRepo::list($request->all());
$product = ProductRepo::list($request->all()); $products = ProductResource::collection($productList)->resource;
// dd($product->getItems());
// dd(ProductResource::collection($productitem));
// dd(ProductResource::collection($product)->jsonSerialize());
$data = [ $data = [
'categories' => CategoryRepo::flatten(locale()), 'categories' => CategoryRepo::flatten(locale()),
'product' => ProductResource::collection($product), 'products' => $products,
]; ];
if ($request->expectsJson()) { if ($request->expectsJson()) {
return ProductResource::collection($product); return $products;
// return json_success('成功', ProductResource::collection($product));
// return json_success('成功', $product);
} }
return view('admin::pages.products.index', $data); return view('admin::pages.products.index', $data);
@ -41,6 +36,7 @@ class ProductController extends Controller
{ {
$requestData = $request->all(); $requestData = $request->all();
$requestData['trashed'] = true; $requestData['trashed'] = true;
if ($request->expectsJson()) { if ($request->expectsJson()) {
$products = ProductRepo::list($requestData); $products = ProductRepo::list($requestData);
return ProductResource::collection($products); return ProductResource::collection($products);

View File

@ -14,7 +14,7 @@
<div class="row"> <div class="row">
<div class="col-xxl-20 col-xl-3 col-lg-4 col-md-4 d-flex align-items-center mb-3"> <div class="col-xxl-20 col-xl-3 col-lg-4 col-md-4 d-flex align-items-center mb-3">
<label class="filter-title">商品名称</label> <label class="filter-title">商品名称</label>
<input type="text" v-model="filter.keyword" class="form-control" placeholder="keyword"> <input type="text" v-model="filter.name" class="form-control" placeholder="name">
</div> </div>
<div class="col-xxl-20 col-xl-3 col-lg-4 col-md-4 d-flex align-items-center mb-3"> <div class="col-xxl-20 col-xl-3 col-lg-4 col-md-4 d-flex align-items-center mb-3">
<label class="filter-title">sku</label> <label class="filter-title">sku</label>
@ -45,7 +45,7 @@
<label class="filter-title"></label> <label class="filter-title"></label>
<div class="col-auto"> <div class="col-auto">
<button type="button" @click="search" class="btn btn-primary">筛选</button> <button type="button" @click="search" class="btn btn-primary">筛选</button>
<button type="button" @click="search" class="btn btn-outline-primary">重置</button> <button type="button" @click="resetSearch" class="btn btn-outline-primary">重置</button>
</div> </div>
</div> </div>
</div> </div>
@ -135,37 +135,39 @@
new Vue({ new Vue({
el: '#product-app', el: '#product-app',
data: { data: {
product: @json($product), product: @json($products),
filter: { filter: {
keyword: bk.getQueryString('keyword'), name: bk.getQueryString('name'),
category_id: bk.getQueryString('category_id'), category_id: bk.getQueryString('category_id'),
sku: bk.getQueryString('sku'), sku: bk.getQueryString('sku'),
active: bk.getQueryString('active'), active: bk.getQueryString('active'),
}, },
selected: [], selected: [],
page: bk.getQueryString('page', 1), page: bk.getQueryString('page', 1) * 1,
perPage: bk.getQueryString('per_page', 20),
orderBy: bk.getQueryString('order_by', 'products.id:desc'), orderBy: bk.getQueryString('order_by', 'products.id:desc'),
}, },
computed: { computed: {
url: function() { url: function() {
let filter = {}; let filter = {};
filter.per_page = this.perPage;
if (this.orderBy != 'products.id:desc') { if (this.orderBy != 'products.id:desc') {
filter.order_by = this.orderBy; filter.order_by = this.orderBy;
} }
if (this.page > 1) { if (this.page > 1) {
filter.page = this.page; filter.page = this.page;
} }
for (key in this.filter) { for (key in this.filter) {
const value = this.filter[key]; const value = this.filter[key];
if (value !== '' && value !== null) { if (value !== '' && value !== null) {
filter[key] = value; filter[key] = value;
} }
} }
const query = Object.keys(filter).map(key => key + '=' + filter[key]).join('&'); const query = Object.keys(filter).map(key => key + '=' + filter[key]).join('&');
const url = @json(admin_route('products.index')); const url = @json(admin_route('products.index'));
if (query) { if (query) {
return url + '?' + query; return url + '?' + query;
} }
@ -186,7 +188,7 @@
loadData: function() { loadData: function() {
window.history.pushState('', '', this.url); window.history.pushState('', '', this.url);
$http.get(this.url).then((res) => { $http.get(this.url).then((res) => {
this.product = res.data; this.product = res;
}) })
}, },
@ -195,6 +197,11 @@
this.loadData(); this.loadData();
}, },
resetSearch() {
Object.keys(this.filter).forEach(key => this.filter[key] = '')
this.loadData();
},
deleteProduct: function(index) { deleteProduct: function(index) {
const product = this.product.data[index]; const product = this.product.data[index];