commit
6c3143ac16
@ -0,0 +1,38 @@
|
|||||||
|
APP_NAME=Laravel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:n3wdEB7E5pNp5LmaK/qKCW7XkHjKmrHuR165yHIKD3A=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_LOG_LEVEL=debug
|
||||||
|
APP_URL=https://mp.fengyuexingzi.top/
|
||||||
|
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=db
|
||||||
|
DB_USERNAME=m
|
||||||
|
DB_PASSWORD=
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
QUEUE_DRIVER=sync
|
||||||
|
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_DRIVER=smtp
|
||||||
|
MAIL_HOST=smtp.mailtrap.io
|
||||||
|
MAIL_PORT=2525
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
WECHAT_MINI_PROGRAM_APPID=
|
||||||
|
WECHAT_MINI_PROGRAM_SECRET=
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
* text=auto
|
||||||
|
*.css linguist-vendored
|
||||||
|
*.scss linguist-vendored
|
||||||
|
*.js linguist-vendored
|
||||||
|
CHANGELOG.md export-ignore
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
/node_modules
|
||||||
|
/public/hot
|
||||||
|
/public/storage
|
||||||
|
/storage/*.key
|
||||||
|
/vendor
|
||||||
|
/.idea
|
||||||
|
/.vagrant
|
||||||
|
Homestead.json
|
||||||
|
Homestead.yaml
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
.env
|
||||||
|
/.vscode
|
||||||
|
composer.lock
|
||||||
|
package-lock.json
|
||||||
|
/public/mix-manifest.json
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\ShopBrand;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class BrandController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('品牌列表');
|
||||||
|
$content->description('品牌管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('品牌信息修改');
|
||||||
|
$content->description('品牌管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('创建新的品牌');
|
||||||
|
$content->description('品牌管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopBrand::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('id', 'desc');
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->name('品牌名称')->label('info')->sortable();
|
||||||
|
$grid->pic_url('品牌图片')->image('', 100, 100);
|
||||||
|
$grid->list_pic_url('品牌列表展示图片')->image('', 100, 100);
|
||||||
|
$grid->simple_desc('品牌描述');
|
||||||
|
$grid->sort_order('展示排序');
|
||||||
|
$grid->floor_price('品牌显示的最低价');
|
||||||
|
$grid->is_new('是否新增')
|
||||||
|
->select(ShopBrand::getTypeStateDispayMap());
|
||||||
|
$grid->new_pic_url('新增展示图片')->image('', 100, 100);
|
||||||
|
$grid->new_sort_order('新增逻辑下的排序');
|
||||||
|
$grid->is_show('状态')
|
||||||
|
->select(ShopBrand::getStateDispayMap());
|
||||||
|
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('name', '品牌名称');
|
||||||
|
$filter->equal('is_show', '状态')
|
||||||
|
->radio(ShopBrand::getStateDispayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopBrand::class, function (Form $form) {
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->text('name', '品牌名称')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->multipleImage('list_pic_url', '品牌列表展示图片')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->textarea('simple_desc', '品牌描述');
|
||||||
|
|
||||||
|
$form->image('pic_url', '品牌图片')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->number('sort_order','展示排序')
|
||||||
|
->default(255);
|
||||||
|
|
||||||
|
$form->currency('floor_price', '品牌显示的最低价')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->radio('is_show', '状态')
|
||||||
|
->options(ShopBrand::getStateDispayMap())
|
||||||
|
->default(ShopBrand::STATE_SHOW);
|
||||||
|
|
||||||
|
|
||||||
|
$form->image('new_pic_url', '新增展示图片')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName() ;
|
||||||
|
|
||||||
|
$form->number('new_sort_order','新增逻辑下的排序')
|
||||||
|
->default(255);
|
||||||
|
|
||||||
|
$form->radio('is_new', '是否新增')
|
||||||
|
->options(ShopBrand::getTypeStateDispayMap())
|
||||||
|
->default(ShopBrand::NEW_ADD);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,134 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Carousel;
|
||||||
|
|
||||||
|
use App\Models\Good;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class CarouselController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('轮播图列表');
|
||||||
|
$content->description('轮播图管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('轮播图修改');
|
||||||
|
$content->description('轮播图管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('轮播图创建');
|
||||||
|
$content->description('轮播图管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(Carousel::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
|
||||||
|
$grid->carousel_title('标题');
|
||||||
|
$grid->carousel_img('图片')
|
||||||
|
->image('', 75, 75);
|
||||||
|
$grid->booth_type('展位')
|
||||||
|
->select(Carousel::getBoothTypeDisplayMap());
|
||||||
|
$grid->goods_id('商品序号');
|
||||||
|
$grid->carousel_info('显示内容');
|
||||||
|
$grid->state('状态')
|
||||||
|
->switch(Carousel::getStateDisplayConfig());
|
||||||
|
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更改时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('carousel_title', '标题');
|
||||||
|
$filter->equal('booth_type', '展位')
|
||||||
|
->select(Carousel::getBoothTypeDisplayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(Carousel::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->text('carousel_title', '标题')
|
||||||
|
->rules('required|max:100');
|
||||||
|
$form->image('carousel_img', '图片')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName();
|
||||||
|
$form->select('booth_type', '展位')
|
||||||
|
->rules('required')
|
||||||
|
->options(Carousel::getBoothTypeDisplayMap())
|
||||||
|
->default(Carousel::BOOTH_TYPE_HOME);
|
||||||
|
// $form->select('goods_id', '商品序号')
|
||||||
|
// ->options(Good::getAllGoodsID())
|
||||||
|
// ->rules('required');
|
||||||
|
$form->text('carousel_info', '显示内容')
|
||||||
|
->rules('required|max:100');
|
||||||
|
|
||||||
|
$stateDisplayConfig = Carousel::getStateDisplayConfig();
|
||||||
|
$form->switch('state', '状态')
|
||||||
|
->states($stateDisplayConfig)
|
||||||
|
->default(Carousel::STATE_NORMAL);
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Classes;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ClassController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('商品分类列表');
|
||||||
|
$content->description('分类管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
// $content->body(Classes::tree());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('商品分类信息修改');
|
||||||
|
$content->description('分类管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('创建商品分类');
|
||||||
|
$content->description('分类管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(Classes::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->class_name('分类名')
|
||||||
|
->label('info')
|
||||||
|
->sortable();
|
||||||
|
|
||||||
|
$grid->class_pid('父分类')
|
||||||
|
->select(Classes::getAllClasses());
|
||||||
|
|
||||||
|
$stateDisplayConfig = Classes::getStateDisplayConfig();
|
||||||
|
|
||||||
|
$grid->class_state('状态')
|
||||||
|
->switch($stateDisplayConfig);
|
||||||
|
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('修改时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('class_name', '分类名');
|
||||||
|
$filter->in('class_pid', '父分类')
|
||||||
|
->multipleSelect(Classes::getAllClasses());
|
||||||
|
$filter->equal('class_state', '状态')
|
||||||
|
->radio(Classes::getStateDisplayMap());
|
||||||
|
});
|
||||||
|
$grid->actions(function ($actions) {
|
||||||
|
$actions->disableDelete();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
|
||||||
|
return Admin::form(Classes::class, function (Form $form) {
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->text('class_name', '分类名')
|
||||||
|
->rules('required|max:100')
|
||||||
|
->placeholder('请输入分类名');
|
||||||
|
|
||||||
|
$form->select('class_pid', '父分类')
|
||||||
|
->rules('required')
|
||||||
|
->options(Classes::getAllClasses());
|
||||||
|
|
||||||
|
$form->text('class_desc', '描述')
|
||||||
|
->placeholder('请输入分类描述');
|
||||||
|
|
||||||
|
$form->switch('class_state', '状态')
|
||||||
|
->states(Classes::getStateDisplayConfig())
|
||||||
|
->default(Classes::STATE_ACTIVE);
|
||||||
|
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '修改时间');
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ExampleController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(YourModel::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('ID')->sortable();
|
||||||
|
|
||||||
|
$grid->created_at();
|
||||||
|
$grid->updated_at();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(YourModel::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', 'ID');
|
||||||
|
|
||||||
|
$form->display('created_at', 'Created At');
|
||||||
|
$form->display('updated_at', 'Updated At');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\User;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class FrontEndUserController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('前端用户列表');
|
||||||
|
$content->description('前端用户管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(User::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->disableCreateButton();
|
||||||
|
$grid->disableActions();
|
||||||
|
$grid->disableRowSelector();
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->name('姓名');
|
||||||
|
$grid->mobile('手机号');
|
||||||
|
$grid->nickname('昵称');
|
||||||
|
$grid->login_time('登录时间');
|
||||||
|
$grid->login_ip('登录IP');
|
||||||
|
$grid->role('用户类型')->select(User::getRoleDisplayMap());
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('name', '姓名');
|
||||||
|
$filter->equal('mobile', '手机号');
|
||||||
|
$filter->equal('role', '用户类型')->radio(User::getRoleDisplayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(User::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->select('role', '用户类型')->options(User::getRoleDisplayMap());
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,166 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Classes;
|
||||||
|
use App\Models\Good;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class GoodController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('商品列表');
|
||||||
|
$content->description('商品管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('商品信息修改');
|
||||||
|
$content->description('商品管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('创建商品');
|
||||||
|
$content->description('商品管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(Good::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->goods_name('商品名')->label('info')->sortable();
|
||||||
|
$grid->goods_main_image('商品主图')->image('', 75, 75);
|
||||||
|
$grid->class_id('分类')
|
||||||
|
->select(Classes::getAllClasses(true))
|
||||||
|
->sortable();
|
||||||
|
$grid->goods_price('单价');
|
||||||
|
$grid->goods_marketprice('市场价');
|
||||||
|
$grid->goods_onsaleprice('折扣价');
|
||||||
|
$grid->goods_salenum('销售量');
|
||||||
|
$grid->goods_click('点击量');
|
||||||
|
$grid->goods_carousel('轮播图片')->image('', 50, 50);
|
||||||
|
$grid->goods_description_pictures('描述图片')->image('', 50, 50);
|
||||||
|
|
||||||
|
// $grid->goods_storage('库存');
|
||||||
|
$grid->goods_state('状态')
|
||||||
|
->select(Good::getStateDispayMap());
|
||||||
|
$grid->sort('排序');
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('goods_name', '商品名');
|
||||||
|
$filter->in('class_id', '分类')
|
||||||
|
->multipleSelect(Classes::getAllClasses(true));
|
||||||
|
$filter->lt('goods_price', '单价')
|
||||||
|
->currency();
|
||||||
|
$filter->lt('goods_marketprice', '市场价')
|
||||||
|
->currency();
|
||||||
|
$filter->lt('goods_onsaleprice', '折扣价')
|
||||||
|
->currency();
|
||||||
|
$filter->between('goods_salenum', '销售量');
|
||||||
|
$filter->between('goods_click', '点击量');
|
||||||
|
// $filter->lt('goods_storage', 'Storage');
|
||||||
|
$filter->equal('goods_state', '状态')
|
||||||
|
->radio(Good::getStateDispayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(Good::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->text('goods_name', '商品名')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->select('class_id', '分类')
|
||||||
|
->rules('required')
|
||||||
|
->options(Classes::getAllClasses(true));
|
||||||
|
|
||||||
|
$form->currency('goods_price', '单价')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->currency('goods_marketprice', '市场价')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->currency('goods_onsaleprice', '折扣价')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->image('goods_main_image', '主图')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName() ;
|
||||||
|
|
||||||
|
$form->multipleImage('goods_carousel', '轮播图片')
|
||||||
|
->uniqueName();
|
||||||
|
|
||||||
|
$form->textarea('goods_desc', '描述');
|
||||||
|
|
||||||
|
$form->multipleImage('goods_description_pictures', '描述图片')
|
||||||
|
->uniqueName();
|
||||||
|
|
||||||
|
// $form->number('goods_storage', '库存');
|
||||||
|
$form->radio('goods_state', '状态')
|
||||||
|
->options(Good::getStateDispayMap())
|
||||||
|
->default(Good::STATE_NORMAL);
|
||||||
|
$form->number('sort','排序')
|
||||||
|
->default(255);
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\Dashboard;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Column;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use Encore\Admin\Layout\Row;
|
||||||
|
|
||||||
|
class HomeController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('Dashboard');
|
||||||
|
$content->description('Description...');
|
||||||
|
|
||||||
|
$content->row(Dashboard::title());
|
||||||
|
|
||||||
|
$content->row(function (Row $row) {
|
||||||
|
|
||||||
|
$row->column(4, function (Column $column) {
|
||||||
|
$column->append(Dashboard::environment());
|
||||||
|
});
|
||||||
|
|
||||||
|
$row->column(4, function (Column $column) {
|
||||||
|
$column->append(Dashboard::extensions());
|
||||||
|
});
|
||||||
|
|
||||||
|
$row->column(4, function (Column $column) {
|
||||||
|
$column->append(Dashboard::dependencies());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\News;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class NewsController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新闻通知列表');
|
||||||
|
$content->description('新闻通知列表');
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('新闻信息修改');
|
||||||
|
$content->description('新闻信息修改');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增新闻');
|
||||||
|
$content->description('新增新闻通知');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(News::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('ID')->sortable();
|
||||||
|
$grid->news_title('新闻标题');
|
||||||
|
$grid->news_lable('新闻标签');
|
||||||
|
$grid->news_author('新闻发布者');
|
||||||
|
$grid->news_content('新闻内容');
|
||||||
|
$grid->created_at();
|
||||||
|
$grid->updated_at();
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(News::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', 'ID');
|
||||||
|
|
||||||
|
$form->text('news_title', '新闻标题')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('news_lable', '新闻标签')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('news_author', '编辑作者')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('news_content', '新闻内容')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->display('created_at', 'Created At');
|
||||||
|
$form->display('updated_at', 'Updated At');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\ProjectFuncdot;
|
||||||
|
use App\Logics\ProjectControl;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ProjectFuncDotController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('功能点管理');
|
||||||
|
$content->description('功能点管理列表');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('功能点修改');
|
||||||
|
$content->description('功能点修改');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('功能点创建');
|
||||||
|
$content->description('功能点创建');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ProjectFuncdot::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
|
||||||
|
$grid->type_id('所属项目类型id');
|
||||||
|
$grid->functype_id('所属功能分类id');
|
||||||
|
$grid->column('FunctypeFid.functype_name','所属功能分类');
|
||||||
|
$grid->column('getModels.model_name','所属功能模块');
|
||||||
|
$grid->funcdot_name('功能点名');
|
||||||
|
$grid->funcdot_desc('功能点描述');
|
||||||
|
$grid->bottom_time('最低周期(h)');
|
||||||
|
$grid->time('周期(h)');
|
||||||
|
$grid->discount_price('该功能的折扣价格');
|
||||||
|
$grid->price('市场价格');
|
||||||
|
$grid->sort('排序');
|
||||||
|
$grid->status('状态')
|
||||||
|
->switch([
|
||||||
|
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
||||||
|
]);
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
// $filter->equal('functype_id', '所属功能分类id')
|
||||||
|
// ->select(Classes::getAllClasses(true));
|
||||||
|
$filter->like('model_name', '模块名');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ProjectFuncdot::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->select('type_id', '所属项目类型')
|
||||||
|
->rules("required|min:0")
|
||||||
|
->options(ProjectControl::getProjectTypes())
|
||||||
|
->default(-1)->load('functype_id', '/api/project_json/func-types', 'id', 'functype_name');
|
||||||
|
$form->select('functype_id', '所属功能分类id')->options(function ($id) {})
|
||||||
|
->load('model_id', '/api/project_json/models', 'id', 'model_name');
|
||||||
|
$form->select('model_id', '所属功能模块id')->options(function ($id) {});
|
||||||
|
|
||||||
|
$form->text('funcdot_name', '功能点名')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('funcdot_desc', '功能点描述')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
|
||||||
|
$form->number('bottom_time','最低周期(h)')
|
||||||
|
->default(4);
|
||||||
|
$form->number('time','周期(h)')
|
||||||
|
->default(6);
|
||||||
|
$form->currency('discount_price','该功能的折扣价格');
|
||||||
|
$form->currency('price','市场价格');
|
||||||
|
|
||||||
|
$form->number('sort','排序')
|
||||||
|
->default(255);
|
||||||
|
$form->switch('status', '是否启用')
|
||||||
|
->states([
|
||||||
|
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
||||||
|
])->default(1);
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Logics\ProjectControl;
|
||||||
|
use App\Models\ProjectFunctype;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ProjectFuncTypeController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('项目功能分类');
|
||||||
|
$content->description('项目功能分类管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('项目功能分类');
|
||||||
|
$content->description('项目功能分类修改');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('项目功能分类');
|
||||||
|
$content->description('项目功能分类创建');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ProjectFunctype::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->type_id('所属项目类型id')->select(ProjectControl::getProjectTypes());
|
||||||
|
$grid->functype_name('功能分类名');
|
||||||
|
$grid->functype_desc('功能分类描述');
|
||||||
|
$grid->sort('排序');
|
||||||
|
$grid->status('状态')
|
||||||
|
->switch([
|
||||||
|
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
||||||
|
]);
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->equal('type_id', '所属项目类型id')
|
||||||
|
->select(ProjectControl::getProjectTypes(0));
|
||||||
|
$filter->like('functype_name', '功能分类名');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ProjectFunctype::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->select('type_id', '所属项目类型')
|
||||||
|
->rules("required|numeric|min:0")
|
||||||
|
->options(ProjectControl::getProjectTypes())->default(-1);
|
||||||
|
$form->text('functype_name', '功能分类名')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('functype_desc', '功能分类描述')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
$form->number('sort','排序')
|
||||||
|
->default(255);
|
||||||
|
$form->switch('status', '是否启用')
|
||||||
|
->states([
|
||||||
|
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
||||||
|
])->default(1);
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\ProjectModel;
|
||||||
|
use App\Logics\ProjectControl;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ProjectModelController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('功能模块管理');
|
||||||
|
$content->description('功能模块管理列表');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('功能模块修改');
|
||||||
|
$content->description('功能模块修改');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('功能模块创建');
|
||||||
|
$content->description('功能模块创建');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ProjectModel::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
|
||||||
|
$grid->type_id('所属项目类型id');
|
||||||
|
$grid->functype_id('所属功能分类id');
|
||||||
|
$grid->model_name('模块名');
|
||||||
|
$grid->model_desc('模块描述');
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
// $filter->equal('functype_id', '所属功能分类id')
|
||||||
|
// ->select(Classes::getAllClasses(true));
|
||||||
|
$filter->like('model_name', '模块名');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ProjectModel::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->select('type_id', '所属项目类型')
|
||||||
|
->rules("required|min:0")
|
||||||
|
->options(ProjectControl::getProjectTypes())
|
||||||
|
->default(-1)->load('functype_id', '/api/project_json/func-types', 'id', 'functype_name');
|
||||||
|
$form->select('functype_id', '所属功能分类id')->options(function ($id) {});
|
||||||
|
$form->text('model_name', '模块名')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('model_desc', '模块描述')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
$form->number('sort','排序')
|
||||||
|
->default(255);
|
||||||
|
$form->switch('status', '是否启用')
|
||||||
|
->states([
|
||||||
|
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
||||||
|
])->default(1);
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\ProjectType;
|
||||||
|
use App\Models\ShopBrand;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ProjectTypeController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('项目类型');
|
||||||
|
$content->description('项目类型管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('项目类型');
|
||||||
|
$content->description('项目类型修改');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('项目类型');
|
||||||
|
$content->description('新增项目类型');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ProjectType::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
|
||||||
|
$grid->type_name('项目类型名');
|
||||||
|
$grid->type_desc('项目类型描述')->limit(100);
|
||||||
|
$grid->type_img('类型的图片')->image('', 50, 50);
|
||||||
|
$grid->brand_id('品牌id')
|
||||||
|
->select(ShopBrand::getAllClasses(true));
|
||||||
|
$grid->basal_price('该类项目的基础价格');
|
||||||
|
$grid->carousel_imgs('轮播图片')->image('', 50, 50);
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('type_name', '项目类型名');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ProjectType::class, function (Form $form) {
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->text('type_name', '项目类型名')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('type_desc', '项目类型描述')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
$form->image('type_img', '类型的图片')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName();
|
||||||
|
$form->select('brand_id', '品牌id')
|
||||||
|
->rules('required')
|
||||||
|
->options(ShopBrand::getAllClasses(true));
|
||||||
|
$form->multipleImage('carousel_imgs', '轮播图片')
|
||||||
|
->uniqueName();
|
||||||
|
|
||||||
|
$form->number('salenum','下单量')
|
||||||
|
->default(10);
|
||||||
|
|
||||||
|
$form->textarea('description', '详情描述');
|
||||||
|
|
||||||
|
$form->currency('basal_price','该类项目的基础价格');
|
||||||
|
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopFeedback;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class FeedbackController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('用户反馈');
|
||||||
|
$content->description('用户反馈管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('用户反馈');
|
||||||
|
$content->description('用户反馈状态管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopFeedback::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('id', 'desc');
|
||||||
|
$grid->disableRowSelector();
|
||||||
|
$grid->disableCreateButton();
|
||||||
|
$grid->disableActions();
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
|
||||||
|
$grid->user_name('用户昵称');
|
||||||
|
$grid->user_contact('反馈用户联系方式');
|
||||||
|
$grid->column('msg_type','反馈类型')->display(function($msg_type){
|
||||||
|
return ShopFeedback::$Option[$msg_type];
|
||||||
|
});
|
||||||
|
$grid->msg_title('反馈标题');
|
||||||
|
$grid->msg_content('反馈内容');
|
||||||
|
$grid->msg_status('反馈状态')
|
||||||
|
->select(ShopFeedback::getStatusDispayMap());
|
||||||
|
$grid->message_img('反馈附加图片')->image('', 80, 80);
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->equal('user_contact', '反馈人手机');
|
||||||
|
$filter->equal('msg_type', '反馈类型')->select(ShopFeedback::$Option);
|
||||||
|
$filter->equal('msg_status', '反馈状态')->select(ShopFeedback::getStatusDispayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopFeedback::class, function (Form $form) {
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->select('msg_status', '反馈状态')
|
||||||
|
->rules('required')
|
||||||
|
->options(ShopFeedback::getStatusDispayMap());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopAttributeCategory;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ShopAttributeCategoryController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('属性分类列表');
|
||||||
|
$content->description('属性分类管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('属性分类修改');
|
||||||
|
$content->description('属性分类管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增属性分类');
|
||||||
|
$content->description('属性分类管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopAttributeCategory::class, function (Grid $grid) {
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->name('属性分类名称');
|
||||||
|
$grid->enabled('状态')
|
||||||
|
->select(ShopAttributeCategory::getEnabledDispayMap());
|
||||||
|
$grid->disableExport();// 禁用导出数据按钮
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('name', '属性分类名称');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopAttributeCategory::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->text('name', '属性分类名称')
|
||||||
|
->rules('required');
|
||||||
|
$form->radio('enabled', '是否推荐')
|
||||||
|
->options(ShopAttributeCategory::getEnabledDispayMap())
|
||||||
|
->default(ShopAttributeCategory::STATE_ENABLED);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopAttribute;
|
||||||
|
use App\Models\ShopAttributeCategory;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ShopAttributeController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('属性条目列表');
|
||||||
|
$content->description('属性条目管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('属性条目修改');
|
||||||
|
$content->description('属性条目管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增属性条目');
|
||||||
|
$content->description('属性条目管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopAttribute::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('sort_order', 'asc');
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->name('属性名称');
|
||||||
|
$grid->attribute_category_id('属性分类')->select(ShopAttributeCategory::pluck('name','id'));
|
||||||
|
$grid->disableExport();// 禁用导出数据按钮
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('name', '属性名称');
|
||||||
|
$filter->equal('attribute_category_id','属性分类')->select(ShopAttributeCategory::pluck('name','id'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopAttribute::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->text('name', '属性名称')
|
||||||
|
->rules('required');
|
||||||
|
$form->select('attribute_category_id', '属性分类')->options(ShopAttributeCategory::pluck('name','id'));
|
||||||
|
$form->number('sort_order','排序')
|
||||||
|
->default(255);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use Encore\Admin\Layout\Column;
|
||||||
|
use Encore\Admin\Layout\Row;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
use Encore\Admin\Tree;
|
||||||
|
use Encore\Admin\Widgets\Box;
|
||||||
|
|
||||||
|
class ShopCategoryController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('商城分类');
|
||||||
|
$content->description('分类管理');
|
||||||
|
|
||||||
|
$content->row(function (Row $row) {
|
||||||
|
$row->column(6, $this->treeView()->render());
|
||||||
|
$row->column(6, function (Column $column) {
|
||||||
|
$form = new \Encore\Admin\Widgets\Form();
|
||||||
|
$form->action(admin_base_path('shop-category'));
|
||||||
|
$form->select('parent_id','上级分类')->options(ShopCategory::selectOptions())->help('目前只支持一级分类,但留有多级接口。可根据需要联系开发人员进行功能构造');
|
||||||
|
$form->text('name','分类名称')->rules('required|min:2')->help('必填');
|
||||||
|
$form->text('front_name','分类简述')->rules('required|min:2')->help('必填');
|
||||||
|
$form->number('sort_order', '排序')->default(255);
|
||||||
|
$form->text('keywords','分类关键词')->rules('required')->help('必填');
|
||||||
|
$form->textarea('front_desc','分类描述');
|
||||||
|
$form->image('icon_url','分类图标')->help('必填 推荐 62*62')->rules('required');
|
||||||
|
$form->image('banner_url','推广图片')->help('必填 推荐 600*400');
|
||||||
|
$form->image('img_url','展示图片')->help('推荐 400*400')->rules('required');
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
$form->saved(function (Form $form) {
|
||||||
|
if($form->model()->id!=0){
|
||||||
|
$info = ShopCategory::find($form->model()->id);
|
||||||
|
if($info->parent_id){
|
||||||
|
$pinfo = ShopCategory::find($info->parent_id);
|
||||||
|
$info->level=$pinfo->level + 1;
|
||||||
|
$info->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$column->append((new Box(trans('新增商城分类'), $form))->style('success'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Encore\Admin\Tree
|
||||||
|
*/
|
||||||
|
protected function treeView()
|
||||||
|
{
|
||||||
|
return ShopCategory::tree(function (Tree $tree) {
|
||||||
|
$tree->disableCreate();
|
||||||
|
$tree->disableSave();
|
||||||
|
$tree->disableRefresh();
|
||||||
|
$tree->branch(function ($branch) {
|
||||||
|
$src = config('filesystems.disks.oss.url') . '/' . $branch['icon_url'] ;
|
||||||
|
$logo = "<img src='$src' style='max-width:30px;max-height:30px' class='img'/>";
|
||||||
|
|
||||||
|
return "{$branch['id']} - {$branch['name']} $logo";
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopCategory::class, function (Form $form) {
|
||||||
|
$form->select('parent_id','上级分类')->options(ShopCategory::selectOptions())->help('目前只支持一级分类,但留有多级接口。可根据需要联系开发人员进行功能构造');
|
||||||
|
$form->text('name','分类名称')->rules('required|min:2');
|
||||||
|
$form->text('front_name','分类简述')->rules('required|min:2')->help('必填');
|
||||||
|
$form->number('sort_order', '排序')->default(255);
|
||||||
|
$form->text('keywords','分类关键词')->help('必填')->rules('required');
|
||||||
|
$form->textarea('front_desc','分类描述')->help('必填')->rules('required');
|
||||||
|
$form->image('icon_url','分类图标')->help('必填 推荐 62*62')->rules('required');
|
||||||
|
$form->image('banner_url','推广图片')->help('必填 推荐 600*400')->rules('required');
|
||||||
|
$form->image('img_url','展示图片')->help('推荐 400*400');
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
$form->saved(function (Form $form) {
|
||||||
|
if($form->model()->id!=0){
|
||||||
|
$info = ShopCategory::find($form->model()->id);
|
||||||
|
if($info->parent_id){
|
||||||
|
$pinfo = ShopCategory::find($info->parent_id);
|
||||||
|
$info->level=$pinfo->level + 1;
|
||||||
|
$info->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,256 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory;
|
||||||
|
use App\Models\ShopGoods;
|
||||||
|
use App\Models\ShopBrand;
|
||||||
|
use App\Models\ShopAttribute;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
use Encore\Admin\Widgets\Box;
|
||||||
|
use Encore\Admin\Widgets\Tab;
|
||||||
|
use Encore\Admin\Widgets\Table;
|
||||||
|
|
||||||
|
class ShopGoodsController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('商城商品列表');
|
||||||
|
$content->description('商城商品管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('商城商品列表');
|
||||||
|
$content->description('商城商品管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增商品');
|
||||||
|
$content->description('商品管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopGoods::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('sort_order', 'asc');
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->primary_pic_url('商品主图')->image('', 75, 75);
|
||||||
|
$grid->goods_name('商品名')->label('info')->limit(50);
|
||||||
|
$grid->goods_sn('商品编号')->limit(50);
|
||||||
|
$grid->category_id('商品分类')
|
||||||
|
->select(ShopCategory::getAllClasses(true));
|
||||||
|
$grid->brand_id('品牌id')
|
||||||
|
->select(ShopBrand::getAllClasses(true));
|
||||||
|
$grid->goods_number('商品库存量');
|
||||||
|
$grid->sort_order('商品排序');
|
||||||
|
|
||||||
|
$getListImg = $this;
|
||||||
|
// 这里是多个信息一起显示
|
||||||
|
$grid->column('其他信息')->expand(function () use($getListImg) {
|
||||||
|
$imgUrl = '<img src="%s" style="max-width:160px;max-height:160px" class="img img-thumbnail">';
|
||||||
|
$row_arr1 = [
|
||||||
|
[
|
||||||
|
'商品主图:' . sprintf($imgUrl,config('filesystems.disks.oss.url').'/'.$this->primary_pic_url),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'商品列表图:' .$getListImg->getListImg($this->list_pic_url,$imgUrl) ,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'商品关键词:' . $this->keywords,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'商品摘要:' . $this->goods_brief,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'专柜价格:¥' . $this->counter_price,
|
||||||
|
'附加价格:¥' . $this->extra_price,
|
||||||
|
'零售价格:¥' . $this->retail_price,
|
||||||
|
'单位价格,单价:¥' . $this->unit_price,
|
||||||
|
'运费:¥' . $this->freight_price,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$table = new Table(['其他信息'], $row_arr1);
|
||||||
|
$tab = new Tab();
|
||||||
|
$tab->add('商品基础信息', $table);
|
||||||
|
|
||||||
|
$box = new Box('商品描述',$this->goods_desc);
|
||||||
|
$tab->add('商品描述', $box);
|
||||||
|
|
||||||
|
return $tab;
|
||||||
|
}, '其他信息');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// $grid->goods_price('单价');
|
||||||
|
// $grid->goods_marketprice('市场价');
|
||||||
|
// $grid->goods_onsaleprice('折扣价');
|
||||||
|
// $grid->goods_salenum('销售量');
|
||||||
|
// $grid->goods_click('点击量');
|
||||||
|
// $grid->goods_carousel('轮播图片')->image('', 50, 50);
|
||||||
|
// $grid->goods_description_pictures('描述图片')->image('', 50, 50);
|
||||||
|
//
|
||||||
|
//// $grid->goods_storage('库存');
|
||||||
|
// $grid->goods_state('状态')
|
||||||
|
// ->select(Good::getStateDispayMap());
|
||||||
|
// $grid->sort('排序');
|
||||||
|
// $grid->created_at('创建时间');
|
||||||
|
// $grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('goods_name', '商品名');
|
||||||
|
$filter->in('class_id', '分类')
|
||||||
|
->multipleSelect(ShopCategory::getAllClasses(true));
|
||||||
|
$filter->equal('is_delete', '状态')
|
||||||
|
->radio(ShopGoods::getDeleteDispayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopGoods::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->text('goods_name', '商品名')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->select('category_id', '商品分类')
|
||||||
|
->rules('required')
|
||||||
|
->options(ShopCategory::selectOptions(true));
|
||||||
|
$form->select('brand_id', '品牌id')
|
||||||
|
->rules('required')
|
||||||
|
->options(ShopBrand::getAllClasses(true));
|
||||||
|
|
||||||
|
$form->currency('counter_price', '专柜价格')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->currency('extra_price', '附加价格')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->currency('retail_price', '零售价格')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->currency('unit_price', '单位价格,单价')
|
||||||
|
->symbol('¥');
|
||||||
|
$form->currency('freight_price', '运费,单价')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->textarea('keywords', '商品关键词');
|
||||||
|
$form->textarea('goods_brief', '商品摘要');
|
||||||
|
$form->editor('goods_desc', '商品描述');
|
||||||
|
$form->textarea('promotion_desc', '促销描述');
|
||||||
|
$form->text('promotion_tag', '促销标签')
|
||||||
|
->value(' ');
|
||||||
|
|
||||||
|
$form->image('primary_pic_url', '商品主图')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName()->help('建议300*300');
|
||||||
|
|
||||||
|
$form->multipleImage('list_pic_url', '商品列表图')
|
||||||
|
->uniqueName();
|
||||||
|
$form->number('goods_number', '库存')->default(10);
|
||||||
|
$form->number('sell_volume', '销售量');
|
||||||
|
$form->radio('is_on_sale', '上架状态')
|
||||||
|
->options(ShopGoods::getSaleDispayMap())
|
||||||
|
->default(ShopGoods::STATE_ON_SALE);
|
||||||
|
$form->radio('is_delete', '删除状态')
|
||||||
|
->options(ShopGoods::getDeleteDispayMap())
|
||||||
|
->default(ShopGoods::STATE_NOT_DELETE);
|
||||||
|
$form->radio('is_limited', '是否限购')
|
||||||
|
->options(ShopGoods::getLimitDispayMap())
|
||||||
|
->default(ShopGoods::STATE_SALE_NOT_LIMIT);
|
||||||
|
$form->radio('is_hot', '是否推荐')
|
||||||
|
->options(ShopGoods::getRecommendDispayMap())
|
||||||
|
->default(ShopGoods::STATE_SALE_NOT_RECOMMEND);
|
||||||
|
$form->radio('is_new', '是否新品')
|
||||||
|
->options(ShopGoods::getNewDispayMap())
|
||||||
|
->default(ShopGoods::STATE_SALE_NEW);
|
||||||
|
$form->radio('is_vip_exclusive', '是否是会员专属')
|
||||||
|
->options(ShopGoods::getVipDispayMap())
|
||||||
|
->default(ShopGoods::STATE_NOT_VIP);
|
||||||
|
$form->currency('vip_exclusive_price', '会员专享价')
|
||||||
|
->symbol('¥');
|
||||||
|
$form->number('sort_order','排序')
|
||||||
|
->default(255);
|
||||||
|
|
||||||
|
$form->hasMany('goods_attribute', '添加属性', function (Form\NestedForm $form) {
|
||||||
|
$form->select('attribute_id', '选择属性')->options(ShopAttribute::pluck('name','id'));
|
||||||
|
$form->text('value', '属性值');
|
||||||
|
});
|
||||||
|
|
||||||
|
// $form->addSpecification('attribute_category', 'wewe');
|
||||||
|
// $form->divide();
|
||||||
|
// $form->hasMany('products', '添加规格', function (Form\NestedForm $form) {
|
||||||
|
// $form->number('goods_number','库存')->default(255)->rules('required|min:1|max:20');
|
||||||
|
// $form->currency('retail_price', '单价')
|
||||||
|
// ->symbol('¥');
|
||||||
|
// });
|
||||||
|
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getListImg($list_pic_url,$modelUrl){
|
||||||
|
if(empty($list_pic_url) || empty($modelUrl)){
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
$url ='';
|
||||||
|
foreach($list_pic_url as $v){
|
||||||
|
$url .= sprintf($modelUrl,config('filesystems.disks.oss.url').'/'.$v);
|
||||||
|
}
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,162 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
use App\Models\ShopOrder;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
use Encore\Admin\Widgets\Table;
|
||||||
|
|
||||||
|
class ShopOrderController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('订单列表');
|
||||||
|
$content->description('订单管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$content = Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('订单信息修改');
|
||||||
|
$content->description('订单管理');
|
||||||
|
|
||||||
|
$content->body($this->form($id)->edit($id));
|
||||||
|
});
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('header');
|
||||||
|
$content->description('description');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopOrder::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('id', 'desc');
|
||||||
|
$grid->disableRowSelector();
|
||||||
|
$grid->disableCreateButton();
|
||||||
|
$grid->actions(function ($actions){
|
||||||
|
$actions->disableDelete();
|
||||||
|
});
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->order_sn('订单编号');
|
||||||
|
$grid->order_price('订单金额');
|
||||||
|
$grid->coupon_price('优惠金额');
|
||||||
|
$grid->actual_price('支付金额');
|
||||||
|
$grid->consignee('收件人')->limit(10);
|
||||||
|
$grid->mobile('收件人手机')->editable();
|
||||||
|
$grid->order_status('订单状态')->display(function ($status) {
|
||||||
|
switch($status){
|
||||||
|
case ShopOrder::STATUS_WAIT_PAY:
|
||||||
|
$label = 'label-danger';
|
||||||
|
break;
|
||||||
|
case ShopOrder::STATUS_ALREADY_PAID:
|
||||||
|
$label = 'label-success';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$label = 'label-info';
|
||||||
|
}
|
||||||
|
$status = ShopOrder::getStatusDisplayMap()[$status];
|
||||||
|
return "<span class='label {$label}'>{$status}</span>";
|
||||||
|
});
|
||||||
|
|
||||||
|
// 这里是多个信息一起显示
|
||||||
|
$grid->column('购物信息')->expand(function (){
|
||||||
|
$imgUrl = '<img src="%s" style="max-width:160px;max-height:160px" class="img img-thumbnail">';
|
||||||
|
$goodsInfo = [];
|
||||||
|
foreach($this->orderGoods as $goods){
|
||||||
|
$goodsInfo[] = [sprintf($imgUrl,config('filesystems.disks.oss.url').'/'.$goods->list_pic_url).' '.$goods->goods_name.' '.$goods->retail_price.' * '.$goods->number];
|
||||||
|
}
|
||||||
|
$row_arr1 = [
|
||||||
|
[
|
||||||
|
'收货人:' . $this->consignee,
|
||||||
|
'收件人手机:' . $this->mobile,
|
||||||
|
'收货地址:' . AddressLogic::getRegionNameById($this->province).' '.AddressLogic::getRegionNameById($this->city).' '.AddressLogic::getRegionNameById($this->district).' '.$this->address,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$row_arr1 = array_merge($goodsInfo,$row_arr1);
|
||||||
|
$table = new Table(['购物信息'], $row_arr1);
|
||||||
|
return $table;
|
||||||
|
}, '购物信息');
|
||||||
|
|
||||||
|
$grid->pay_time('付款时间');
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('order_sn', '订单编号');
|
||||||
|
$filter->equal('mobile', '收件人手机');
|
||||||
|
$filter->equal('order_status', '订单状态')->select(ShopOrder::getStatusDisplayMap());
|
||||||
|
$filter->between('pay_time', '付款时间')->datetime();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form($id='')
|
||||||
|
{
|
||||||
|
|
||||||
|
return Admin::form(ShopOrder::class, function (Form $form){
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->display('order_sn', '订单编号');
|
||||||
|
$form->display('order_status', '订单状态')->with(function ($value) {
|
||||||
|
return ShopOrder::getStatusDisplayMap()[$value];
|
||||||
|
});
|
||||||
|
$form->display('goods_price', '商品总价');
|
||||||
|
$form->display('order_price', '订单金额');
|
||||||
|
$form->display('coupon_price', '优惠金额');
|
||||||
|
$form->display('actual_price', '支付金额');
|
||||||
|
$form->display('consignee', '收件人');
|
||||||
|
$form->display('mobile', '收件人手机号');
|
||||||
|
$form->display('uid', '下单用户ID');
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopSpecification;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class ShopSpecificationController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('商品规格列表');
|
||||||
|
$content->description('商品规格管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('商品规格修改');
|
||||||
|
$content->description('商品规格管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增商品规格');
|
||||||
|
$content->description('商品规格管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopSpecification::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('sort_order', 'asc');
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->name('规格');
|
||||||
|
|
||||||
|
$grid->disableExport();// 禁用导出数据按钮
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('name', '规格');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopSpecification::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
$form->text('name', '规格名称')
|
||||||
|
->rules('required');
|
||||||
|
$form->number('sort_order','排序')
|
||||||
|
->default(255);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Shop;
|
||||||
|
|
||||||
|
use App\Models\ShopTopic;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
use Encore\Admin\Widgets\Box;
|
||||||
|
use Encore\Admin\Widgets\Tab;
|
||||||
|
use Encore\Admin\Widgets\Table;
|
||||||
|
|
||||||
|
class ShopTopicController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('主题&专题列表');
|
||||||
|
$content->description('主题&专题管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('主题&专题列表');
|
||||||
|
$content->description('主题&专题管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('新增主题&专题');
|
||||||
|
$content->description('主题&专题管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(ShopTopic::class, function (Grid $grid) {
|
||||||
|
$grid->model()->orderBy('sort_order', 'asc');
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->title('主题标题');
|
||||||
|
$grid->subtitle('短标题');
|
||||||
|
$grid->avatar('主题图片')->image('', 75, 75);
|
||||||
|
$grid->item_pic_url('元素图片')->image('', 75, 75);
|
||||||
|
|
||||||
|
$grid->price_info('价格信息')->label('info');
|
||||||
|
$grid->read_count('阅读量');
|
||||||
|
$grid->scene_pic_url('展示图片')->image('', 75, 75);
|
||||||
|
$grid->sort_order('主题排序');
|
||||||
|
|
||||||
|
// 这里是多个信息一起显示
|
||||||
|
$grid->column('主题表述')->expand(function () {
|
||||||
|
$tab = new Tab();
|
||||||
|
$box = new Box('主题表述',$this->content);
|
||||||
|
$tab->add('主题表述', $box);
|
||||||
|
return $tab;
|
||||||
|
}, '主题表述');
|
||||||
|
|
||||||
|
$grid->is_show('状态')
|
||||||
|
->select(ShopTopic::getStateDispayMap());
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->like('title', '主题标题');
|
||||||
|
$filter->equal('is_show', '状态')
|
||||||
|
->radio(ShopTopic::getStateDispayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(ShopTopic::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->text('title', '主题标题')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->text('subtitle', '短标题')
|
||||||
|
->rules('required');
|
||||||
|
|
||||||
|
$form->image('avatar', '主题图片')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName() ;
|
||||||
|
$form->image('scene_pic_url', '展示图片')
|
||||||
|
->rules('required')
|
||||||
|
->uniqueName() ;
|
||||||
|
|
||||||
|
$form->multipleImage('item_pic_url', '元素图片')
|
||||||
|
->uniqueName();
|
||||||
|
|
||||||
|
$form->currency('price_info', '价格信息')
|
||||||
|
->symbol('¥');
|
||||||
|
|
||||||
|
$form->editor('content', '主题表述');
|
||||||
|
|
||||||
|
$form->number('read_count', '阅读量');
|
||||||
|
|
||||||
|
$form->number('sort_order','排序')
|
||||||
|
->default(255);
|
||||||
|
|
||||||
|
$form->radio('is_show', '是否展示')
|
||||||
|
->options(ShopTopic::getStateDispayMap())
|
||||||
|
->default(ShopTopic::STATE_SHOW);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Classes;
|
||||||
|
use App\Models\Special;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
|
||||||
|
class SpecialController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('专题列表');
|
||||||
|
$content->description('专题管理');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('专题修改');
|
||||||
|
$content->description('专题管理');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('专题创建');
|
||||||
|
$content->description('专题管理');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(Special::class, function (Grid $grid) {
|
||||||
|
|
||||||
|
$grid->id('序号')->sortable();
|
||||||
|
$grid->icon('图标')
|
||||||
|
->image('', 50, 50);
|
||||||
|
$grid->class_id('分类')
|
||||||
|
->select(Classes::getAllClasses(true));
|
||||||
|
$grid->link_url('链接');
|
||||||
|
$grid->special_title('标题');
|
||||||
|
$grid->special_desc('描述');
|
||||||
|
$grid->remark('备注');
|
||||||
|
$grid->sort('排序');
|
||||||
|
$grid->if_show('是否显示')
|
||||||
|
->switch(Special::getIfShowDisplayConfig());
|
||||||
|
$grid->created_at('创建时间');
|
||||||
|
$grid->updated_at('更新时间');
|
||||||
|
|
||||||
|
$grid->filter(function ($filter) {
|
||||||
|
$filter->equal('class_id', '分类')
|
||||||
|
->select(Classes::getAllClasses(true));
|
||||||
|
$filter->like('special_title', '标题');
|
||||||
|
$filter->equal('if_show', '是否显示')
|
||||||
|
->radio(Special::getIfShowDisplayMap());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(Special::class, function (Form $form) {
|
||||||
|
|
||||||
|
$form->display('id', '序号');
|
||||||
|
|
||||||
|
$form->image('icon', '图标')
|
||||||
|
->rules('required');
|
||||||
|
$form->select('class_id', '分类')
|
||||||
|
->rules("required")
|
||||||
|
->options(Classes::getAllClasses(true))
|
||||||
|
->default(0);
|
||||||
|
$form->text('link_url', '链接')
|
||||||
|
->rules('required')
|
||||||
|
->rules('nullable|max:60');
|
||||||
|
$form->text('special_title', '标题')
|
||||||
|
->rules('required');
|
||||||
|
$form->text('special_desc', '描述')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
$form->text('remark', '备注')
|
||||||
|
->rules('required|max:300')
|
||||||
|
->default('');
|
||||||
|
$form->number('sort','排序')
|
||||||
|
->default(255);
|
||||||
|
$form->switch('if_show', '是否显示')
|
||||||
|
->states(Special::getIfShowDisplayConfig())
|
||||||
|
->default(Special::IFSHOW_YES);
|
||||||
|
|
||||||
|
$form->display('created_at', '创建时间');
|
||||||
|
$form->display('updated_at', '更新时间');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
class UploadController extends Controller
|
||||||
|
{
|
||||||
|
const MAX_UPLOAD_NUM = 25;
|
||||||
|
const UPLOAD_PATH = 'Mini';
|
||||||
|
|
||||||
|
// 待优化
|
||||||
|
function uploadImg(Request $request)
|
||||||
|
{
|
||||||
|
$file = $request->file("mypic");
|
||||||
|
if (!empty($file)) {
|
||||||
|
$len = count($file);
|
||||||
|
if ($len > static::MAX_UPLOAD_NUM) {
|
||||||
|
return response()->json(['ResultData' => 6, 'info' => '最多可以上传25张图片']);
|
||||||
|
}
|
||||||
|
$m = 0;
|
||||||
|
$k = 0;
|
||||||
|
for ($i = 0; $i < $len; $i++) {
|
||||||
|
// $n 表示第几张图片
|
||||||
|
$n = $i + 1;
|
||||||
|
if ($file[$i]->isValid()) {
|
||||||
|
if (in_array(strtolower($file[$i]->extension()), ['jpeg', 'jpg', 'gif', 'gpeg', 'png'])) {
|
||||||
|
$picname = $file[$i]->getClientOriginalName();//获取上传原文件名
|
||||||
|
$ext = $file[$i]->getClientOriginalExtension();//获取上传文件的后缀名
|
||||||
|
// 重命名
|
||||||
|
$filename = time() . str_random(6) . "." . $ext;
|
||||||
|
$re = Storage::putFile(static::UPLOAD_PATH,$file[$i]);
|
||||||
|
if ($re) {
|
||||||
|
$newFileName = config('filesystems.disks.oss.url').'/'.$re;
|
||||||
|
$m = $m + 1;
|
||||||
|
// return response()->json(['ResultData' => 0, 'info' => '上传成功', 'newFileName' => $newFileName ]);
|
||||||
|
} else {
|
||||||
|
$k = $k + 1;
|
||||||
|
// return response()->json(['ResultData' => 4, 'info' => '上传失败']);
|
||||||
|
}
|
||||||
|
$msg = $m . "张图片上传成功 " . $k . "张图片上传失败<br>";
|
||||||
|
$return[] = ['ResultData' => 0, 'info' => $msg, 'newFileName' => $newFileName];
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 3, 'info' => '第' . $n . '张图片后缀名不合法!<br/>' . '只支持jpeg/jpg/png/gif格式']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 1, 'info' => '第' . $n . '张图片超过最大限制!<br/>' . '图片最大支持2M']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 5, 'info' => '请选择文件']);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传到服务器 待优化
|
||||||
|
function uploadImgToServer(Request $request){
|
||||||
|
$file = $request->file("mypic");
|
||||||
|
if (!empty($file)) {
|
||||||
|
$len = count($file);
|
||||||
|
foreach ($file as $key => $value) {
|
||||||
|
$len = $key;
|
||||||
|
}
|
||||||
|
if ($len > static::MAX_UPLOAD_NUM) {
|
||||||
|
return response()->json(['ResultData' => 6, 'info' => '最多可以上传25张图片']);
|
||||||
|
}
|
||||||
|
$m = 0;
|
||||||
|
$k = 0;
|
||||||
|
for ($i = 0; $i <= $len; $i++) {
|
||||||
|
// $n 表示第几张图片
|
||||||
|
$n = $i + 1;
|
||||||
|
if ($file[$i]->isValid()) {
|
||||||
|
if (in_array(strtolower($file[$i]->extension()), ['jpeg', 'jpg', 'gif', 'gpeg', 'png'])) {
|
||||||
|
$picname = $file[$i]->getClientOriginalName();//获取上传原文件名
|
||||||
|
$ext = $file[$i]->getClientOriginalExtension();//获取上传文件的后缀名
|
||||||
|
// 重命名
|
||||||
|
$filename = time() . str_random(6) . "." . $ext;
|
||||||
|
Storage::putFile($filename,$file);
|
||||||
|
if ($file[$i]->move("uploads/images", $filename)) {
|
||||||
|
$newFileName = '/' . "uploads/images" . '/' . $filename;
|
||||||
|
$m = $m + 1;
|
||||||
|
// return response()->json(['ResultData' => 0, 'info' => '上传成功', 'newFileName' => $newFileName ]);
|
||||||
|
} else {
|
||||||
|
$k = $k + 1;
|
||||||
|
// return response()->json(['ResultData' => 4, 'info' => '上传失败']);
|
||||||
|
}
|
||||||
|
$msg = $m . "张图片上传成功 " . $k . "张图片上传失败<br>";
|
||||||
|
$return[] = ['ResultData' => 0, 'info' => $msg, 'newFileName' => $newFileName];
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 3, 'info' => '第' . $n . '张图片后缀名不合法!<br/>' . '只支持jpeg/jpg/png/gif格式']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 1, 'info' => '第' . $n . '张图片超过最大限制!<br/>' . '图片最大支持2M']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return response()->json(['ResultData' => 5, 'info' => '请选择文件']);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,132 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Grid;
|
||||||
|
use Encore\Admin\Facades\Admin;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Encore\Admin\Controllers\ModelForm;
|
||||||
|
use Encore\Admin\Widgets\Table;
|
||||||
|
use App\User; // 引入模型
|
||||||
|
use Encore\Admin\Widgets\Tab;
|
||||||
|
class UsersController extends Controller
|
||||||
|
{
|
||||||
|
use ModelForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('用户管理');
|
||||||
|
$content->description('用户列表');
|
||||||
|
|
||||||
|
$content->body($this->grid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit interface.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) use ($id) {
|
||||||
|
|
||||||
|
$content->header('用户的编辑');
|
||||||
|
$content->description('用户的编辑');
|
||||||
|
|
||||||
|
$content->body($this->form()->edit($id));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create interface.
|
||||||
|
*
|
||||||
|
* @return Content
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return Admin::content(function (Content $content) {
|
||||||
|
|
||||||
|
$content->header('用户添加');
|
||||||
|
$content->description('用户添加');
|
||||||
|
|
||||||
|
$content->body($this->form());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a grid builder.
|
||||||
|
*
|
||||||
|
* @return Grid
|
||||||
|
*/
|
||||||
|
protected function grid()
|
||||||
|
{
|
||||||
|
return Admin::grid(User::class, function (Grid $grid) {
|
||||||
|
$grid->id('ID')->sortable();
|
||||||
|
$grid->avatar('用户头像')->image('',50, 50);
|
||||||
|
$grid->column('name','用户名')->editable();
|
||||||
|
$grid->column('mobile','用户手机号')->label('primary');
|
||||||
|
$grid->column('nickname','用户微信昵称');
|
||||||
|
// 设置text、color、和存储值
|
||||||
|
$states = [
|
||||||
|
'on' => ['value' => 2, 'text' => '配送员', 'color' => 'primary'],
|
||||||
|
'off' => ['value' => 1, 'text' => '普通会员', 'color' => 'default'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$grid->role('用户状态')->switch($states);
|
||||||
|
$grid->column('login_ip','最近登陆ip');
|
||||||
|
$grid->column('login_time','最近登陆时间');
|
||||||
|
|
||||||
|
|
||||||
|
// 搜索功能
|
||||||
|
$grid->filter(function($filter){
|
||||||
|
// 如果过滤器太多,可以使用弹出模态框来显示过滤器.
|
||||||
|
// $filter->useModal();
|
||||||
|
|
||||||
|
// 禁用id查询框
|
||||||
|
$filter->disableIdFilter();
|
||||||
|
|
||||||
|
// sql: ... WHERE `user.name` LIKE "%$name%";
|
||||||
|
$filter->like('name', '用户名');
|
||||||
|
|
||||||
|
// sql: ... WHERE `user.email` = $email;
|
||||||
|
$filter->is('mobile', '用户手机号');
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
$grid->disableExport();// 禁用导出
|
||||||
|
$grid->disableCreation();// 禁用新增
|
||||||
|
$grid->disableBatchDeletion();// 禁用批量删除
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a form builder.
|
||||||
|
*
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
protected function form()
|
||||||
|
{
|
||||||
|
return Admin::form(User::class, function (Form $form) {
|
||||||
|
$form->text('name', '用户名');
|
||||||
|
$form->mobile('mobile','用户手机号');
|
||||||
|
$states = [
|
||||||
|
'on' => ['value' => 2, 'text' => '配送员', 'color' => 'success'],
|
||||||
|
'off' => ['value' => 1, 'text' => '普通会员', 'color' => 'default'],
|
||||||
|
];
|
||||||
|
//$form->password('password', '用户密码')->help('修改用户密码');
|
||||||
|
$form->switch('role', '用户状态')->states($states);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Column;
|
||||||
|
|
||||||
|
use Encore\Admin\Admin;
|
||||||
|
use Encore\Admin\Grid\Displayers\AbstractDisplayer;
|
||||||
|
|
||||||
|
class ExpandRow extends AbstractDisplayer
|
||||||
|
{
|
||||||
|
public function display(\Closure $callback = null, $btn = '')
|
||||||
|
{
|
||||||
|
$callback = $callback->bindTo($this->row);
|
||||||
|
|
||||||
|
$html = call_user_func($callback);
|
||||||
|
|
||||||
|
$script = <<<EOT
|
||||||
|
|
||||||
|
$('.grid-expand').on('click', function () {
|
||||||
|
if ($(this).data('inserted') == '0') {
|
||||||
|
var key = $(this).data('key');
|
||||||
|
var row = $(this).closest('tr');
|
||||||
|
var html = $('template.grid-expand-'+key).html();
|
||||||
|
|
||||||
|
row.after("<tr><td colspan='"+row.find('td').length+"' style='padding:0 !important; border:0px;'>"+html+"</td></tr>");
|
||||||
|
|
||||||
|
$(this).data('inserted', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$("i", this).toggleClass("fa-caret-right fa-caret-down");
|
||||||
|
});
|
||||||
|
EOT;
|
||||||
|
Admin::script($script);
|
||||||
|
|
||||||
|
$btn = $btn ?: $this->column->getName();
|
||||||
|
|
||||||
|
$key = $this->getKey();
|
||||||
|
|
||||||
|
return <<<EOT
|
||||||
|
<a class="btn btn-xs btn-default grid-expand" data-inserted="0" data-key="{$key}" data-toggle="collapse" data-target="#grid-collapse-{$key}">
|
||||||
|
<i class="fa fa-caret-right"></i> $btn
|
||||||
|
</a>
|
||||||
|
<template class="grid-expand-{$key}">
|
||||||
|
<div id="grid-collapse-{$key}" class="collapse">$html</div>
|
||||||
|
</template>
|
||||||
|
EOT;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class AddSpecification extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin.add-specification';
|
||||||
|
|
||||||
|
protected static $css = [
|
||||||
|
'/vendor/wangEditor-3.1.1/release/wangEditor.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'/vendor/wangEditor-3.1.1/release/wangEditor.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$name = $this->formatName($this->column);
|
||||||
|
|
||||||
|
$this->script = <<<EOT
|
||||||
|
|
||||||
|
var E = window.wangEditor
|
||||||
|
var editor = new E('#{$this->id}');
|
||||||
|
editor.customConfig.zIndex = 0
|
||||||
|
editor.customConfig.uploadImgShowBase64 = true
|
||||||
|
editor.customConfig.onchange = function (html) {
|
||||||
|
$('input[name=$name]').val(html);
|
||||||
|
}
|
||||||
|
editor.create()
|
||||||
|
|
||||||
|
EOT;
|
||||||
|
return parent::render();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class CKEditor extends Field
|
||||||
|
{
|
||||||
|
public static $js = [
|
||||||
|
'/packages/ckeditor/ckeditor.js',
|
||||||
|
'/packages/ckeditor/adapters/jquery.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $view = 'admin.ckeditor';
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->script = "$('textarea.{$this->getElementClass()}').ckeditor();";
|
||||||
|
|
||||||
|
return parent::render();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class MarkdownEditor extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin::form.editor';
|
||||||
|
|
||||||
|
protected static $css = [
|
||||||
|
'/packages/bootstrap-markdown-editor/dist/css/bootstrap-markdown-editor.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'//cdnjs.cloudflare.com/ajax/libs/ace/1.1.3/ace.js',
|
||||||
|
'//cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js',
|
||||||
|
'/packages/bootstrap-markdown-editor/dist/js/bootstrap-markdown-editor.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->script = <<<EOT
|
||||||
|
|
||||||
|
$('#$this->id').markdownEditor({
|
||||||
|
preview: true,
|
||||||
|
onPreview: function (content, callback) {
|
||||||
|
callback( marked(content) );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
EOT;
|
||||||
|
|
||||||
|
return parent::render();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class MyMap extends Field
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Column name.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $column = [];
|
||||||
|
|
||||||
|
protected $view = 'admin.form.mymap';
|
||||||
|
|
||||||
|
protected $addressInput;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get assets required by this field.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getAssets()
|
||||||
|
{
|
||||||
|
if (config('app.locale') == 'zh-CN') {
|
||||||
|
$js = '//map.qq.com/api/js?v=2.exp';
|
||||||
|
} else {
|
||||||
|
$js = '//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key='.env('GOOGLE_API_KEY');
|
||||||
|
}
|
||||||
|
|
||||||
|
return compact('js');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __construct($column, $arguments)
|
||||||
|
{
|
||||||
|
$this->column['lat'] = $column;
|
||||||
|
$this->column['lng'] = $arguments[0];
|
||||||
|
|
||||||
|
$this->addressInput = $arguments[2] ?? 'myAddress';
|
||||||
|
|
||||||
|
array_shift($arguments);
|
||||||
|
|
||||||
|
$this->label = $this->formatLabel($arguments);
|
||||||
|
$this->id = $this->formatId($this->column);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Google map is blocked in mainland China
|
||||||
|
* people in China can use Tencent map instead(;
|
||||||
|
*/
|
||||||
|
if (config('app.locale') == 'zh-CN') {
|
||||||
|
$this->useTencentMap();
|
||||||
|
} else {
|
||||||
|
$this->useGoogleMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function useGoogleMap()
|
||||||
|
{
|
||||||
|
$this->script = <<<EOT
|
||||||
|
function initGoogleMap(name) {
|
||||||
|
var lat = $('#{$this->id['lat']}');
|
||||||
|
var lng = $('#{$this->id['lng']}');
|
||||||
|
|
||||||
|
var LatLng = new google.maps.LatLng(lat.val(), lng.val());
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
zoom: 13,
|
||||||
|
center: LatLng,
|
||||||
|
panControl: false,
|
||||||
|
zoomControl: true,
|
||||||
|
scaleControl: true,
|
||||||
|
mapTypeId: google.maps.MapTypeId.ROADMAP
|
||||||
|
}
|
||||||
|
|
||||||
|
var container = document.getElementById("map_"+name);
|
||||||
|
var map = new google.maps.Map(container, options);
|
||||||
|
|
||||||
|
var marker = new google.maps.Marker({
|
||||||
|
position: LatLng,
|
||||||
|
map: map,
|
||||||
|
title: 'Drag Me!',
|
||||||
|
draggable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
google.maps.event.addListener(marker, 'dragend', function (event) {
|
||||||
|
lat.val(event.latLng.lat());
|
||||||
|
lng.val(event.latLng.lng());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
initGoogleMap('{$this->id['lat']}{$this->id['lng']}');
|
||||||
|
EOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function useTencentMap()
|
||||||
|
{
|
||||||
|
$this->script = <<<EOT
|
||||||
|
function initTencentMap(name) {
|
||||||
|
var lat = $('#{$this->id['lat']}');
|
||||||
|
var lng = $('#{$this->id['lng']}');
|
||||||
|
|
||||||
|
var inputAddress = $('#{$this->addressInput}');
|
||||||
|
|
||||||
|
|
||||||
|
var center = new qq.maps.LatLng(lat.val(), lng.val());
|
||||||
|
|
||||||
|
var container = document.getElementById("map_"+name);
|
||||||
|
var map = new qq.maps.Map(container, {
|
||||||
|
center: center,
|
||||||
|
zoom: 13
|
||||||
|
});
|
||||||
|
|
||||||
|
var marker = new qq.maps.Marker({
|
||||||
|
position: center,
|
||||||
|
draggable: true,
|
||||||
|
map: map
|
||||||
|
});
|
||||||
|
|
||||||
|
if( ! lat.val() || ! lng.val()) {
|
||||||
|
var citylocation = new qq.maps.CityService({
|
||||||
|
complete : function(result){
|
||||||
|
map.setCenter(result.detail.latLng);
|
||||||
|
marker.setPosition(result.detail.latLng);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
citylocation.searchLocalCity();
|
||||||
|
}
|
||||||
|
|
||||||
|
qq.maps.event.addListener(map, 'click', function(event) {
|
||||||
|
marker.setPosition(event.latLng);
|
||||||
|
});
|
||||||
|
|
||||||
|
qq.maps.event.addListener(marker, 'position_changed', function(event) {
|
||||||
|
var position = marker.getPosition();
|
||||||
|
lat.val(position.getLat());
|
||||||
|
lng.val(position.getLng());
|
||||||
|
});
|
||||||
|
|
||||||
|
var callbacks={
|
||||||
|
complete:function(results){
|
||||||
|
map.setCenter(results.detail.location);
|
||||||
|
marker.setPosition(results.detail.location);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var geocoder = new qq.maps.Geocoder(callbacks);
|
||||||
|
|
||||||
|
|
||||||
|
inputAddress.change(function () {
|
||||||
|
geocoder.getLocation($(this).val());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
initTencentMap('{$this->id['lat']}{$this->id['lng']}');
|
||||||
|
EOT;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class PHPEditor extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin::form.editor';
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'/packages/codemirror-5.20.2/lib/codemirror.js',
|
||||||
|
'/packages/codemirror-5.20.2/addon/edit/matchbrackets.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/htmlmixed/htmlmixed.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/xml/xml.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/javascript/javascript.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/css/css.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/clike/clike.js',
|
||||||
|
'/packages/codemirror-5.20.2/mode/php/php.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $css = [
|
||||||
|
'/packages/codemirror-5.20.2/lib/codemirror.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->script = <<<EOT
|
||||||
|
|
||||||
|
CodeMirror.fromTextArea(document.getElementById("{$this->id}"), {
|
||||||
|
lineNumbers: true,
|
||||||
|
mode: "text/x-php",
|
||||||
|
extraKeys: {
|
||||||
|
"Tab": function(cm){
|
||||||
|
cm.replaceSelection(" " , "end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
EOT;
|
||||||
|
return parent::render();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions\Form;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class WangEditor extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin.wang-editor';
|
||||||
|
|
||||||
|
protected static $css = [
|
||||||
|
'/vendor/wangEditor-3.1.1/release/wangEditor.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'/vendor/wangEditor-3.1.1/release/wangEditor.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$name = $this->formatName($this->column);
|
||||||
|
$uploadUrl = route('admin-up');
|
||||||
|
$this->script = <<<EOT
|
||||||
|
|
||||||
|
var E = window.wangEditor
|
||||||
|
var editor = new E('#{$this->id}');
|
||||||
|
editor.customConfig.uploadFileName = 'mypic[]';
|
||||||
|
editor.customConfig.uploadImgHeaders = {
|
||||||
|
'X-CSRF-TOKEN': $('input[name="_token"]').val()
|
||||||
|
}
|
||||||
|
editor.customConfig.zIndex = 0;
|
||||||
|
// 上传路径
|
||||||
|
editor.customConfig.uploadImgServer = '{$uploadUrl}';
|
||||||
|
editor.customConfig.onchange = function (html) {
|
||||||
|
$('input[name=$name]').val(html);
|
||||||
|
}
|
||||||
|
editor.customConfig.uploadImgHooks = {
|
||||||
|
customInsert: function (insertImg, result, editor) {
|
||||||
|
if (typeof(result.length) != "undefined") {
|
||||||
|
for (var i = 0; i <= result.length - 1; i++) {
|
||||||
|
var j = i;
|
||||||
|
var url = result[i].newFileName;
|
||||||
|
insertImg(url);
|
||||||
|
}
|
||||||
|
toastr.success(result[j]['info']);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (result['ResultData']) {
|
||||||
|
case 6:
|
||||||
|
toastr.error("最多可以上传4张图片");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
toastr.error("请选择一个文件");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
toastr.error("上传失败");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
toastr.error(result['info']);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
toastr.error("文件类型不合法");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
toastr.error(result['info']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
editor.create()
|
||||||
|
|
||||||
|
EOT;
|
||||||
|
return parent::render();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Extensions;
|
||||||
|
|
||||||
|
use Encore\Admin\Form\Field;
|
||||||
|
|
||||||
|
class WangEditor extends Field
|
||||||
|
{
|
||||||
|
protected $view = 'admin::form.editor';
|
||||||
|
|
||||||
|
protected static $css = [
|
||||||
|
'/packages/wangEditor-2.1.23/dist/css/wangEditor.min.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $js = [
|
||||||
|
'/packages/wangEditor-2.1.23/dist/js/wangEditor.min.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->script = <<<EOT
|
||||||
|
|
||||||
|
var editor = new wangEditor('{$this->id}');
|
||||||
|
editor.create();
|
||||||
|
|
||||||
|
EOT;
|
||||||
|
return parent::render();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Laravel-admin - admin builder based on Laravel.
|
||||||
|
* @author z-song <https://github.com/z-song>
|
||||||
|
*
|
||||||
|
* Bootstraper for Admin.
|
||||||
|
*
|
||||||
|
* Here you can remove builtin form field:
|
||||||
|
* Encore\Admin\Form::forget(['map', 'editor']);
|
||||||
|
*
|
||||||
|
* Or extend custom form field:
|
||||||
|
* Encore\Admin\Form::extend('php', PHPEditor::class);
|
||||||
|
*
|
||||||
|
* Or require js and css assets:
|
||||||
|
* Admin::css('/packages/prettydocs/css/styles.css');
|
||||||
|
* Admin::js('/packages/prettydocs/js/main.js');
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
// sqc添加
|
||||||
|
use App\Admin\Extensions\Column\ExpandRow;
|
||||||
|
use Encore\Admin\Grid\Column;
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use App\Admin\Extensions\Form\WangEditor;
|
||||||
|
use App\Admin\Extensions\Form\AddSpecification;
|
||||||
|
Column::extend('expand', ExpandRow::class);
|
||||||
|
Form::forget(['map', 'editor']);
|
||||||
|
Form::extend('editor', WangEditor::class);
|
||||||
|
Form::extend('addSpecification', AddSpecification::class);
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Routing\Router;
|
||||||
|
|
||||||
|
Admin::registerAuthRoutes();
|
||||||
|
|
||||||
|
Route::group([
|
||||||
|
'prefix' => config('admin.route.prefix'),
|
||||||
|
'namespace' => config('admin.route.namespace'),
|
||||||
|
'middleware' => config('admin.route.middleware'),
|
||||||
|
], function (Router $router) {
|
||||||
|
|
||||||
|
$router->get('/', 'HomeController@index');
|
||||||
|
|
||||||
|
//轮播图管理
|
||||||
|
$router->resource('carousel', CarouselController::class);
|
||||||
|
//专题管理
|
||||||
|
$router->resource('special', SpecialController::class);
|
||||||
|
//商品管理
|
||||||
|
$router->resource('goods', GoodController::class);
|
||||||
|
//商品分类管理
|
||||||
|
$router->resource('classes', ClassController::class);
|
||||||
|
|
||||||
|
// 前台用户管理
|
||||||
|
$router->resource('User', UsersController::class);
|
||||||
|
|
||||||
|
//新闻管理
|
||||||
|
$router->resource('News', NewsController::class);
|
||||||
|
|
||||||
|
//前端用户管理
|
||||||
|
// $router->resource('front-users', FrontEndUserController::class);
|
||||||
|
|
||||||
|
// 项目类型管理
|
||||||
|
$router->resource('project-type', ProjectTypeController::class);
|
||||||
|
|
||||||
|
// 项目功能分类管理
|
||||||
|
$router->resource('project-func-type', ProjectFuncTypeController::class);
|
||||||
|
|
||||||
|
// 功能模块管理
|
||||||
|
$router->resource('project-model', ProjectModelController::class);
|
||||||
|
|
||||||
|
// 功能点管理
|
||||||
|
$router->resource('project-dot', ProjectFuncDotController::class);
|
||||||
|
|
||||||
|
// 品牌管理
|
||||||
|
$router->resource('shop-brand', BrandController::class);
|
||||||
|
|
||||||
|
|
||||||
|
Route::post('uploadFile', 'UploadController@uploadImg')->name('admin-up');
|
||||||
|
|
||||||
|
/********* shop相关********/
|
||||||
|
Route::group(['namespace' => 'Shop'], function (Router $router) {
|
||||||
|
// 商品分类管理
|
||||||
|
$router->resource('shop-category', ShopCategoryController::class);
|
||||||
|
// 规格管理
|
||||||
|
$router->resource('shop-specification', ShopSpecificationController::class);
|
||||||
|
|
||||||
|
// 属性分类管理
|
||||||
|
$router->resource('shop-attribute-category', ShopAttributeCategoryController::class);
|
||||||
|
// 属性管理
|
||||||
|
$router->resource('shop-attribute', ShopAttributeController::class);
|
||||||
|
|
||||||
|
// 商品管理
|
||||||
|
$router->resource('shop-goods', ShopGoodsController::class);
|
||||||
|
// 主题&专题管理
|
||||||
|
$router->resource('shop-topics', ShopTopicController::class);
|
||||||
|
// 商城订单管理
|
||||||
|
$router->resource('shop-order', ShopOrderController::class);
|
||||||
|
// 用户反馈
|
||||||
|
$router->resource('shop-feedback', FeedbackController::class);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\Order;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class AutoCompleteOrder extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'order:autocomplete';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Command description';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Carbon::setToStringFormat('Y-m-d');
|
||||||
|
|
||||||
|
$inSchoolTime = Carbon::now()->subDays(5);
|
||||||
|
$outSchoolTime = Carbon::now()->subDays(10);
|
||||||
|
DB::table('order')
|
||||||
|
->where([
|
||||||
|
['status', '=', Order::STATUS_DELIVERING],
|
||||||
|
['sid', '<>', 0 ],
|
||||||
|
])
|
||||||
|
->whereDate('updated_at', '<=', $inSchoolTime)
|
||||||
|
->update(['status' => Order::STATUS_COMPLETED]);
|
||||||
|
|
||||||
|
DB::table('order')
|
||||||
|
->where([
|
||||||
|
['status', '=', Order::STATUS_DELIVERING],
|
||||||
|
['sid', '=', 0 ],
|
||||||
|
])
|
||||||
|
->whereDate('updated_at', '<=', $outSchoolTime)
|
||||||
|
->update(['status' => Order::STATUS_COMPLETED]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
class MiniInstall extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'mini:install';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Install MiniShop';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$this->call('admin:install');
|
||||||
|
$this->call('migrate');
|
||||||
|
$this->call('db:seed');
|
||||||
|
$this->call('passport:install');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console;
|
||||||
|
|
||||||
|
use Illuminate\Console\Scheduling\Schedule;
|
||||||
|
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||||
|
|
||||||
|
class Kernel extends ConsoleKernel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The Artisan commands provided by your application.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $commands = [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the application's command schedule.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function schedule(Schedule $schedule)
|
||||||
|
{
|
||||||
|
// $schedule->command('inspire')
|
||||||
|
// ->hourly();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the commands for the application.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function commands()
|
||||||
|
{
|
||||||
|
$this->load(__DIR__.'/Commands');
|
||||||
|
|
||||||
|
require base_path('routes/console.php');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
|
|
||||||
|
class Handler extends ExceptionHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A list of the exception types that are not reported.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $dontReport = [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of the inputs that are never flashed for validation exceptions.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $dontFlash = [
|
||||||
|
'password',
|
||||||
|
'password_confirmation',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report or log an exception.
|
||||||
|
*
|
||||||
|
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
|
||||||
|
*
|
||||||
|
* @param \Exception $exception
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function report(Exception $exception)
|
||||||
|
{
|
||||||
|
parent::report($exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render an exception into an HTTP response.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Exception $exception
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function render($request, Exception $exception)
|
||||||
|
{
|
||||||
|
return parent::render($request, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,135 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Helpers\Api;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Response as FoundationResponse;
|
||||||
|
use Response;
|
||||||
|
|
||||||
|
//
|
||||||
|
trait ApiResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
protected $statusCode = FoundationResponse::HTTP_OK;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getStatusCode()
|
||||||
|
{
|
||||||
|
return $this->statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $statusCode
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setStatusCode($statusCode)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->statusCode = $statusCode;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $data
|
||||||
|
* @param array $header
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function respond($data, $header = [])
|
||||||
|
{
|
||||||
|
|
||||||
|
return Response::json($data, $this->getStatusCode(), $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $status
|
||||||
|
* @param array $data
|
||||||
|
* @param null $code
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function status($status, array $data, $code = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($code) {
|
||||||
|
$this->setStatusCode($code);
|
||||||
|
}
|
||||||
|
|
||||||
|
$status = [
|
||||||
|
'status' => $status,
|
||||||
|
'code' => $this->statusCode
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = array_merge($status, $data);
|
||||||
|
return $this->respond($data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $message
|
||||||
|
* @param int $code
|
||||||
|
* @param string $status
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function failed($message, $code = FoundationResponse::HTTP_BAD_REQUEST, $status = 'error')
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->setStatusCode($code)->message($message, $status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $message
|
||||||
|
* @param string $status
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function message($message, $status = "success")
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->status($status, [
|
||||||
|
'message' => $message
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function internalError($message = "Internal Error!")
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->failed($message, FoundationResponse::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function created($message = "created")
|
||||||
|
{
|
||||||
|
return $this->setStatusCode(FoundationResponse::HTTP_CREATED)
|
||||||
|
->message($message);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $data
|
||||||
|
* @param string $status
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function success($data, $status = "success")
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->status($status, compact('data'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function notFond($message = 'Not Fond!')
|
||||||
|
{
|
||||||
|
return $this->failed($message, Foundationresponse::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,218 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* Date: 2018/3/7
|
||||||
|
* Time: 11:28
|
||||||
|
*/
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Requests;
|
||||||
|
use App\Models\Address;
|
||||||
|
use App\Models\Addrjson;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
|
||||||
|
class AddressesController extends ApiController
|
||||||
|
{
|
||||||
|
// 新增校外收货地区信息
|
||||||
|
public function outsideCreate(Request $request)
|
||||||
|
{
|
||||||
|
// 表单验证
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'provinceId' => 'required|max:10',
|
||||||
|
'cityId' => 'required|max:10',
|
||||||
|
'linkMan' => 'required|max:10',
|
||||||
|
'address' => 'required',
|
||||||
|
'mobile' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'provinceId.required' => '省市参数缺失',
|
||||||
|
'cityId.required' => '城市参数缺失',
|
||||||
|
'linkMan.required' => '收件人参数缺失',
|
||||||
|
'address.required' => '详细地址参数缺失',
|
||||||
|
'mobile.required' => '收货人手机号参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
// 这里后面加上valicate验证
|
||||||
|
if ($request->input('id')) {
|
||||||
|
// 编辑
|
||||||
|
$Addresses = Address::find($request->input('id'));
|
||||||
|
} else {
|
||||||
|
$Addresses = new Address;
|
||||||
|
}
|
||||||
|
$Addresses->uid = \Auth::user()->id;
|
||||||
|
$Addresses->aid_p = $request->input('provinceId');
|
||||||
|
$Addresses->aid_c = $request->input('cityId');
|
||||||
|
$Addresses->aid_a = $request->input('districtId') ? $request->input('districtId') : 0;
|
||||||
|
$Addresses->province = Addrjson::find(intval($request->input('provinceId')))->area_name;
|
||||||
|
$Addresses->city = Addrjson::find(intval($request->input('cityId')))->area_name;
|
||||||
|
if (intval($request->input('districtId'))) {
|
||||||
|
$Addresses->area = Addrjson::find(intval($request->input('districtId')))->area_name;
|
||||||
|
}
|
||||||
|
$Addresses->postcode = $request->input('code', '');
|
||||||
|
$Addresses->addr = $request->input('address', '');
|
||||||
|
$Addresses->true_name = $request->input('linkMan');
|
||||||
|
$Addresses->mobile = $request->input('mobile');
|
||||||
|
$Addresses->status = 1;
|
||||||
|
$Addresses->is_default = $request->input('isDefault') ? 1 : 0;
|
||||||
|
$Addresses->save();
|
||||||
|
if ($Addresses->id) {
|
||||||
|
DB::table('addresses')
|
||||||
|
->where([
|
||||||
|
['uid' , \Auth::user()->id],
|
||||||
|
['id', '!=', $Addresses->id],
|
||||||
|
])
|
||||||
|
->update(['is_default' => 0]);
|
||||||
|
return $this->message('操作成功');
|
||||||
|
};
|
||||||
|
return $this->failed('操作失败', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
//校内地址添加和修改
|
||||||
|
public function insideCreate(Request $request)
|
||||||
|
{
|
||||||
|
// 表单验证
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'linkMan' => 'required|max:10',
|
||||||
|
'mobile' => 'required',
|
||||||
|
'schoolID' => 'required|max:10',
|
||||||
|
'schoolName' => 'required|max:30',
|
||||||
|
'dormName' => 'required|max:30',
|
||||||
|
'dormID' => 'required|max:10',
|
||||||
|
'address' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'linkMan.required' => '收件人参数缺失',
|
||||||
|
'mobile.required' => '收货人手机号参数缺失',
|
||||||
|
'schoolID.required' => '学校ID参数缺失',
|
||||||
|
'schoolName.required' => '学校名参数缺失',
|
||||||
|
'dormName.required' => '宿舍楼参数缺失',
|
||||||
|
'dormID.required' => '宿舍楼ID参数缺失',
|
||||||
|
'address.required' => '宿舍号参数缺失',
|
||||||
|
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
// 这里后面加上valicate验证
|
||||||
|
if ($request->input('id')) {
|
||||||
|
// 编辑
|
||||||
|
$addresses = Address::find($request->input('id'));
|
||||||
|
} else {
|
||||||
|
$addresses = new Address;
|
||||||
|
}
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
$schoolName = $request->input('schoolName');
|
||||||
|
$dormName = $request->input('dormName');
|
||||||
|
$addr = $schoolName.' '.$dormName.' '.$request->input('address', '');
|
||||||
|
|
||||||
|
$addresses->uid = $userID;
|
||||||
|
$addresses->sid = $request->input('schoolID');
|
||||||
|
$addresses->did = $request->input('dormID');
|
||||||
|
$addresses->school_name = $schoolName;
|
||||||
|
$addresses->dorm_name = $dormName;
|
||||||
|
$addresses->addr = $addr;
|
||||||
|
$addresses->true_name = $request->input('linkMan');
|
||||||
|
$addresses->mobile = $request->input('mobile');
|
||||||
|
$addresses->is_default = $request->input('isDefault') ? Address::ISDEFAULT_YES : Address::ISDEFAULT_NO;
|
||||||
|
$addresses->status = Address::STATE_VALID;
|
||||||
|
|
||||||
|
if ($addresses->save()) {
|
||||||
|
DB::table('addresses')
|
||||||
|
->where([
|
||||||
|
['uid' , $userID],
|
||||||
|
['id', '!=', $addresses->id],
|
||||||
|
])
|
||||||
|
->update(['is_default' => Address::ISDEFAULT_NO]);
|
||||||
|
return $this->message('操作成功');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->failed('操作失败', 402);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新默认地址
|
||||||
|
* @param Request $request
|
||||||
|
*/
|
||||||
|
public function updateDefault(Request $request){
|
||||||
|
if($request->input('id')){
|
||||||
|
$Addresses = Address::find($request->input('id'));
|
||||||
|
$Addresses->is_default = $request->input('isDefault') ? 1 : 0;
|
||||||
|
if($Addresses->save()){
|
||||||
|
DB::table('addresses')
|
||||||
|
->where([
|
||||||
|
['uid' , \Auth::user()->id],
|
||||||
|
['id', '!=', $Addresses->id],
|
||||||
|
])
|
||||||
|
->update(['is_default' => 0]);
|
||||||
|
return $this->message('操作成功');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->failed('操作失败', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
* @param Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
|
public function destroy(Request $request){
|
||||||
|
|
||||||
|
if($request->input('id') && Address::destroy($request->input('id'))){
|
||||||
|
return $this->message('操作成功');
|
||||||
|
}
|
||||||
|
return $this->failed('操作失败', 401);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取收货地址列表
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getList(Request $request)
|
||||||
|
{
|
||||||
|
$where = [
|
||||||
|
'uid' => \Auth::user()->id,
|
||||||
|
];
|
||||||
|
$AddressList = Address::getAddrList($where);
|
||||||
|
if ($AddressList) {
|
||||||
|
return $this->success($AddressList);
|
||||||
|
}
|
||||||
|
return $this->failed('没有数据', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDetail(Request $request){
|
||||||
|
$address = Address::getAddr([
|
||||||
|
['uid', '=', \Auth::user()->id],
|
||||||
|
['id',$request->id]
|
||||||
|
]);
|
||||||
|
if ($address) {
|
||||||
|
return $this->success($address);
|
||||||
|
}
|
||||||
|
return $this->failed('没有数据', 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认地址
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function defaultAddr()
|
||||||
|
{
|
||||||
|
$defaultAddress = Address::getAddr([
|
||||||
|
['uid', '=', \Auth::user()->id],
|
||||||
|
['is_default',1]
|
||||||
|
]);
|
||||||
|
if ($defaultAddress) {
|
||||||
|
return $this->success($defaultAddress);
|
||||||
|
}
|
||||||
|
return $this->failed('没有数据', 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Addrjson;
|
||||||
|
use App\Models\Dorm;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class AddrjsonbController extends ApiController
|
||||||
|
{
|
||||||
|
public function city(Request $request)
|
||||||
|
{
|
||||||
|
$pid = 0;
|
||||||
|
$where = [];
|
||||||
|
$city = [];
|
||||||
|
if (isset($request->q))
|
||||||
|
{
|
||||||
|
$pid = $request->q;
|
||||||
|
}
|
||||||
|
if ($pid <= 0) return $city;
|
||||||
|
|
||||||
|
$where['area_parent_id'] = $pid;
|
||||||
|
|
||||||
|
$addr = Addrjson::select('area_id','area_name');
|
||||||
|
if (!is_null($where)) $addr = $addr->where($where);
|
||||||
|
$city = $addr->get()->toArray();
|
||||||
|
|
||||||
|
return $city;
|
||||||
|
}
|
||||||
|
public function dorm(Request $request)
|
||||||
|
{
|
||||||
|
$dorms = Dorm::select('id','name')->where('sid',$request->q)->get();
|
||||||
|
return $dorms->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Helpers\Api\ApiResponse;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
|
class ApiController extends Controller
|
||||||
|
{
|
||||||
|
use ApiResponse;
|
||||||
|
// 其他通用的Api帮助函数
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取客户端ip地址
|
||||||
|
* @return string ip地址
|
||||||
|
*/
|
||||||
|
public function getClientIP(){
|
||||||
|
if (getenv("HTTP_CLIENT_IP"))
|
||||||
|
$ip = getenv("HTTP_CLIENT_IP");
|
||||||
|
else if(getenv("HTTP_X_FORWARDED_FOR"))
|
||||||
|
$ip = getenv("HTTP_X_FORWARDED_FOR");
|
||||||
|
else if(getenv("REMOTE_ADDR"))
|
||||||
|
$ip = getenv("REMOTE_ADDR");
|
||||||
|
else $ip = "Unknow";
|
||||||
|
return $ip;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Laravel\Passport\Client;
|
||||||
|
use Socialite;
|
||||||
|
use GuzzleHttp\Client as HttpClient;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Validator;
|
||||||
|
use EasyWeChat\Factory;
|
||||||
|
|
||||||
|
class AuthenticateController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
use AuthenticatesUsers;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('auth:api')->only([
|
||||||
|
'logout'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function username()
|
||||||
|
{
|
||||||
|
return 'openid';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function easyWechatGetSession($code)
|
||||||
|
{
|
||||||
|
$config = config('wechat.mini_program.default');
|
||||||
|
$app = Factory::miniProgram($config);
|
||||||
|
return $app->auth->session($code);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理小程序的自动登陆和注册
|
||||||
|
* @param $oauth
|
||||||
|
*/
|
||||||
|
public function auto_login(Request $request)
|
||||||
|
{
|
||||||
|
// 获取openid
|
||||||
|
if ($request->code) {
|
||||||
|
$wx_info = $this->easyWechatGetSession($request->code);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$request->openid && empty($wx_info['openid'])) {
|
||||||
|
return $this->failed('用户openid没有获取到', 401);
|
||||||
|
}
|
||||||
|
$openid = empty($wx_info['openid'])?$request->openid:$wx_info['openid'];
|
||||||
|
$userInfo = User::where('openid', $openid)->first();
|
||||||
|
if ($userInfo && $userInfo->toArray()) {
|
||||||
|
//执行登录
|
||||||
|
$userInfo->login_ip = $this->getClientIP();
|
||||||
|
$userInfo->login_time = Carbon::now();
|
||||||
|
$userInfo->save();
|
||||||
|
// 直接创建token
|
||||||
|
$token = $userInfo->createToken($openid)->accessToken;
|
||||||
|
return $this->success(compact('token','userInfo'));
|
||||||
|
} else {
|
||||||
|
//执行注册
|
||||||
|
return $this->register($request,$openid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 用户注册
|
||||||
|
* @param Request $request
|
||||||
|
*/
|
||||||
|
public function register($request,$openid)
|
||||||
|
{
|
||||||
|
// 进行基本验证
|
||||||
|
$user_info = \GuzzleHttp\json_decode($request->input('rawData'),true);
|
||||||
|
//注册信息 字段名=》get到的值
|
||||||
|
$newUser = [
|
||||||
|
'openid' => $openid, //openid
|
||||||
|
'nickname' => $user_info['nickName'],// 昵称
|
||||||
|
'email' => time().'sqc157400661@163.com',// 邮箱
|
||||||
|
'name' => $user_info['nickName'],// 昵称
|
||||||
|
'avatar' =>$user_info['avatarUrl'], //头像
|
||||||
|
'unionid' => '', // unionid (可空)
|
||||||
|
'state' => 1,
|
||||||
|
'role' => 0,
|
||||||
|
'password' => bcrypt('sqcweida'),
|
||||||
|
'login_ip' => $this->getClientIP(),
|
||||||
|
'login_time' => Carbon::now()
|
||||||
|
];
|
||||||
|
//dd($newUser);
|
||||||
|
$userInfo = User::create($newUser);
|
||||||
|
// 直接创建token
|
||||||
|
$token = $userInfo->createToken($openid)->accessToken;
|
||||||
|
return $this->success(compact('token','userInfo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function sendFailedLoginResponse(Request $request)
|
||||||
|
{
|
||||||
|
$msg = $request['errors'];
|
||||||
|
$code = $request['code'];
|
||||||
|
return $this->setStatusCode($code)->failed($msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Validator;
|
||||||
|
use App\Logic\GoodsLogic;
|
||||||
|
use App\Models\Good;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
|
||||||
|
class GoodsController extends ApiController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 获取商品列表信息
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$where[] = ['goods_state','=',1];
|
||||||
|
if ($request->input('categoryId')) {
|
||||||
|
$where[] = ['class_id', '=', $request->input('categoryId')];
|
||||||
|
}
|
||||||
|
if ($request->input('nameLike')) {
|
||||||
|
$where[] = ['goods_name', 'like', "%{$request->input('nameLike')}%"];
|
||||||
|
}
|
||||||
|
return GoodsLogic::getGoodsList($where);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detail(Request $request)
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => 'id is required'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = Good::getGoodInfoByID($request->id);
|
||||||
|
if ($result) {
|
||||||
|
return $result;
|
||||||
|
} else {
|
||||||
|
return $this->failed('This Good is not exists', 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Carousel;
|
||||||
|
use App\Models\Special;
|
||||||
|
use App\Logic\ShopGoodsLogic;
|
||||||
|
use App\Models\ShopTopic;
|
||||||
|
use App\Http\Resources\ShopTopic as ShopTopicResource;
|
||||||
|
|
||||||
|
class IndexController extends ApiController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
// 先获取当前登录的用户信息
|
||||||
|
|
||||||
|
if (empty(\Auth::user())) {
|
||||||
|
return $this->failed('用户未登录', 401);
|
||||||
|
}else{
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$outData = [];
|
||||||
|
// 专题导航信息
|
||||||
|
$outData['specialList'] = Special::getSpecialList();
|
||||||
|
// 首页轮播
|
||||||
|
$outData['carouselInfo'] = Carousel::getCarouselByType(Carousel::BOOTH_TYPE_HOME);
|
||||||
|
|
||||||
|
// 热门
|
||||||
|
$outData['hotGoodsList'] = ShopGoodsLogic::getGoodsList(['is_hot' => 1], 6);
|
||||||
|
|
||||||
|
// 新品
|
||||||
|
$outData['newGoodsList'] = ShopGoodsLogic::getGoodsList(['is_new' => 1], 4);
|
||||||
|
|
||||||
|
// 新品
|
||||||
|
$outData['topicList'] = ShopTopicResource::collection(ShopTopic::getTopicListByPage())->additional(['code' => 200]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Models\ShopCart;
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
use App\Logic\OrderLogic;
|
||||||
|
|
||||||
|
class MyOrderController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// 订单列表
|
||||||
|
public function orderList(Request $request)
|
||||||
|
{
|
||||||
|
// 先获取当前登录的用户信息
|
||||||
|
if (empty(\Auth::user())) {
|
||||||
|
return $this->failed('用户未登录', 401);
|
||||||
|
}
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
$where['uid'] = $user_id;
|
||||||
|
$orderList = $orderLogic->getOrderList($where);
|
||||||
|
return $this->success($orderList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 订单详情
|
||||||
|
public function orderDetail(Request $request)
|
||||||
|
{
|
||||||
|
// 先获取当前登录的用户信息
|
||||||
|
if (empty(\Auth::user())) {
|
||||||
|
return $this->failed('用户未登录', 401);
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderId.required' => '订单id参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
$where['uid'] = $user_id;
|
||||||
|
$where['id'] = $request->orderId;
|
||||||
|
$orderInfo = $orderLogic->getOrderDetail($where);
|
||||||
|
return $this->success($orderInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消订单
|
||||||
|
public function orderCancel(Request $request)
|
||||||
|
{
|
||||||
|
// 先获取当前登录的用户信息
|
||||||
|
if (empty(\Auth::user())) {
|
||||||
|
return $this->failed('用户未登录', 401);
|
||||||
|
}
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderId.required' => '订单id参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 物流详情
|
||||||
|
public function orderExpress(Request $request)
|
||||||
|
{
|
||||||
|
// 先获取当前登录的用户信息
|
||||||
|
if (empty(\Auth::user())) {
|
||||||
|
return $this->failed('用户未登录', 401);
|
||||||
|
}
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: jll
|
||||||
|
* Date: 2018/3/7
|
||||||
|
* Time: 18:28
|
||||||
|
*/
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\News;
|
||||||
|
|
||||||
|
class NewsApiController extends ApiController
|
||||||
|
{
|
||||||
|
//新闻列表
|
||||||
|
public function getList()
|
||||||
|
{
|
||||||
|
$allnews = News::orderBy('created_at','desc')->paginate(6);
|
||||||
|
return $this->success($allnews);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新闻详情信息
|
||||||
|
*/
|
||||||
|
public function show($detail)
|
||||||
|
{
|
||||||
|
$news = News::find($detail);
|
||||||
|
return $this->success($news);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Logics\ProjectControl;
|
||||||
|
use App\Models\ProjectType;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ProjectElementController extends ApiController
|
||||||
|
{
|
||||||
|
// 获取项目类型
|
||||||
|
public function getProjectType(Request $request)
|
||||||
|
{
|
||||||
|
$outData = ProjectControl::getJsonProjectTypes();
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 技术项目模块拼装成商品
|
||||||
|
public function getProjectGoods(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'type_id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type_id.required' => '项目类型参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData['info'] = ProjectType::getProjectInfo(['id' => $request->type_id]);
|
||||||
|
$outData['sku'] = ProjectControl::getJsonProjectGoodsByTypeId($request->type_id);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 技术商品转换成商城商品
|
||||||
|
public function transform(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'type_id' => 'required',
|
||||||
|
'specificationList' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type_id.required' => '项目类型参数缺失',
|
||||||
|
'specificationList.required' => '未选择商品',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = ProjectControl::transform($request->type_id,$request->specificationList);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Logics\ProjectControl;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ProjectJsonController extends ApiController
|
||||||
|
{
|
||||||
|
public function getProjectTypes(Request $request)
|
||||||
|
{
|
||||||
|
return ProjectControl::getJsonForProjectTypes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProjectFuncTypesByTypeId(Request $request)
|
||||||
|
{
|
||||||
|
$pid = 0;
|
||||||
|
$where = [];
|
||||||
|
$data = [];
|
||||||
|
if (isset($request->q))
|
||||||
|
{
|
||||||
|
$pid = $request->q;
|
||||||
|
}
|
||||||
|
if ($pid < 0) return $data;
|
||||||
|
$where = [$pid];
|
||||||
|
$data = ProjectControl::getProjectFuncTypesByOneLevel($where);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProjectModelsByFunctypeId(Request $request)
|
||||||
|
{
|
||||||
|
$pid = 0;
|
||||||
|
$where = [];
|
||||||
|
$data = [];
|
||||||
|
if (isset($request->q))
|
||||||
|
{
|
||||||
|
$pid = $request->q;
|
||||||
|
}
|
||||||
|
if ($pid < 0) return $data;
|
||||||
|
$where = [$pid];
|
||||||
|
$data = ProjectControl::getProjectModelsByOneLevel($where);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
use App\Models\ShopAddress;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class ShopAddressController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
// 收货地址列表
|
||||||
|
public function addressList(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$list = AddressLogic::getAddrList(['uid' => $user_id]);
|
||||||
|
return $this->success($list);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 收货地址详情
|
||||||
|
public function addressDetail(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => 'id参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$info = AddressLogic::getOneAddr($request->id);
|
||||||
|
return $this->success($info);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存收货地址
|
||||||
|
public function addressSave(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
'name' => 'required',
|
||||||
|
'mobile' => 'required',
|
||||||
|
'province_id' => 'required',
|
||||||
|
'city_id' => 'required',
|
||||||
|
'district_id' => 'required',
|
||||||
|
'address' => 'required',
|
||||||
|
'is_default' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => 'id参数缺失',
|
||||||
|
'name.required' => '收货人参数缺失',
|
||||||
|
'mobile.required' => '收货人手机号参数缺失',
|
||||||
|
'province_id.required' => 'province_id参数缺失',
|
||||||
|
'city_id.required' => 'city_id参数缺失',
|
||||||
|
'district_id.required' => 'district_id参数缺失',
|
||||||
|
'address.required' => '详细地址参数缺失',
|
||||||
|
'is_default.required' => 'is_default参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
if ($request->id && $request->id > 0) {
|
||||||
|
$model = ShopAddress::find($request->id);
|
||||||
|
} else {
|
||||||
|
$model = new ShopAddress();
|
||||||
|
}
|
||||||
|
$model->user_name = $request->name;
|
||||||
|
$model->mobile = $request->mobile;
|
||||||
|
$model->uid = $user_id;
|
||||||
|
$model->country_id = 1;
|
||||||
|
$model->country = '中国';
|
||||||
|
$model->province_id = $request->province_id;
|
||||||
|
$model->province = $request->province;
|
||||||
|
$model->city_id = $request->city_id;
|
||||||
|
$model->city = $request->city;
|
||||||
|
$model->district_id = $request->district_id;
|
||||||
|
$model->district = $request->district;
|
||||||
|
$model->address = $request->address;
|
||||||
|
$model->is_default = intval($request->is_default);
|
||||||
|
$model->status = ShopAddress::STATUS_ON;
|
||||||
|
// 开启事务
|
||||||
|
DB::beginTransaction();
|
||||||
|
try {
|
||||||
|
DB::table('shop_address')
|
||||||
|
->where('is_default', ShopAddress::DEFAULT_ON)
|
||||||
|
->update(['is_default' => ShopAddress::DEFAULT_OFF]);
|
||||||
|
$re = $model->save();
|
||||||
|
DB::commit();
|
||||||
|
return $this->message('操作成功');
|
||||||
|
} catch (Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
return $this->failed('报错失败', 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除收货地址
|
||||||
|
public function addressDelete(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => 'id参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$model = ShopAddress::find($request->id);
|
||||||
|
$re = $model->delete();
|
||||||
|
if ($re) {
|
||||||
|
return $this->message('操作成功');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopBrand;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopBrandController extends ApiController
|
||||||
|
{
|
||||||
|
// 获取品牌列表
|
||||||
|
public function getList(Request $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取品牌详情
|
||||||
|
public function getDetail(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = ShopBrand::getDetail(['id'=>$request->id]);;
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,167 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Logic\CartLogic;
|
||||||
|
use App\Models\ShopGoods;
|
||||||
|
use App\Models\ShopCart;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopCartController extends ApiController
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取购物车的数据
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$where = [
|
||||||
|
'uid' =>\Auth::user()->id,
|
||||||
|
];
|
||||||
|
$cartData = CartLogic::getCartList($where);
|
||||||
|
return $this->success($cartData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加商品到购物车
|
||||||
|
public function add(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'goodsId' => 'required',
|
||||||
|
'number' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'goodsId.required' => '商品id参数缺失',
|
||||||
|
'number.required' => '购买数量参数缺失',
|
||||||
|
'number.numeric' => '购买数量需要是数字',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$goodsInfo = ShopGoods::getGoodsDetail(['id'=>$request->goodsId]);
|
||||||
|
$re = CartLogic::addCart($goodsInfo,$request->number);
|
||||||
|
if($re){
|
||||||
|
$goodsCount = ShopCart::getGoodsCount(['uid' => $user_id]);
|
||||||
|
return $this->success(['goodsCount'=>$goodsCount]);
|
||||||
|
}
|
||||||
|
return $this->failed('购物车添加失败', 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新购物车的商品
|
||||||
|
public function update(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
'number' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '商品id参数缺失',
|
||||||
|
'number.required' => '参数缺失',
|
||||||
|
'number.numeric' => '非法参数',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$where['id'] = $request->id;
|
||||||
|
$info = ShopCart::where($where)->first();
|
||||||
|
$info->number = $request->number;
|
||||||
|
$re = $info->save();
|
||||||
|
if($re){
|
||||||
|
return $this->message('更新成功');
|
||||||
|
}
|
||||||
|
return $this->failed('更新失败','201');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除购物车的商品
|
||||||
|
public function delete(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'goodsIds' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'goodsIds.required' => '商品id参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$where = [
|
||||||
|
'uid' =>$user_id,
|
||||||
|
'goods_id' => explode(',',$request->goodsIds)
|
||||||
|
];
|
||||||
|
ShopCart::where($where)->delete();
|
||||||
|
$cartData = CartLogic::getCartList(['uid' =>$user_id]);
|
||||||
|
return $this->success($cartData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择或取消选择商品
|
||||||
|
public function checked(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'goodsIds' => 'required',
|
||||||
|
'isChecked' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'goodsIds.required' => '商品id参数缺失',
|
||||||
|
'isChecked.required' => '参数缺失',
|
||||||
|
'isChecked.numeric' => '非法参数',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$where = [
|
||||||
|
'uid'=>$user_id,
|
||||||
|
];
|
||||||
|
ShopCart::where($where)->whereIn('goods_id',explode(',',$request->goodsIds))->update(['checked' => $request->isChecked]);
|
||||||
|
$cartData = CartLogic::getCartList(['uid' =>$user_id]);
|
||||||
|
return $this->success($cartData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取购物车商品件数
|
||||||
|
public function goodsCount(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$user_id = 0;
|
||||||
|
} else {
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$goodsCount = ShopCart::getGoodsCount(['uid' => $user_id]);
|
||||||
|
return $this->success(['goodsCount'=>$goodsCount]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 下单前信息确认
|
||||||
|
public function checkout(Request $request)
|
||||||
|
{
|
||||||
|
return $this->success([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopCategory;
|
||||||
|
use App\Http\Resources\ShopCategory as ShopCategoryResource;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopCategoryController extends ApiController
|
||||||
|
{
|
||||||
|
// 分类目录全部分类数据接口
|
||||||
|
public function getCatalogIndex(Request $request)
|
||||||
|
{
|
||||||
|
// 获取顶级分类
|
||||||
|
$parentCategory = ShopCategory::getParentCategory();
|
||||||
|
$currentCategory = ShopCategory::getChildrenCategoryByParentId($parentCategory[0]['id']);
|
||||||
|
$outData = [
|
||||||
|
'categoryList' => ShopCategoryResource::collection($parentCategory),
|
||||||
|
'currentCategory' =>new ShopCategoryResource($parentCategory[0]),
|
||||||
|
];
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分类目录当前分类数据接口
|
||||||
|
public function getCatalogCurrent(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$parentCategory = ShopCategory::getParentCategory(['id'=>$request->id]);
|
||||||
|
$currentCategory = new ShopCategoryResource($parentCategory[0]);
|
||||||
|
return $this->success($currentCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,93 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopCollect;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Http\Resources\ShopCollect as ShopCollectResource;
|
||||||
|
|
||||||
|
class ShopCollectController extends ApiController
|
||||||
|
{
|
||||||
|
// 添加或取消收藏
|
||||||
|
public function addordelete(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'typeId' => 'required',
|
||||||
|
'valueId' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'typeId.required' => '参数缺失',
|
||||||
|
'valueId.required' => '参数缺失',
|
||||||
|
'valueId.numeric' => '非法参数',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty(\Auth::user()->id)){
|
||||||
|
$user_id = 0;
|
||||||
|
}else{
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$where['user_id'] = $user_id;
|
||||||
|
$where['value_id'] = $request->valueId;
|
||||||
|
$where['type_id'] = $request->typeId;
|
||||||
|
$info = ShopCollect::getCollectDetail($where);
|
||||||
|
$type = 'add';
|
||||||
|
if(empty($info->value_id)){
|
||||||
|
// 添加
|
||||||
|
$newCollect = new ShopCollect();
|
||||||
|
$newCollect->user_id = $user_id;
|
||||||
|
$newCollect->value_id = $request->valueId;
|
||||||
|
$newCollect->type_id = $request->typeId;
|
||||||
|
$newCollect->add_time = time();
|
||||||
|
$newCollect->is_attention = ShopCollect::STATE_ATTENTION;
|
||||||
|
$newCollect->save();
|
||||||
|
return $this->success(['type'=>$type]);
|
||||||
|
}
|
||||||
|
if($info->is_attention == ShopCollect::STATE_ATTENTION){
|
||||||
|
$info->is_attention = ShopCollect::STATE_NOT_ATTENTION;
|
||||||
|
$info->save();
|
||||||
|
$type = 'del';
|
||||||
|
}else{
|
||||||
|
$info->is_attention = ShopCollect::STATE_ATTENTION;
|
||||||
|
$info->save();
|
||||||
|
}
|
||||||
|
return $this->success(['type'=>$type]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取收藏列表
|
||||||
|
*/
|
||||||
|
public function getList(Request $request){
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'typeId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'typeId.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
if(empty(\Auth::user()->id)){
|
||||||
|
$user_id = 0;
|
||||||
|
}else{
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = ShopCollect::getList(['user_id'=>$user_id,'type_id'=>$request->typeId]);
|
||||||
|
return $this->success(ShopCollectResource::collection($list));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopComment;
|
||||||
|
use App\Logic\ShopCommentLogic;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class ShopCommentController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取评论列表
|
||||||
|
public function getCommentList(Request $request){
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'valueId' => 'required',
|
||||||
|
'typeId' => 'required|numeric',
|
||||||
|
'showType'=>'numeric'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'valueId.required' => '商品id参数缺失',
|
||||||
|
'typeId.required' => '评论类型参数缺失',
|
||||||
|
'typeId.numeric' => '请输入正确的评论类型',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$commentList = ShopCommentLogic::getCommentList(['value_id' =>$request->valueId,'type_id'=>$request->typeId],$request->showType,10);
|
||||||
|
return $commentList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 评论总数
|
||||||
|
public function getCommentCount(Request $request){
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'valueId' => 'required',
|
||||||
|
'typeId' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'valueId.required' => '商品id参数缺失',
|
||||||
|
'typeId.required' => '评论类型参数缺失',
|
||||||
|
'typeId.numeric' => '请输入正确的评论类型',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$where = [
|
||||||
|
'value_id' =>$request->valueId,
|
||||||
|
'type_id'=>$request->typeId,
|
||||||
|
'status'=>ShopComment::STATE_ON
|
||||||
|
];
|
||||||
|
$hasPicCount = ShopComment::has('get_comment_picture')->where($where)->count();
|
||||||
|
$allCount = ShopComment::where($where)->count();
|
||||||
|
return $this->success(['hasPicCount'=>$hasPicCount,'allCount'=>$allCount]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发表评论
|
||||||
|
public function commentAdd(Request $request){
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'valueId' => 'required',
|
||||||
|
'typeId' => 'required|numeric',
|
||||||
|
'content'=> 'required|min:5',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'valueId.required' => '商品id参数缺失',
|
||||||
|
'typeId.required' => '评论类型参数缺失',
|
||||||
|
'typeId.numeric' => '请输入正确的评论类型',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$user_id = 0;
|
||||||
|
if(!empty(\Auth::user()->id)){
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$conmentModel = new ShopComment();
|
||||||
|
$conmentModel->type_id = $request->typeId;
|
||||||
|
$conmentModel->value_id = $request->valueId;
|
||||||
|
$conmentModel->content = $request->input('content');
|
||||||
|
$conmentModel->add_time = Carbon::now();
|
||||||
|
$conmentModel->user_id = $user_id;
|
||||||
|
$re = $conmentModel->save();
|
||||||
|
return $this->message('添加成功');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 添加或取消收藏
|
||||||
|
public function addordelete(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'typeId' => 'required',
|
||||||
|
'valueId' => 'required|numeric',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'typeId.required' => '参数缺失',
|
||||||
|
'valueId.required' => '参数缺失',
|
||||||
|
'valueId.numeric' => '非法参数',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty(\Auth::user()->id)){
|
||||||
|
$user_id = 0;
|
||||||
|
}else{
|
||||||
|
$user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$where['user_id'] = $user_id;
|
||||||
|
$where['value_id'] = $request->valueId;
|
||||||
|
$where['type_id'] = $request->typeId;
|
||||||
|
$info = ShopCollect::getCollectDetail($where);
|
||||||
|
$type = 'add';
|
||||||
|
if(empty($info->value_id)){
|
||||||
|
// 添加
|
||||||
|
$newCollect = new ShopCollect();
|
||||||
|
$newCollect->user_id = $user_id;
|
||||||
|
$newCollect->value_id = $request->valueId;
|
||||||
|
$newCollect->type_id = $request->typeId;
|
||||||
|
$newCollect->add_time = time();
|
||||||
|
$newCollect->is_attention = ShopCollect::STATE_ATTENTION;
|
||||||
|
$newCollect->save();
|
||||||
|
return $this->success(['type'=>$type]);
|
||||||
|
}
|
||||||
|
if($info->is_attention ==ShopCollect::STATE_ATTENTION){
|
||||||
|
$info->is_attention = ShopCollect::STATE_NOT_ATTENTION;
|
||||||
|
$info->save();
|
||||||
|
$type = 'del';
|
||||||
|
}else{
|
||||||
|
$info->is_attention = ShopCollect::STATE_ATTENTION;
|
||||||
|
$info->save();
|
||||||
|
}
|
||||||
|
return $this->success(['type'=>$type]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopFeedback;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopFeedbackController extends ApiController
|
||||||
|
{
|
||||||
|
// 获取反馈信息
|
||||||
|
public function getDataList(Request $request)
|
||||||
|
{
|
||||||
|
return $this->success(ShopFeedback::$Option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户进行反馈
|
||||||
|
public function feedbackHandle(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'msg_type' => 'required',
|
||||||
|
'msg_content' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'msg_type.required' => '参数缺失',
|
||||||
|
'msg_content.required' => '内容缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$model = new ShopFeedback();
|
||||||
|
$model->uid = \Auth::user()->id;
|
||||||
|
$model->user_name = \Auth::user()->name;
|
||||||
|
$model->msg_title = ShopFeedback::$Option[$request->msg_type];
|
||||||
|
$model->msg_type = $request->msg_type;
|
||||||
|
$model->user_contact = $request->user_contact;
|
||||||
|
$model->msg_status = ShopFeedback::STATUS_ON;
|
||||||
|
$model->msg_content = $request->msg_content;
|
||||||
|
$model->save();
|
||||||
|
return $this->message('反馈成功');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopFootprint;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopFootprintController extends ApiController
|
||||||
|
{
|
||||||
|
// 足迹列表
|
||||||
|
public function getList(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$uid = 0;
|
||||||
|
} else {
|
||||||
|
$uid = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
$outData = ShopFootprint::getList(['uid'=>$uid]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Logic\ShopGoodsLogic;
|
||||||
|
use App\Logic\ShopCommentLogic;
|
||||||
|
use App\Models\ShopBrand;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Models\ShopCategory;
|
||||||
|
use App\Models\Carousel;
|
||||||
|
|
||||||
|
class ShopGoodsController extends ApiController
|
||||||
|
{
|
||||||
|
// 商品统计
|
||||||
|
public function getGoodsCount(Request $request)
|
||||||
|
{
|
||||||
|
$outData = ShopGoodsLogic::getGoodsCount([['id', '>', 0]]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取商品列表
|
||||||
|
public function getGoodsList(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'categoryId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'categoryId.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$where = [];
|
||||||
|
if( $request->keyword){
|
||||||
|
$where[] = ['goods_name', 'like' , '%'.$request->keyword.'%'];
|
||||||
|
}
|
||||||
|
if( $request->categoryId){
|
||||||
|
$where['category_id'] = $request->categoryId;
|
||||||
|
}
|
||||||
|
// 新品
|
||||||
|
if($request->isNew){
|
||||||
|
$where['is_new'] = $request->isNew;
|
||||||
|
}
|
||||||
|
// 热门
|
||||||
|
if($request->isHot){
|
||||||
|
$where['is_hot'] = $request->isHot;
|
||||||
|
}
|
||||||
|
// 品牌
|
||||||
|
if($request->brandId){
|
||||||
|
$where['brand_id'] = $request->brandId;
|
||||||
|
}
|
||||||
|
$order = '';
|
||||||
|
$inputSort = $request->input('sort','default');
|
||||||
|
switch($inputSort){
|
||||||
|
case 'price':
|
||||||
|
$order = 'retail_price '. $request->input('order','asc');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$order = 'sort_order asc';
|
||||||
|
}
|
||||||
|
$outData = ShopGoodsLogic::getGoodsList($where, $request->size ? $request->size : 10,$order);
|
||||||
|
if ($outData) {
|
||||||
|
return $outData;
|
||||||
|
}
|
||||||
|
return $this->success([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取商品分类列表
|
||||||
|
public function getGoodsCategory(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = ShopGoodsLogic::getGoodsCategory(['id' => $request->id]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 获取商品详情
|
||||||
|
public function getGoodsDetail(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$goodsInfo = ShopGoodsLogic::getGoodsDetail(['id' => $request->id]);
|
||||||
|
$goods_where = ['goods_id'=>$goodsInfo->id];
|
||||||
|
$attribute = ShopGoodsLogic::getGoodsAttribute($goods_where);
|
||||||
|
$issueList = ShopGoodsLogic::getGoodsIssue($goods_where);
|
||||||
|
$comment = ShopCommentLogic::getCommentList(['value_id' =>$goodsInfo->id],0,10);
|
||||||
|
$brand = ShopBrand::getDetail(['id'=>$goodsInfo->brand_id]);
|
||||||
|
$userHasCollect = ShopGoodsLogic::userCollectStatus($goodsInfo->id);
|
||||||
|
ShopGoodsLogic::addFootprint($goodsInfo->id);
|
||||||
|
$outData = [
|
||||||
|
'info' => $goodsInfo, // 商品信息
|
||||||
|
'attribute' => $attribute, // 商品属性参数
|
||||||
|
'issue' => $issueList, // 商品问题
|
||||||
|
'comment' => ['data'=>$comment,'count' => $comment->total()], // 商品评论
|
||||||
|
'brand' => $brand, // 品牌信息
|
||||||
|
'specificationList' => [], // 规格信息 后期完善该项 2018.6.12
|
||||||
|
'productList' => [], // sku列表 后期完善该项 2018.6.12
|
||||||
|
'userHasCollect' => $userHasCollect, // 是否收藏
|
||||||
|
];
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 商品详情页的关联商品(大家都在看)
|
||||||
|
public function getGoodsRelated(Request $request){
|
||||||
|
$goodsInfo = ShopGoodsLogic::getGoodsDetail(['id' => $request->id]);
|
||||||
|
$relateWhere['category_id'] = $goodsInfo->category_id;
|
||||||
|
$outData = ShopGoodsLogic::getRelatedGoods($relateWhere);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新品
|
||||||
|
public function getGoodsNew(Request $request){
|
||||||
|
$outData['bannerInfo'] = Carousel::getCarouselByType(Carousel::BOOTH_TYPE_NEW);
|
||||||
|
// 目前只是查询二级分类 因为前段定位分类只有2级
|
||||||
|
$outData['filterCategory'] = ShopCategory::getCategoryList(['level'=>1]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 热门
|
||||||
|
public function getGoodsHot(Request $request){
|
||||||
|
$outData['bannerInfo'] = Carousel::getCarouselByType(Carousel::BOOTH_TYPE_HOT);
|
||||||
|
// 目前只是查询二级分类 因为前段定位分类只有2级
|
||||||
|
$outData['filterCategory'] = ShopCategory::getCategoryList(['level'=>1]);
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Logic\CartLogic;
|
||||||
|
use App\Models\ShopCart;
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
use App\Logic\Buy;
|
||||||
|
|
||||||
|
class ShopOrderController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// 校验购物车商品
|
||||||
|
public function checkout(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$this->user_id = 0;
|
||||||
|
} else {
|
||||||
|
$this->user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'addressId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'addressId.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = CartLogic::getCheckedGoodsList($this->user_id);
|
||||||
|
$outData['checkedAddress'] = AddressLogic::getOneAddr($request->addressId, $this->user_id); // 选择地址
|
||||||
|
$outData['checkedCoupon'] = []; // 选择的优惠券
|
||||||
|
$outData['couponList'] = []; // 优惠券列表
|
||||||
|
$outData['couponPrice'] = 0.00; // 选中的优惠金额
|
||||||
|
$outData['actualPrice'] = PriceCalculate($outData['orderTotalPrice'], '-', $outData['couponPrice']); // 真实付款金额
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 立即购买
|
||||||
|
public function payNow(Request $request){
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$this->user_id = 0;
|
||||||
|
} else {
|
||||||
|
$this->user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'addressId' => 'required',
|
||||||
|
'goodsId' => 'required',
|
||||||
|
'buynumber' => 'required',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = CartLogic::getBuyGoodsById($request->goodsId,$request->buynumber);
|
||||||
|
$outData['checkedAddress'] = AddressLogic::getOneAddr($request->addressId, $this->user_id); // 选择地址
|
||||||
|
$outData['checkedCoupon'] = []; // 选择的优惠券
|
||||||
|
$outData['couponList'] = []; // 优惠券列表
|
||||||
|
$outData['couponPrice'] = 0.00; // 选中的优惠金额
|
||||||
|
$outData['actualPrice'] = PriceCalculate($outData['orderTotalPrice'], '-', $outData['couponPrice']); // 真实付款金额
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 提交订单用来生成订单
|
||||||
|
public function orderSubmit(Request $request)
|
||||||
|
{
|
||||||
|
if (empty(\Auth::user()->id)) {
|
||||||
|
$this->user_id = 0;
|
||||||
|
} else {
|
||||||
|
$this->user_id = \Auth::user()->id;
|
||||||
|
}
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'addressId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'addressId.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
if($request->goodsId){
|
||||||
|
$orderData = CartLogic::getBuyGoodsById($request->goodsId,$request->buynumber,0);
|
||||||
|
}else{
|
||||||
|
$orderData = CartLogic::getCheckedGoodsList($this->user_id);
|
||||||
|
}
|
||||||
|
$checkedAddress = AddressLogic::getOneAddr($request->addressId, $this->user_id); // 选择地址
|
||||||
|
if (empty($checkedAddress)) {
|
||||||
|
return $this->failed('未查到用户收货地址,请检查您的收货地址', 401);
|
||||||
|
}
|
||||||
|
$orderData['checkedCouponId'] = $request->couponId??0; // 选择的优惠券
|
||||||
|
$orderData['checkedCoupon'] = []; // 选择的优惠券
|
||||||
|
$orderData['couponList'] = []; // 优惠券列表
|
||||||
|
$orderData['couponPrice'] = 0.00; // 选中的优惠金额
|
||||||
|
$orderData['actualPrice'] = PriceCalculate($orderData['orderTotalPrice'], '-', $orderData['couponPrice']); // 真实付款金额
|
||||||
|
$buyModel = new Buy();
|
||||||
|
$buyRe = $buyModel->buyStep($request, $orderData, $checkedAddress, $this->user_id);
|
||||||
|
if (empty($buyRe['error'])) {
|
||||||
|
return $this->success($buyRe);
|
||||||
|
}
|
||||||
|
return $this->failed($buyRe['error'], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
|
||||||
|
class ShopRegionController extends ApiController
|
||||||
|
{
|
||||||
|
|
||||||
|
// 获取区域列表
|
||||||
|
public function regionList(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'parentId' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'parentId.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$addressLogic = new AddressLogic();
|
||||||
|
$regionList = $addressLogic->getRegionList($request->parentId);
|
||||||
|
return $this->success($regionList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ShopTopic;
|
||||||
|
use App\Http\Resources\ShopTopic as ShopTopicResource;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class ShopTopicController extends ApiController
|
||||||
|
{
|
||||||
|
// 获取专题列表
|
||||||
|
public function getTopicList(Request $request)
|
||||||
|
{
|
||||||
|
return ShopTopicResource::collection(ShopTopic::getTopicListByPage())->additional(['code' => 200]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取专题详情
|
||||||
|
public function getTopicDetail(Request $request)
|
||||||
|
{
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'id' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id.required' => '参数缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 403);
|
||||||
|
}
|
||||||
|
$outData = new ShopTopicResource(ShopTopic::getTopicDetail(['id' => $request->id]));
|
||||||
|
return $this->success($outData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\Carousel;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class CreateCityDataController extends ApiController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 根据省市生成数据
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
if(!$request->provinceId){
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
$province = DB::table('br_area')->where('area_id', $request->provinceId)->first();
|
||||||
|
// 二级地区
|
||||||
|
$dataTwo = [];
|
||||||
|
if($province){
|
||||||
|
$citys = DB::table('br_area')->where('area_parent_id', $request->provinceId)->get();
|
||||||
|
foreach($citys as $k=>$v){
|
||||||
|
// 3级地区
|
||||||
|
$district = DB::table('br_area')->where('area_parent_id', $v->area_id)->get();
|
||||||
|
$dataThree = [];
|
||||||
|
foreach($district as $k2=>$v3){
|
||||||
|
$dataThree[] = [
|
||||||
|
'name' => $v3->area_name,
|
||||||
|
'id' => $v3->area_id,
|
||||||
|
'pid'=> $v->area_id,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$dataTwo[] = [
|
||||||
|
'name' => $v->area_name,
|
||||||
|
'id' => $v->area_id,
|
||||||
|
'pid'=> $province->area_id,
|
||||||
|
'districtList' => $dataThree
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$dataOne = [
|
||||||
|
'name' => $province->area_name,
|
||||||
|
'id' => $province->area_id,
|
||||||
|
'cityList' =>$dataTwo
|
||||||
|
];
|
||||||
|
return json_encode($dataOne, JSON_UNESCAPED_UNICODE);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Iphone;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
class IphoneController extends ApiController
|
||||||
|
{
|
||||||
|
use AuthenticatesUsers;
|
||||||
|
public function getUserIphone(Request $request)
|
||||||
|
{
|
||||||
|
//$ll=DB::select('select * from users where openid = ?', [1231464465545885426545]);
|
||||||
|
//$ll = DB::table('users')->where('openid', '1231464465545885426545')->first();
|
||||||
|
|
||||||
|
$ll = new \App\Models\Iphone;
|
||||||
|
$info = $ll->userInfo();
|
||||||
|
if (!is_null($info->mobile))
|
||||||
|
{
|
||||||
|
return $this->message("你的手机已绑定成功");
|
||||||
|
}else {
|
||||||
|
return $this->failed('未绑定号码', 44);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function saveUserIphone(Request $request)
|
||||||
|
{
|
||||||
|
//dd(1);
|
||||||
|
// $iphone = new Iphone();
|
||||||
|
// $this->validate(request(),[
|
||||||
|
// 'mobile'=>'required|string|11'
|
||||||
|
// ]);
|
||||||
|
// $iphone->mobile = request('mobile');
|
||||||
|
//$ll = DB::table('users')->where('openid', '1231464465545885426545')->get();
|
||||||
|
$num =DB::table('users')->where('openid', '1231464465545885426545')->update(['mobile' => 13923456889]);
|
||||||
|
|
||||||
|
//$num =DB::table('users')->insert(['mobile' => 13923456789]);
|
||||||
|
//$num=1345678123;
|
||||||
|
if ($num)
|
||||||
|
{
|
||||||
|
return $this->message("你的手机已绑定成功");
|
||||||
|
}else {
|
||||||
|
return $this->failed('未绑定号码', 44);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* User: liuhao
|
||||||
|
* Date: 18-3-9
|
||||||
|
* Time: 上午9:50
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Logics\OrderLogic;
|
||||||
|
use App\Models\Order;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class OrdersController extends ApiController
|
||||||
|
{
|
||||||
|
//获取配送订单列表
|
||||||
|
public function deliveryOrderList(Request $request)
|
||||||
|
{
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
if (!$userID) {
|
||||||
|
return $this->failed('非法的用户请求', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'status' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'status.required' => '订单状态缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderStatus = $request->input('status');
|
||||||
|
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
|
||||||
|
// $userID = 7;
|
||||||
|
|
||||||
|
list($resaultFlag, $data) = $orderLogic->getDeliveryOrderList($userID, $orderStatus);
|
||||||
|
|
||||||
|
if ($resaultFlag) {
|
||||||
|
return $this->success($data);
|
||||||
|
} else {
|
||||||
|
list($code, $errMsg) = $this->transErrMsg($data);
|
||||||
|
return $this->failed($errMsg, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//确认接收订单
|
||||||
|
public function receiveOrder(Request $request)
|
||||||
|
{
|
||||||
|
// $userID = 7;
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
if (!$userID) {
|
||||||
|
return $this->failed('非法的用户请求', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderID' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderID.required' => 'orderID缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderID = $request->input('orderID');
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
$orderLogic->isInSchool = true;
|
||||||
|
$orderLogic->optionUserID = $userID;
|
||||||
|
|
||||||
|
list($resaultFlag, $errMsg) = $orderLogic->receiveOrder($orderID);
|
||||||
|
if ($resaultFlag) {
|
||||||
|
return $this->success([]);
|
||||||
|
} else {
|
||||||
|
list($code, $msg) = $this->transErrMsg($errMsg);
|
||||||
|
return $this->failed($msg, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//确认配送订单
|
||||||
|
public function deliveryOrder(Request $request)
|
||||||
|
{
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
if (!$userID) {
|
||||||
|
return $this->failed('非法的用户请求', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderID' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderID.required' => 'orderID缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderID = $request->input('orderID');
|
||||||
|
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
$orderLogic->isInSchool = true;
|
||||||
|
list($resaultFlag, $errMsg) = $orderLogic->deliveryOrder($orderID);
|
||||||
|
if ($resaultFlag) {
|
||||||
|
return $this->success([]);
|
||||||
|
} else {
|
||||||
|
list($code, $msg) = $this->transErrMsg($errMsg);
|
||||||
|
return $this->failed($msg, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//订单详情
|
||||||
|
public function getOrderDetail(Request $request)
|
||||||
|
{
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
if (!$userID) {
|
||||||
|
return $this->failed('非法的用户请求', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderID' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderID.required' => 'orderID缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderID = $request->input('orderID');
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
|
||||||
|
$orderLogic->optionUserID = $userID;
|
||||||
|
|
||||||
|
list($resaultFlag, $data) = $orderLogic->getOrderDetail($orderID);
|
||||||
|
|
||||||
|
if ($resaultFlag) {
|
||||||
|
return $this->success($data);
|
||||||
|
} else {
|
||||||
|
list($code, $msg) = $this->transErrMsg($data);
|
||||||
|
return $this->failed($msg, $code);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户收货
|
||||||
|
public function completeOrder(Request $request)
|
||||||
|
{
|
||||||
|
$userID = Auth::user()->id;
|
||||||
|
if (!$userID) {
|
||||||
|
return $this->failed('非法的用户请求', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数校验
|
||||||
|
$validator = Validator::make($request->all(),
|
||||||
|
[
|
||||||
|
'orderID' => 'required',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'orderID.required' => 'orderID缺失',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->failed($validator->errors(), 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderID = $request->input('orderID');
|
||||||
|
$orderLogic = new OrderLogic();
|
||||||
|
|
||||||
|
$orderLogic->optionUserID = $userID;
|
||||||
|
|
||||||
|
list($resaultFlag, $data) = $orderLogic->completeOrder($orderID);
|
||||||
|
if ($resaultFlag) {
|
||||||
|
return $this->success($data);
|
||||||
|
} else {
|
||||||
|
list($code, $msg) = $this->transErrMsg($data);
|
||||||
|
return $this->failed($msg, $code);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function transErrMsg($errMsg, $code = 401)
|
||||||
|
{
|
||||||
|
$msg = $errMsg;
|
||||||
|
|
||||||
|
if (is_string($errMsg)) {
|
||||||
|
$pos = strpos($errMsg, '|');
|
||||||
|
|
||||||
|
if ($pos !== false) {
|
||||||
|
$code = substr($errMsg, 0, $pos);
|
||||||
|
$msg = substr($errMsg, $pos + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$code, $msg];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||||
|
|
||||||
|
class ForgotPasswordController extends Controller
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Password Reset Controller
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This controller is responsible for handling password reset emails and
|
||||||
|
| includes a trait which assists in sending these notifications from
|
||||||
|
| your application to your users. Feel free to explore this trait.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
use SendsPasswordResetEmails;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('guest');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||||
|
|
||||||
|
class LoginController extends Controller
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Login Controller
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This controller handles authenticating users for the application and
|
||||||
|
| redirecting them to your home screen. The controller uses a trait
|
||||||
|
| to conveniently provide its functionality to your applications.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
use AuthenticatesUsers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where to redirect users after login.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $redirectTo = '/home';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('guest')->except('logout');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use App\User;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||||
|
|
||||||
|
class RegisterController extends Controller
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Register Controller
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This controller handles the registration of new users as well as their
|
||||||
|
| validation and creation. By default this controller uses a trait to
|
||||||
|
| provide this functionality without requiring any additional code.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
use RegistersUsers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where to redirect users after registration.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $redirectTo = '/home';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('guest');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a validator for an incoming registration request.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return \Illuminate\Contracts\Validation\Validator
|
||||||
|
*/
|
||||||
|
protected function validator(array $data)
|
||||||
|
{
|
||||||
|
return Validator::make($data, [
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'email' => 'required|string|email|max:255|unique:users',
|
||||||
|
'password' => 'required|string|min:6|confirmed',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new user instance after a valid registration.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return \App\User
|
||||||
|
*/
|
||||||
|
protected function create(array $data)
|
||||||
|
{
|
||||||
|
return User::create([
|
||||||
|
'name' => $data['name'],
|
||||||
|
'email' => $data['email'],
|
||||||
|
'password' => bcrypt($data['password']),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||||
|
|
||||||
|
class ResetPasswordController extends Controller
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Password Reset Controller
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This controller is responsible for handling password reset requests
|
||||||
|
| and uses a simple trait to include this behavior. You're free to
|
||||||
|
| explore this trait and override any methods you wish to tweak.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
use ResetsPasswords;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where to redirect users after resetting their password.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $redirectTo = '/home';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('guest');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||||
|
use Illuminate\Routing\Controller as BaseController;
|
||||||
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||||
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||||
|
|
||||||
|
class Controller extends BaseController
|
||||||
|
{
|
||||||
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||||
|
|
||||||
|
class Kernel extends HttpKernel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The application's global HTTP middleware stack.
|
||||||
|
*
|
||||||
|
* These middleware are run during every request to your application.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $middleware = [
|
||||||
|
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
||||||
|
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||||
|
\App\Http\Middleware\TrimStrings::class,
|
||||||
|
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||||
|
\App\Http\Middleware\TrustProxies::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The application's route middleware groups.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $middlewareGroups = [
|
||||||
|
'web' => [
|
||||||
|
\App\Http\Middleware\EncryptCookies::class,
|
||||||
|
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||||
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
|
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||||
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||||
|
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||||
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
'api' => [
|
||||||
|
'throttle:60,1',
|
||||||
|
'bindings',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The application's route middleware.
|
||||||
|
*
|
||||||
|
* These middleware may be assigned to groups or used individually.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $routeMiddleware = [
|
||||||
|
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
|
||||||
|
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||||
|
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||||
|
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||||
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||||
|
|
||||||
|
class EncryptCookies extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The names of the cookies that should not be encrypted.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $except = [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
class RedirectIfAuthenticated
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure $next
|
||||||
|
* @param string|null $guard
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle($request, Closure $next, $guard = null)
|
||||||
|
{
|
||||||
|
if (Auth::guard($guard)->check()) {
|
||||||
|
return redirect('/home');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||||
|
|
||||||
|
class TrimStrings extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The names of the attributes that should not be trimmed.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $except = [
|
||||||
|
'password',
|
||||||
|
'password_confirmation',
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Fideloper\Proxy\TrustProxies as Middleware;
|
||||||
|
|
||||||
|
class TrustProxies extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The trusted proxies for this application.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $proxies;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current proxy header mappings.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $headers = [
|
||||||
|
Request::HEADER_FORWARDED => 'FORWARDED',
|
||||||
|
Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
|
||||||
|
Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
|
||||||
|
Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
|
||||||
|
Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||||
|
|
||||||
|
class VerifyCsrfToken extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The URIs that should be excluded from CSRF verification.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $except = [
|
||||||
|
'api/*',
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class Carousel extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"businessId"=>$this->goods_id,
|
||||||
|
"type"=> $this->booth_type,
|
||||||
|
"title"=> $this->carousel_title,
|
||||||
|
"picUrl"=> config('filesystems.disks.oss.url').'/'.$this->carousel_img,
|
||||||
|
"info"=> $this->carousel_info,
|
||||||
|
"state"=> $this->state,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class DefaultAddr extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'provinceId' => $this->aid_p,
|
||||||
|
'cityId' => $this->aid_c,
|
||||||
|
'districtId' => $this->aid_a,
|
||||||
|
'provinceStr' => $this->province,
|
||||||
|
'cityStr' => $this->city,
|
||||||
|
'areaStr' => $this->area,
|
||||||
|
'linkMan' => $this->true_name,
|
||||||
|
'address' => $this->addr,
|
||||||
|
'mobile' => $this->mobile,
|
||||||
|
'code' => $this->postcode,
|
||||||
|
'isDefault' => $this->is_default,
|
||||||
|
'sid' => $this->sid,
|
||||||
|
'did' => $this->did,
|
||||||
|
'school_name' => $this->school_name,
|
||||||
|
'dorm_name' => $this->dorm_name,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class Good extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!empty($this->goods_description_pictures)) {
|
||||||
|
$pic = $this->goods_description_pictures;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$eachPic
|
||||||
|
];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$pics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$this->goods_main_image
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'pics' => $pics,
|
||||||
|
'name' => $this->goods_name,
|
||||||
|
'minPrice' => $this->goods_price,
|
||||||
|
'originalPrice' => $this->goods_marketprice,
|
||||||
|
'numberOrders' => $this->goods_salenum,
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$this->goods_main_image,
|
||||||
|
'stores' => $this->goods_storage,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||||
|
|
||||||
|
class GoodCollection extends ResourceCollection
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource collection into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return parent::toArray($request);
|
||||||
|
// return [
|
||||||
|
// 'data' => $this->collection,
|
||||||
|
// 'links' => [
|
||||||
|
// 'self' => 'link-value',
|
||||||
|
// ],
|
||||||
|
// ];
|
||||||
|
// return [
|
||||||
|
// 'id' => $this->id,
|
||||||
|
// 'goods_name' => $this->goods_name,
|
||||||
|
// ];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class GoodDetail extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
if (!empty($this->goods_description_pictures)) {
|
||||||
|
$pic = $this->goods_description_pictures;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$eachPic
|
||||||
|
];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$pics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$this->goods_main_image
|
||||||
|
];
|
||||||
|
}
|
||||||
|
if (!empty($this->goods_carousel)) {
|
||||||
|
$carouselPic = $this->goods_carousel;
|
||||||
|
foreach ($carouselPic as $eachPic) {
|
||||||
|
$carouselPics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$eachPic
|
||||||
|
];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$carouselPics[] = [
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$this->goods_main_image
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = '';
|
||||||
|
foreach ($pics as $eachPic) {
|
||||||
|
$content .= '<div><img src="'.$eachPic['pic'].'"></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'pics' => $pics,
|
||||||
|
'carousel' => $carouselPics,
|
||||||
|
'basicInfo' => [
|
||||||
|
'id' => $this->id,
|
||||||
|
'name' => $this->goods_name,
|
||||||
|
'minPrice' => $this->goods_price,
|
||||||
|
'numberOrders' => $this->goods_salenum,
|
||||||
|
'pic' => config('filesystems.disks.oss.url').'/'.$this->goods_main_image,
|
||||||
|
'stores' => $this->goods_storage,
|
||||||
|
],
|
||||||
|
'logistics' =>1, // 需要填写收货地址
|
||||||
|
'content' => $content,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ProjectType extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$pics =[];
|
||||||
|
if (!empty($this->carousel_imgs)) {
|
||||||
|
$pic = $this->carousel_imgs;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = config('filesystems.disks.oss.url').'/'.$eachPic;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"goods_name"=> $this->type_name,
|
||||||
|
"goods_desc"=> $this->type_desc,
|
||||||
|
"type_name"=> $this->type_name,
|
||||||
|
"title"=> $this->special_title,
|
||||||
|
"type_img"=> config('filesystems.disks.oss.url').'/'.$this->type_img,
|
||||||
|
"carousel_imgs"=> $pics,
|
||||||
|
"description"=> $this->description,
|
||||||
|
"salenum"=> $this->salenum,
|
||||||
|
"goods_price"=> $this->basal_price,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopAddress extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"name"=> $this->user_name,
|
||||||
|
"country_id"=> $this->country_id,
|
||||||
|
"country"=> $this->country,
|
||||||
|
"province_id"=> $this->province_id,
|
||||||
|
"province_name"=> $this->province,
|
||||||
|
"city_id"=> $this->city_id,
|
||||||
|
"city_name"=> $this->city,
|
||||||
|
"district_id"=> $this->district_id,
|
||||||
|
"district_name"=> $this->district,
|
||||||
|
"address"=> $this->address,
|
||||||
|
"mobile"=> $this->mobile,
|
||||||
|
"is_default"=> $this->is_default,
|
||||||
|
"full_region"=> $this->province.' '.$this->city.' '.$this->district.' ' ,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopBrand extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$pics =[];
|
||||||
|
if (!empty($this->list_pic_url)) {
|
||||||
|
$pic = $this->list_pic_url;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = config('filesystems.disks.oss.url').'/'.$eachPic;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"name"=> $this->name,
|
||||||
|
"list_pic_url"=> $pics,
|
||||||
|
"simple_desc"=> $this->simple_desc,
|
||||||
|
"pic_url"=> config('filesystems.disks.oss.url').'/'.$this->pic_url,
|
||||||
|
"is_show"=> $this->is_show,
|
||||||
|
"floor_price"=> $this->floor_price,
|
||||||
|
"new_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->new_pic_url,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory as ShopCategoryDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopCart extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"user_id"=> $this->uid,
|
||||||
|
"goods_id"=> $this->goods_id,
|
||||||
|
"goods_sn"=> $this->goods_sn,
|
||||||
|
"goods_name"=> $this->goods_name,
|
||||||
|
"market_price"=> $this->market_price,
|
||||||
|
"retail_price"=> $this->shop_goods->retail_price,
|
||||||
|
"number"=> $this->number,
|
||||||
|
"checked"=> $this->checked,
|
||||||
|
'freight_price' => $this->shop_goods->freight_price,
|
||||||
|
"list_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->list_pic_url,
|
||||||
|
"primary_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->shop_goods->primary_pic_url,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory as ShopCategoryDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopCategory extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$subCategoryList = ShopCategory::collection(ShopCategoryDB::getChildrenCategoryByParentId($this->id));
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"name"=> $this->name,
|
||||||
|
"keywords"=> $this->keywords,
|
||||||
|
"front_desc"=> $this->front_desc,
|
||||||
|
"sort_order"=> $this->sort_order,
|
||||||
|
"banner_url"=> config('filesystems.disks.oss.url').'/'.$this->banner_url,
|
||||||
|
"icon_url"=> config('filesystems.disks.oss.url').'/'.$this->icon_url,
|
||||||
|
"img_url"=> config('filesystems.disks.oss.url').'/'.$this->img_url,
|
||||||
|
"wap_banner_url"=> config('filesystems.disks.oss.url').'/'.$this->img_url,
|
||||||
|
"level"=> $this->level,
|
||||||
|
"front_name"=> $this->front_name,
|
||||||
|
'subCategoryList' =>$subCategoryList
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopCollect extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"name"=> $this->shop_goods['goods_name'],
|
||||||
|
"value_id"=> $this->value_id,
|
||||||
|
"retail_price"=> $this->shop_goods['retail_price'],
|
||||||
|
"list_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->shop_goods['primary_pic_url'],
|
||||||
|
"goods_brief"=> $this->shop_goods['goods_brief'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
use App\User;
|
||||||
|
|
||||||
|
|
||||||
|
class ShopComment extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$pics =[];
|
||||||
|
if (!empty($this->get_comment_picture)) {
|
||||||
|
$pic = $this->get_comment_picture;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = config('filesystems.disks.oss.url').'/'.$eachPic->pic_url;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$user = [
|
||||||
|
'nickname' => 'T粉',
|
||||||
|
'avatar' => '../../static/images/default.header.png'
|
||||||
|
];
|
||||||
|
if($this->user_id){
|
||||||
|
$user = User::find($this->user_id);
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"value_id"=> $this->value_id,
|
||||||
|
'nickname' => $user['nickname'],
|
||||||
|
'avatar' => $user['avatar'],
|
||||||
|
"content"=> $this->content,
|
||||||
|
"user_id"=> $this->user_id,
|
||||||
|
"new_content"=> $this->new_content,
|
||||||
|
"pic_list"=> $pics,
|
||||||
|
"add_time"=>$this->created_at,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory as ShopCategoryDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopFootprint extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"goods_name"=> $this->shop_goods->goods_name,
|
||||||
|
"primary_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->shop_goods->primary_pic_url,
|
||||||
|
"goods_brief"=> $this->shop_goods->goods_brief,
|
||||||
|
"retail_price"=> $this->shop_goods->retail_price,
|
||||||
|
"add_time"=> $this->add_time,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopCategory as ShopCategoryDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopGoods extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$pics =[];
|
||||||
|
if (!empty($this->list_pic_url)) {
|
||||||
|
$pic = $this->list_pic_url;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = config('filesystems.disks.oss.url').'/'.$eachPic;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"goods_name"=> $this->goods_name,
|
||||||
|
"goods_number"=> $this->goods_number,
|
||||||
|
"keywords"=> $this->keywords,
|
||||||
|
"goods_number"=> $this->goods_number,
|
||||||
|
"goods_brief"=> $this->goods_brief,
|
||||||
|
"goods_desc"=> $this->goods_desc,
|
||||||
|
"counter_price"=> $this->counter_price,
|
||||||
|
"extra_price"=> $this->extra_price,
|
||||||
|
"is_new"=> $this->is_new,
|
||||||
|
"goods_unit"=> $this->goods_unit,
|
||||||
|
"primary_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->primary_pic_url,
|
||||||
|
"list_pic_url"=> $pics,
|
||||||
|
"retail_price"=> $this->retail_price,
|
||||||
|
"sell_volume"=> $this->sell_volume,
|
||||||
|
"unit_price"=> $this->unit_price,
|
||||||
|
"promotion_desc"=> $this->promotion_desc,
|
||||||
|
"promotion_tag"=> $this->promotion_tag,
|
||||||
|
"vip_exclusive_price"=> $this->vip_exclusive_price,
|
||||||
|
"is_vip_exclusive"=> $this->is_vip_exclusive,
|
||||||
|
"is_limited"=> $this->is_limited,
|
||||||
|
"is_hot"=> $this->is_hot,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopGoodsAttribute extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"goods_id"=>$this->goods_id,
|
||||||
|
"name"=> $this->get_attribute->name,
|
||||||
|
"value"=> $this->value,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopOrder as ShopOrderDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
use App\Logic\AddressLogic;
|
||||||
|
|
||||||
|
class ShopOrder extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
// 主表信息
|
||||||
|
"id" => $this->id,
|
||||||
|
"order_sn" => $this->order_sn,
|
||||||
|
"order_status" => $this->order_status,
|
||||||
|
"shipping_status" => $this->shipping_status,
|
||||||
|
"pay_status" => $this->pay_status,
|
||||||
|
"consignee" => $this->consignee,
|
||||||
|
"country" => $this->country,
|
||||||
|
"city" => $this->city,
|
||||||
|
"district" => $this->district,
|
||||||
|
"address" => $this->address,
|
||||||
|
"mobile" => $this->mobile,
|
||||||
|
"postscript" => $this->postscript,
|
||||||
|
"pay_name" => $this->pay_name,
|
||||||
|
"pay_id" => $this->pay_id,
|
||||||
|
"actual_price" => $this->actual_price,
|
||||||
|
"order_price" => $this->order_price,
|
||||||
|
"goods_price" => $this->goods_price,
|
||||||
|
"add_time" => $this->add_time,
|
||||||
|
"confirm_time" => $this->confirm_time,
|
||||||
|
"pay_time" => $this->pay_time,
|
||||||
|
"coupon_price" => $this->coupon_price,
|
||||||
|
"order_status_text" => ShopOrderDB::getStatusDisplayMap()[$this->order_status],
|
||||||
|
'full_region' => AddressLogic::getRegionNameById($this->province) .' '. AddressLogic::getRegionNameById($this->city).' '.AddressLogic::getRegionNameById($this->district),
|
||||||
|
"handleOption" => [
|
||||||
|
'pay' => ($this->order_status == ShopOrderDB::STATUS_WAIT_PAY) ? 1 : 0,
|
||||||
|
],
|
||||||
|
// 附表信息
|
||||||
|
"goodsList" => ShopOrderGoods::collection($this->orderGoods),
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\ShopOrder as ShopOrderDB;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopOrderGoods extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"goods_name"=> $this->goods_name,
|
||||||
|
"number"=> $this->number,
|
||||||
|
"list_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->list_pic_url,
|
||||||
|
"actual_price"=> $this->actual_price,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class ShopTopic extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$pics =[];
|
||||||
|
if (!empty($this->item_pic_url)) {
|
||||||
|
$pic = $this->item_pic_url;
|
||||||
|
foreach ($pic as $eachPic) {
|
||||||
|
$pics[] = config('filesystems.disks.oss.url').'/'.$eachPic;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"title"=> $this->title,
|
||||||
|
"content"=> $this->content,
|
||||||
|
"avatar"=> config('filesystems.disks.oss.url').'/'.$this->avatar,
|
||||||
|
"price_info"=> $this->price_info,
|
||||||
|
"subtitle"=> $this->subtitle,
|
||||||
|
"read_count"=> $this->read_count,
|
||||||
|
"scene_pic_url"=> config('filesystems.disks.oss.url').'/'.$this->scene_pic_url,
|
||||||
|
"item_pic_url"=> $pics,
|
||||||
|
"sort_order"=> $this->sort_order,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class Special extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id"=>$this->id,
|
||||||
|
"class_id"=> $this->class_id,
|
||||||
|
"title"=> $this->special_title,
|
||||||
|
"icon"=> config('filesystems.disks.oss.url').'/'.$this->icon,
|
||||||
|
"link_url"=> $this->link_url,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue