作者 Your Name

Merge branch 'dev' of http://47.244.231.31:8099/zhl/globalso-v6 into dev

... ... @@ -113,7 +113,7 @@ class Handler extends ExceptionHandler
$code = $exception->getCode();
} elseif ($exception instanceof ValidationException) {
$code = Code::USER_PARAMS_ERROE();
$message = Arr::first(Arr::first($exception->errors()));
$message = $code->description = Arr::first(Arr::first($exception->errors()));
} elseif ($exception instanceof NotFoundHttpException || $exception instanceof MethodNotAllowedHttpException) {
return response('404 Not Found', 404);
} else {
... ...
... ... @@ -125,4 +125,64 @@ class Arr extends \Illuminate\Support\Arr
return $signle ? $rows[0] : $rows;
}
/**
* 数组转字符串
* @param $arr
* @return string
* @author zbj
* @date 2023/4/17
*/
public static function a2s($arr): string
{
return json_encode($arr, JSON_UNESCAPED_UNICODE);
}
/**
* 字符串转数组
* @param $str
* @return array|mixed
* @author zbj
* @date 2023/4/17
*/
public static function s2a($str)
{
if (is_array($str)) {
return $str;
}
return is_object($str) ? (array)$str : json_decode($str, true);
}
/**
* 数组转set形式字符串
* @param $arr
* @param string $format
* @return string
* @author zbj
* @date 2023/4/17
*/
public static function arrToSet($arr, string $format = 'intval'): string
{
$arr = array_unique(array_filter(Arr::splitFilterToArray($arr, $format, ',')));
return $arr ? implode(',', $arr) : '';
}
/**
* set形式字符串转数组
* @param $str
* @param string $format
* @return array
* @author zbj
* @date 2023/4/17
*/
public static function setToArr($str, string $format = 'intval')
{
if (is_string($str)) {
return Arr::splitFilterToArray($str, $format, ',');
}
return $str ?: [];
}
}
... ...
... ... @@ -35,7 +35,6 @@ class BaseController extends Controller
$info = Cache::get($this->token);
$this->user = $info;
$this->uid = $info['id'];
$this->param['project_id'] = $this->user['project_id'];
}else{
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']);
}
... ... @@ -86,14 +85,17 @@ class BaseController extends Controller
case 'row':
$this->row = $v;
break;
case "name":
$this->map['name'] = ['like','%'.$v.'%'];
break;
case "created_at":
$this->_btw[0] = $v;
$this->_btw[1] = date('Y-m-d H:i:s',time());
$this->map['create_at'] = ['between', $this->_btw];
$this->map['created_at'] = ['between', $this->_btw];
break;
case "updated_at":
$this->_btw[1] = $v;
$this->map['update_at'] = ['between', $this->_btw];
$this->map['updated_at'] = ['between', $this->_btw];
break;
default:
if (!empty($v)) {
... ... @@ -102,7 +104,6 @@ class BaseController extends Controller
break;
}
}
}
/**
* @name 统一返回参数
... ...
... ... @@ -8,6 +8,7 @@ use App\Http\Requests\Bside\News\NewsCategoryRequest;
use App\Models\News\News as NewsModel;
use App\Models\News\NewsCategory as NewsCategoryModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class NewsCategoryController extends BaseController
{
... ... @@ -18,22 +19,64 @@ class NewsCategoryController extends BaseController
* @method
*/
public function lists(NewsCategoryModel $newsCategory){
//搜索条件
$lists = $newsCategory->lists($this->map,$this->page,$this->row);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :获取当前分类详情
* @return void
* @author :liyuhang
* @method
*/
public function info(Request $request,NewsCategoryModel $newsCategory){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$info = $newsCategory->read($this->param);
if($info === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
public function add(NewsCategoryRequest $request,NewsCategoryModel $newsCategory){
public function add(NewsCategoryRequest $request,NewsCategoryModel $newsCategory,NewsModel $news){
$request->validated();
$this->param['project_id'] = $this->user['project_id'];
$this->param['Operator_id'] = $this->uid;
$this->param['create_id'] = $this->uid;
DB::beginTransaction();
$rs = $newsCategory->add($this->param);
if($rs === false){
DB::rollBack();
$this->response('error',Code::USER_ERROR);
}
//TODO::判断当前分内是否为一级分类
if(isset($this->param['pid']) && !empty($this->param['pid'])){
//查看当前上级分类下是否有其他分类
$cate_info = $newsCategory->read(['pid'=>$this->param['pid'],'id'=>['!=',$newsCategory->id]]);
if($cate_info === false){
//查看当前上一级分类下是否有商品
$news_info = $news->read(['category_id'=>$this->param['pid'],'pid'=>0]);
if($news_info !== false){
//更新所有商品到当前分类
$rs = $news->edit(['category_id'=>$newsCategory->id],['category_id'=>$this->param['pid']]);
if($rs === false){
DB::rollBack();
$this->response('error',Code::USER_ERROR);
}
}
}
}
DB::commit();
$this->response('success',Code::SUCCESS);
}
... ... @@ -49,10 +92,12 @@ class NewsCategoryController extends BaseController
],[
'id.required' => 'ID不能为空'
]);
$this->param['Operator_id'] = $this->uid;
$rs = $newsCategory->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
//写入日志
$this->response('success',Code::SUCCESS);
}
... ... @@ -70,7 +115,8 @@ class NewsCategoryController extends BaseController
'id.required' => 'ID不能为空',
'status.required' => 'status不能为空'
]);
$rs = $newsCategory->edit(['status'=>$this->param['status']],['id'=>$this->param['id']]);
$this->param['Operator_id'] = $this->uid;
$rs = $newsCategory->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
... ... @@ -89,19 +135,19 @@ class NewsCategoryController extends BaseController
],[
'id.required' => 'ID不能为空',
]);
foreach ($this->param['id'] as $k=>$v){
foreach ($this->param['id'] as $v){
//查询是否有子分类
$id = $newsCategory->read(['pid'=>$this->param['id']],['id']);
if($id !== false){
$rs = $newsCategory->read(['pid'=>$v],['id']);
if($rs !== false){
$this->response('当前分类拥有子分类不允许删除',Code::USER_ERROR);
}
//查看当前分内下是否有商品
$news->read(['category_id'=>$this->param['id']],['id']);
if($id !== false){
$rs = $news->read(['category_id'=>$v],['id']);
if($rs !== false){
$this->response('当前分类拥有商品',Code::USER_ERROR);
}
}
$this->param['id'] = ['in',$id];
$this->param['id'] = ['in',$this->param['id']];
$rs = $newsCategory->del($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
... ...
... ... @@ -2,17 +2,100 @@
namespace App\Http\Controllers\Bside\News;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Requests\Bside\News\NewsRequest;
use App\Models\News\News as NewsModel;
use Illuminate\Http\Request;
class NewsController extends BaseController
{
/**
* @name :获取新闻列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(NewsModel $news){
$lists = $news->lists($this->map,$this->page,$this->row,$this->order);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
public function add(NewsRequest $newsRequest,NewsModel $news){
$newsRequest->validated();
$this->param['user_id'] = $this->uid;
$this->param['Operator_id'] = $this->uid;
$rs = $news->add($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
public function lists(){
public function edit(NewsRequest $newsRequest,NewsModel $news){
$newsRequest->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$this->param['Operator_id'] = $this->uid;
$rs = $news->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
//写入日志
$this->response('success',Code::SUCCESS);
}
/**
* @name :编辑状态/与排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,NewsModel $news){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$this->param['Operator_id'] = $this->uid;
$rs = $news->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
/**
* @name :删除分类
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,NewsModel $news){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$this->param['id'] = ['in',$this->param['id']];
$rs = $news->del($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
//TODO::清空相关资源
$this->response('success');
}
}
... ...
... ... @@ -2,6 +2,8 @@
namespace App\Http\Controllers\Bside\Product;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\ProductLogic;
... ... @@ -13,7 +15,7 @@ use Illuminate\Http\Request;
* Class ProductController
* @package App\Http\Controllers\Bside
* @author zbj
* @date 2023/4/12
* @date 2023/4/17
*/
class ProductController extends BaseController
{
... ... @@ -24,9 +26,12 @@ class ProductController extends BaseController
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
}
if(!empty($this->param['created_at'])){
$map[] = ['created_at', 'between', $this->param['created_at']];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status','created_at'],0);
return $this->success(Arr::listToTree($data));
$data = $logic->getList($map, $sort, ['id', 'title', 'thumb', 'category_id', 'keywords', 'status', 'created_at', 'updated_at']);
return $this->success($data);
}
public function info(Request $request, ProductLogic $logic){
... ... @@ -36,11 +41,15 @@ class ProductController extends BaseController
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status']));
return $this->success(Arr::twoKeepKeys($data, ['id', 'title', 'gallery', 'attrs', 'category_id', 'keywords', 'intro', 'content',
'describe', 'seo_mate', 'related_product_id', 'status']));
}
public function save(ProductRequest $request, ProductLogic $logic)
{
//封面取第一个图片
$this->param['thumb'] = $this->param['gallery'][0] ?? '';
$data = $logic->save($this->param);
return $this->success($data);
}
... ... @@ -57,5 +66,4 @@ class ProductController extends BaseController
return $this->success($data);
}
//todo Ai生成 关键词和描述
}
... ...
... ... @@ -21,9 +21,9 @@ class UserController extends BaseController
$this->map['project_id'] = $this->user['project_id'];
$lists = $userModel->lists($this->map,$this->page,$this->row,$this->order,['id','name','mobile','created_at']);
if(empty($lists)){
$this->response('请求失败',Code::USER_ERROR,[]);
$this->response('error',Code::USER_ERROR,[]);
}
$this->response('列表',Code::SUCCESS,$lists);
$this->response('success',Code::SUCCESS,$lists);
}
/**
... ... @@ -39,7 +39,7 @@ class UserController extends BaseController
if($rs === false){
$this->response('当前添加用户已存在或参数错误,添加失败',Code::USER_REGISTER_ERROE,[]);
}
$this->response('添加成功',Code::SUCCESS,[]);
$this->response('success',Code::SUCCESS);
}
/**
... ... @@ -86,9 +86,28 @@ class UserController extends BaseController
}
$this->response($this->param['status'] == 0 ? '启用成功' : '禁用成功');
}
/**
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
public function info(Request $request,UserModel $userModel){
$request->validate([
'id'=>['required', new Ids()],
],[
'id.required' => 'ID不能为空',
]);
$rs = $userModel->read($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
/**
* @name :删除管理员
* @return void
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -100,8 +119,8 @@ class UserController extends BaseController
]);
$rs = $userModel->del($this->param);
if($rs === false){
$this->response('删除失败',Code::USER_ERROR);
$this->response('error',Code::USER_ERROR);
}
$this->response('删除成功');
$this->response('success');
}
}
... ...
... ... @@ -16,11 +16,15 @@ class BaseLogic
protected $requestAll;
protected $user;
protected $is_cache = true; //是否缓存数据
public function __construct()
{
$this->requestAll = request()->all();
$this->user = Cache::get(request()->header('token'));
}
/**
... ... @@ -57,6 +61,7 @@ class BaseLogic
*/
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
$map[] = ['project_id' => $this->user['project_id']];
// 闭包查询条件格式化
$query = $this->formatQuery($map);
... ... @@ -112,6 +117,9 @@ class BaseLogic
}else{
$info = $this->model->find($id);
}
if($info && $info['project_id'] != $this->user['project_id']) {
$info = null;
}
return $info;
}
... ... @@ -162,6 +170,8 @@ class BaseLogic
$this->fail('ID不能为空');
}
$map[] = ['id', 'in', $ids];
$map[] = ['project_id' => $this->user['project_id']];
$res = $this->formatQuery($map)->delete();
if($res){
... ...
... ... @@ -25,6 +25,9 @@ class AttrLogic extends BaseLogic
public function getInfo($id){
$info = parent::getCacheInfo($id);
if(!$info){
$this->fail('数据不存在或者已经删除');
}
$info->values;
return $this->success($info->toArray());
}
... ... @@ -62,17 +65,4 @@ class AttrLogic extends BaseLogic
}
return $this->success();
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
}
return parent::delete($ids);
}
}
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Category;
use App\Models\Product\Product;
/**
* Class CategoryLogic
... ... @@ -45,8 +46,10 @@ class CategoryLogic extends BaseLogic
if(Category::where('pid', $id)->count()){
$this->fail("分类{$info['title']}存在子分类,不能删除");
}
//todo 是否有对应商品
//是否有对应商品
if(Product::whereRaw("FIND_IN_SET({$id},`category_id`)")->count()){
$this->fail("分类{$info['title']}存在产品,不能删除");
}
}
return parent::delete($ids);
}
... ...
... ... @@ -20,18 +20,4 @@ class DescribeLogic extends BaseLogic
$this->model = new Describe();
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
}
return parent::delete($ids);
}
}
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Product;
use App\Models\RouteMap;
use App\Models\Product\Keyword;
use Illuminate\Support\Facades\DB;
... ... @@ -28,7 +29,7 @@ class KeywordLogic extends BaseLogic
try {
$res = parent::save($param);
//路由映射
RouteMap::setRoute($param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $res['id'], $param['project_id'], true);
RouteMap::setRoute($param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $res['id'], $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
... ... @@ -39,17 +40,22 @@ class KeywordLogic extends BaseLogic
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
DB::beginTransaction();
try {
parent::delete($ids);
//todo 删除路由映射 事务
foreach ($ids as $id){
//删除路由映射
RouteMap::delRoute(RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
}
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('删除失败');
}
return parent::delete($ids);
return $this->success();
}
}
... ...
... ... @@ -5,6 +5,8 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Product;
use App\Models\RouteMap;
use Illuminate\Support\Facades\DB;
/**
* Class ProductLogic
... ... @@ -22,32 +24,39 @@ class ProductLogic extends BaseLogic
}
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);
DB::beginTransaction();
try {
$data = $param;
unset($data['route']);
$res = parent::save($data);
//路由映射
RouteMap::setRoute($param['route'], RouteMap::SOURCE_PRODUCT, $res['id'], $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败');
}
return $this->success();
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
DB::beginTransaction();
try {
parent::delete($ids);
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子分类
if(Product::where('pid', $id)->count()){
$this->fail("分类{$info['title']}存在子分类,不能删除");
//删除路由映射
RouteMap::delRoute(RouteMap::SOURCE_PRODUCT, $id, $this->user['project_id']);
}
//todo 是否有对应商品
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('删除失败');
}
return parent::delete($ids);
return $this->success();
}
}
... ...
... ... @@ -2,7 +2,12 @@
namespace App\Http\Requests\Bside\product;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Models\Product\Product;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
/**
* Class ProductRequest
... ... @@ -30,23 +35,74 @@ class ProductRequest extends FormRequest
public function rules()
{
return [
'title'=>'required|max:20',
'image'=>'required',
'keywords'=>'required|max:50',
'describe'=>'required|max:200',
'title' => 'required|max:200',
'route' => 'required|max:100',
'gallery' => ['required', 'array', function ($attribute, $value, $fail) {
foreach ($value as $v) {
if (empty($v['url'])) {
$fail('图片链接不能为空');
}
}
}],
'attrs' => ['required', 'array', function ($attribute, $value, $fail) {
foreach ($value as $v) {
if (empty($v['key'])) {
$fail('产品属性名不能为空');
}
if (empty($v['value'])) {
$fail('产品属性值不能为空');
}
}
}],
'category_id' => 'required',
'keywords' => 'required',
'intro' => 'required|max:500',
'content' => 'required',
'describe' => 'required|array',
'seo_mate' => ['required', 'array', function ($attribute, $value, $fail) {
if(empty($value['title'])){
$fail('SEO标题不能为空');
}
if(empty($value['description'])){
$fail('SEO描述不能为空');
}
if(empty($value['keyword'])){
$fail('SEO关键词不能为空');
}
}],
'related_product_id' => ['required', function ($attribute, $value, $fail) {
$value = array_filter(Arr::splitFilterToArray($value), 'intval');
if(count($value) > 16){
$fail('关联产品不能超过16个');
}
}],
'status' => ['required', Rule::in(array_keys(Product::statusMap()))],
];
}
public function messages()
{
return [
'title.required' => '请输入分类名称',
'title.max' => '分类名称不能超过20个字符',
'image.required' => '请上传分类图片',
'keywords.required' => '请输入分类关键词',
'keywords.max' => '分类关键词不能超过50个字符',
'describe.required' => '请输入分类描述',
'describe.max' => '分类描述不能超过200个字符',
'title.required' => '请输入产品标题',
'title.max' => '产品标题不能超过20个字符',
'route.required' => '请输入产品链接',
'route.max' => '产品链接不能超过100个字符',
'gallery.required' => '请上传产品图片',
'gallery.array' => '产品图片格式异常',
'attrs.required' => '请添加产品参数',
'attrs.array' => '产品参数格式异常',
'category_id.required' => '请选择分类',
'keywords.required' => '请添加关键词标签',
'intro.required' => '请输入短描述',
'intro.max' => '短描述不能超过20个字符',
'content.required' => '请输入产品描述',
'describe.required' => '请添加描述切换栏',
'describe.array' => '描述切换栏格式异常',
'seo_mate.required' => '请输入SEO',
'seo_mate.array' => 'SEO格式异常',
'related_product_id.required' => '请选择相关产品',
'status.required' => '请选择产品状态',
'status.in' => '产品状态值异常',
];
}
... ...
... ... @@ -125,46 +125,41 @@ class Base extends Model
$query->where($k,$v);
continue;
}
foreach ($v as $k1 => $v1){
if(!is_array($v1)){
$query->where($k1,$v1);
continue;
}
switch ($v1[0]){
switch ($v[0]){
case 'like':
// like查询 ['name|title'=> ['like','%a%']]
if (strpos($k1, '|') !== false) {
$query->where(function ($query) use ($k1,$v1) {
$item = explode('|', $k1);
if (strpos($k, '|') !== false) {
$query->where(function ($query) use ($k,$v) {
$item = explode('|', $k);
foreach ($item as $vo) {
$query->orWhere($vo, $v1[0], $v1[1]);
$query->orWhere($vo, $v[0], $v[1]);
}
});
} else {
$query->where($k1,$v1[0], $v1[1]);
$query->where($k, $v[0], $v[1]);
}
break;
case 'in':
// in查询 ['id'=>['in'=>[1,2,3]]]
$query->whereIn($k1, $v1[1]);
// in查询 ['id'=>['in',[1,2,3]]]
$query->whereIn($k, $v[1]);
break;
case 'no in':
// in查询 ['id'=>['not in'=>[1,2,3]]]
$query->whereNotIn($k1, $v1[1]);
// in查询 ['id'=>['not in',[1,2,3]]]
$query->whereNotIn($k, $v[1]);
break;
case 'between':
// in查询 ['id'=>['between'=>[create1,create2]]]
$query->whereBetween($k1, $v1[1]);
// in查询 ['id'=>['between',[create1,create2]]]
$query->whereBetween($k, $v[1]);
case 'not between':
// not between查询 ['created_at'=>['not between'=>['xxx', 'xxx]]]
$query->whereNotBetween($k1, $v1[1]);
// not between查询 ['created_at'=>['not between',['xxx', 'xxx]]]
$query->whereNotBetween($k, $v[1]);
break;
default:
$query->where($k1,$v1[0],$v1[1]);
$query->where($k,$v[0],$v[1]);
break;
}
}
}
});
return $query;
}
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Models\Product;
use App\Helper\Arr;
use App\Models\Base;
use Illuminate\Database\Eloquent\SoftDeletes;
... ... @@ -12,4 +13,81 @@ class Product extends Base
//设置关联表名
protected $table = 'gl_product';
const STATUS_DRAFT = 0;
const STATUS_ON = 1;
const STATUS_OFF = 2;
public static function statusMap(){
return [
self::STATUS_DRAFT => '草稿',
self::STATUS_ON => '已上架',
self::STATUS_OFF => '未上架',
];
}
public function setThumbAttribute($value){
$this->attributes['thumb'] = Arr::a2s($value);
}
public function getThumbAttribute($value){
return Arr::s2a($value);
}
public function setGalleryAttribute($value){
$this->attributes['gallery'] = Arr::a2s($value);
}
public function getGalleryAttribute($value){
return Arr::s2a($value);
}
public function setAttrsAttribute($value){
$this->attributes['attrs'] = Arr::a2s($value);
}
public function getAttrsAttribute($value){
return Arr::s2a($value);
}
public function setDescribeAttribute($value){
$this->attributes['describe'] = Arr::a2s($value);
}
public function getDescribeAttribute($value){
return Arr::s2a($value);
}
public function setSeoMateAttribute($value){
$this->attributes['seo_mate'] = Arr::a2s($value);
}
public function getSeoMateAttribute($value){
return Arr::s2a($value);
}
public function setCategoryIdAttribute($value){
$this->attributes['category_id'] = Arr::arrToSet($value);
}
public function getCategoryIdAttribute($value){
return Arr::setToArr($value);
}
public function setKeywordsAttribute($value){
$this->attributes['keywords'] = Arr::arrToSet($value, 'trim');
}
public function getKeywordsAttribute($value){
return Arr::setToArr($value, 'trim');
}
public function setRelatedProductIdAttribute($value){
$this->attributes['related_product_id'] = Arr::arrToSet($value);
}
public function getRelatedProductIdAttribute($value){
return Arr::setToArr($value);
}
}
... ...
... ... @@ -74,18 +74,13 @@ class RouteMap extends Model
* @param $source
* @param $source_id
* @param int $project_id
* @param bool $auto
* @return bool
* @throws \Exception
* @author zbj
* @date 2023/4/17
*/
public static function setRoute($title, $source, $source_id, $project_id = 0, $auto=false){
$route = $title;
if($auto){
public static function setRoute($title, $source, $source_id, $project_id = 0){
$route = self::generateRoute($title, $source, $source_id, $project_id);
}
if(!$route){
throw new \Exception('路由不能为空');
}
... ... @@ -150,7 +145,7 @@ class RouteMap extends Model
* @author zbj
* @date 2023/4/17
*/
public function delRoute($source, $source_id, $project_id){
public static function delRoute($source, $source_id, $project_id){
return self::where('project_id', $project_id)->where('source', $source)->where('source_id', $source_id)->delete();
}
}
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Utils;
use App\Enums\Common\Common;
use App\Helper\Arr;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
... ... @@ -17,7 +18,12 @@ class LogUtils
public static function error($title, $params = [], $response = [])
{
$route=Route::current();
$side=$route->action['prefix']??Common::A;
if(!empty($route->action['prefix'])){
$prefix = Arr::splitFilterToArray($route->action['prefix'], 'trim', '/');
$side = $prefix[0];
}else{
$side = Common::A;
}
$params = is_array($params) ? json_encode($params, JSON_UNESCAPED_UNICODE) : $params;
$response = is_array($response) || is_object($response) ? json_encode($response, JSON_UNESCAPED_UNICODE) : $response;
Log::channel($side.'side')->error("$title::请求参数:$params--------响应:$response");
... ... @@ -33,7 +39,12 @@ class LogUtils
public static function info($title, $params = [], $response = [])
{
$route=Route::current();
$side=$route->action['prefix']??Common::A;
if(!empty($route->action['prefix'])){
$prefix = Arr::splitFilterToArray($route->action['prefix'], 'trim', '/');
$side = $prefix[0];
}else{
$side = Common::A;
}
$params = is_array($params) ? json_encode($params, JSON_UNESCAPED_UNICODE) : $params;
$response = is_array($response) || is_object($response) ? json_encode($response, JSON_UNESCAPED_UNICODE) : $response;
Log::channel($side.'side')->info("$title::请求参数:$params--------响应:$response");
... ...
... ... @@ -14,32 +14,55 @@ Route::middleware(['bloginauth'])->group(function () {
//获取当前登录用户项目详情
Route::any('/get_project', [\App\Http\Controllers\Bside\ComController::class, 'get_project'])->name('get_project');
//用户相关路由
Route::any('/user/add', [\App\Http\Controllers\Bside\UserController::class, 'add'])->name('user_add');
Route::any('/user/edit', [\App\Http\Controllers\Bside\UserController::class, 'edit'])->name('user_edit');
Route::any('/user/status', [\App\Http\Controllers\Bside\UserController::class, 'status'])->name('user_status');
Route::any('/user/lists', [\App\Http\Controllers\Bside\UserController::class, 'lists'])->name('user_lists');
Route::any('/user/del', [\App\Http\Controllers\Bside\UserController::class, 'del'])->name('user_del');
Route::prefix('user')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\UserController::class, 'lists'])->name('user_lists');
Route::any('/add', [\App\Http\Controllers\Bside\UserController::class, 'add'])->name('user_add');
Route::any('/edit', [\App\Http\Controllers\Bside\UserController::class, 'edit'])->name('user_edit');
Route::any('/status', [\App\Http\Controllers\Bside\UserController::class, 'status'])->name('user_status');
Route::any('/info', [\App\Http\Controllers\Bside\UserController::class, 'info'])->name('user_info');
Route::any('/del', [\App\Http\Controllers\Bside\UserController::class, 'del'])->name('user_del');
});
//用户角色相关路由
Route::any('/project_role/lists', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'lists'])->name('project_role_lists');
Route::any('/project_role/get_role_menu', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'get_role_menu'])->name('project_get_role_add');
Route::any('/project_role/add', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'add'])->name('project_role_add');
Route::any('/project_role/edit', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'edit'])->name('project_role_edit');
Route::any('/project_role/status', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'status'])->name('project_role_status');
Route::any('/project_role/del', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'del'])->name('project_role_del');
Route::prefix('role')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'lists'])->name('project_role_lists');
Route::any('/get_role_menu', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'get_role_menu'])->name('project_get_role_add');
Route::any('/add', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'add'])->name('project_role_add');
Route::any('/edit', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'edit'])->name('project_role_edit');
Route::any('/info', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'status'])->name('project_role_info');
Route::any('/status', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'status'])->name('project_role_status');
Route::any('/del', [\App\Http\Controllers\Bside\ProjectRoleController::class, 'del'])->name('project_role_del');
});
//group相关路由
Route::any('/project_group/add', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'add'])->name('project_group_add');
Route::any('/project_group/edit', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'edit'])->name('project_group_edit');
Route::any('/project_group/lists', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'lists'])->name('project_group_lists');
Route::any('/project_group/del', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'del'])->name('project_group_del');
Route::any('/project_group/get_user_lists', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'get_user_lists'])->name('project_group_get_user_lists');
//group相关路
Route::prefix('group')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'lists'])->name('project_group_lists');
Route::any('/add', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'add'])->name('project_group_add');
Route::any('/edit', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'edit'])->name('project_group_edit');
Route::any('/info', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'info'])->name('project_group_info');
Route::any('/del', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'del'])->name('project_group_del');
Route::any('/get_user_lists', [\App\Http\Controllers\Bside\ProjectGroupController::class, 'get_user_lists'])->name('project_group_get_user_lists');
});
//新闻相关路由
Route::prefix('news')->group(function () {
//分类
Route::any('/category/add', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'add'])->name('news_category_add');
Route::any('/category/info', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'info'])->name('news_category_info');
Route::any('/category/edit', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'edit'])->name('news_category_edit');
Route::any('/category/lists', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'lists'])->name('news_category_lists');
Route::any('/category/del', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'del'])->name('news_category_del');
Route::any('/category/status', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'status'])->name('news_category_status');
//新闻
Route::any('/add', [\App\Http\Controllers\Bside\News\NewsController::class, 'add'])->name('news_category_add');
Route::any('/info', [\App\Http\Controllers\Bside\News\NewsController::class, 'info'])->name('news_category_info');
Route::any('/edit', [\App\Http\Controllers\Bside\News\NewsController::class, 'edit'])->name('news_category_edit');
Route::any('/lists', [\App\Http\Controllers\Bside\News\NewsController::class, 'lists'])->name('news_category_lists');
Route::any('/del', [\App\Http\Controllers\Bside\News\NewsController::class, 'del'])->name('news_category_del');
Route::any('/status', [\App\Http\Controllers\Bside\News\NewsController::class, 'status'])->name('news_category_status');
});
//新闻分类相关路由
Route::any('/news_category/add', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'add'])->name('news_category_add');
Route::any('/news_category/edit', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'edit'])->name('news_category_edit');
Route::any('/news_category/lists', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'lists'])->name('news_category_lists');
Route::any('/news_category/del', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'del'])->name('news_category_del');
Route::any('/news_category/status', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'get_user_lists'])->name('news_category_status');
//产品
... ...