作者 Your Name

gx

<?php
namespace App\Http\Controllers\Bside\Product;
use App\Helper\Arr;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\ProductLogic;
use App\Http\Requests\Bside\product\ProductRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* Class ProductController
* @package App\Http\Controllers\Bside
* @author zbj
* @date 2023/4/12
*/
class ProductController extends BaseController
{
public function index(ProductLogic $logic)
{
$map = [];
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status','created_at'],0);
return $this->success(Arr::listToTree($data));
}
public function info(Request $request, ProductLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status']));
}
public function save(ProductRequest $request, ProductLogic $logic)
{
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, ProductLogic $logic)
{
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
//todo Ai生成 关键词和描述
}
... ...
<?php
namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Product;
/**
* Class ProductLogic
* @package App\Http\Logic\Bside\Product
* @author zbj
* @date 2023/4/14
*/
class ProductLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Product();
}
public function save($param){
if(!empty($param['pid'])){
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级分类不能是本分类');
}
$p_cate = Product::find($param['pid']);
if(!$p_cate){
$this->fail('上级分类不存在');
}
}
return parent::save($param);
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子分类
if(Product::where('pid', $id)->count()){
$this->fail("分类{$info['title']}存在子分类,不能删除");
}
//todo 是否有对应商品
}
return parent::delete($ids);
}
}
... ...
<?php
namespace App\Http\Requests\Bside;
use Illuminate\Foundation\Http\FormRequest;
class ProjectRoleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
public function rules()
{
return [
'name'=>'required|max:11',
'role_menu'=>'required|string',
];
}
public function messages()
{
return [
'name.required'=>'名称必须填写',
'name.max' => '名称不大于11字符.',
'role_menu.required'=>'角色列表必须填写',
];
}
}
... ...
<?php
namespace App\Http\Requests\Bside\product;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class ProductRequest
* @package App\Http\Requests\Bside\product
* @author zbj
* @date 2023/4/12
*/
class ProductRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title'=>'required|max:20',
'image'=>'required',
'keywords'=>'required|max:50',
'describe'=>'required|max:200',
];
}
public function messages()
{
return [
'title.required' => '请输入分类名称',
'title.max' => '分类名称不能超过20个字符',
'image.required' => '请上传分类图片',
'keywords.required' => '请输入分类关键词',
'keywords.max' => '分类关键词不能超过50个字符',
'describe.required' => '请输入分类描述',
'describe.max' => '分类描述不能超过200个字符',
];
}
}
... ...