作者 Your Name

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

@@ -118,4 +118,8 @@ class ComController extends BaseController @@ -118,4 +118,8 @@ class ComController extends BaseController
118 } 118 }
119 $this->response('success'); 119 $this->response('success');
120 } 120 }
  121 +
  122 + public function uploads(){
  123 +
  124 + }
121 } 125 }
  1 +<?php
  2 +
  3 +namespace App\Http\Controllers\Bside;
  4 +
  5 +use App\Helper\Arr;
  6 +use App\Http\Logic\Bside\DepartmentLogic;
  7 +use App\Http\Requests\Bside\DepartmentRequest;
  8 +use App\Rules\Ids;
  9 +use Illuminate\Http\Request;
  10 +
  11 +/**
  12 + * Class DepartmentController
  13 + * @package App\Http\Controllers\Bside
  14 + * @author zbj
  15 + * @date 2023/4/18
  16 + */
  17 +class DepartmentController extends BaseController
  18 +{
  19 +
  20 + public function index(DepartmentLogic $logic)
  21 + {
  22 + $map = [];
  23 + if(!empty($this->param['search'])){
  24 + $map[] = ['title', 'like', "%{$this->param['search']}%"];
  25 + }
  26 + $sort = ['id' => 'desc'];
  27 + $data = $logic->getList($map, $sort, ['id', 'pid', 'title'],0);
  28 + return $this->success(Arr::listToTree($data));
  29 + }
  30 +
  31 + public function info(Request $request, DepartmentLogic $logic){
  32 + $request->validate([
  33 + 'id'=>'required'
  34 + ],[
  35 + 'id.required' => 'ID不能为空'
  36 + ]);
  37 + $data = $logic->getInfo($this->param['id']);
  38 + return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'manager_uids', 'remark']));
  39 + }
  40 +
  41 + public function save(DepartmentRequest $request, DepartmentLogic $logic)
  42 + {
  43 + $data = $logic->save($this->param);
  44 + return $this->success($data);
  45 + }
  46 +
  47 + public function delete(Request $request, DepartmentLogic $logic)
  48 + {
  49 + $request->validate([
  50 + 'ids'=>['required', new Ids()]
  51 + ],[
  52 + 'ids.required' => 'ID不能为空'
  53 + ]);
  54 +
  55 + $data = $logic->delete($this->param['ids']);
  56 + return $this->success($data);
  57 + }
  58 +}
@@ -4,6 +4,8 @@ namespace App\Http\Controllers\Bside\News; @@ -4,6 +4,8 @@ namespace App\Http\Controllers\Bside\News;
4 4
5 use App\Enums\Common\Code; 5 use App\Enums\Common\Code;
6 use App\Http\Controllers\Bside\BaseController; 6 use App\Http\Controllers\Bside\BaseController;
  7 +use App\Http\Logic\Bside\News\NewsCategoryLogic;
  8 +use App\Http\Logic\Bside\News\NewsLogic;
7 use App\Http\Requests\Bside\News\NewsCategoryRequest; 9 use App\Http\Requests\Bside\News\NewsCategoryRequest;
8 use App\Models\News\News as NewsModel; 10 use App\Models\News\News as NewsModel;
9 use App\Models\News\NewsCategory as NewsCategoryModel; 11 use App\Models\News\NewsCategory as NewsCategoryModel;
@@ -20,7 +22,7 @@ class NewsCategoryController extends BaseController @@ -20,7 +22,7 @@ class NewsCategoryController extends BaseController
20 */ 22 */
21 public function lists(NewsCategoryModel $newsCategory){ 23 public function lists(NewsCategoryModel $newsCategory){
22 //搜索条件 24 //搜索条件
23 - $lists = $newsCategory->lists($this->map,$this->page,$this->row,$this->order); 25 + $lists = $newsCategory->lists($this->map,$this->page,$this->row,'sort');
24 $this->response('success',Code::SUCCESS,$lists); 26 $this->response('success',Code::SUCCESS,$lists);
25 } 27 }
26 28
@@ -48,37 +50,12 @@ class NewsCategoryController extends BaseController @@ -48,37 +50,12 @@ class NewsCategoryController extends BaseController
48 * @author :liyuhang 50 * @author :liyuhang
49 * @method 51 * @method
50 */ 52 */
51 - public function add(NewsCategoryRequest $request,NewsCategoryModel $newsCategoryModel,NewsModel $newsModel){ 53 + public function add(NewsCategoryRequest $request,NewsCategoryLogic $newsCategoryLogic){
52 $request->validated(); 54 $request->validated();
53 - $this->param['project_id'] = $this->user['project_id'];  
54 - $this->param['operator_id'] = $this->uid;  
55 - $this->param['create_id'] = $this->uid;  
56 - DB::beginTransaction();  
57 - $rs = $newsCategoryModel->add($this->param);  
58 - if($rs === false){  
59 - DB::rollBack();  
60 - $this->response('error',Code::USER_ERROR);  
61 - }  
62 - //判断当前分内是否为一级分类  
63 - if(isset($this->param['pid']) && !empty($this->param['pid'])){  
64 - //查看当前上级分类下是否有其他分类  
65 - $cate_info = $newsCategoryModel->read(['pid'=>$this->param['pid'],'id'=>['!=',$newsCategoryModel->id]]);  
66 - if($cate_info === false){  
67 - //查看当前上一级分类下是否有商品  
68 - $news_info = $newsModel->read(['category_id'=>$this->param['pid'],'pid'=>0]);  
69 - if($news_info !== false){  
70 - //更新所有商品到当前分类  
71 - $rs = $newsModel->edit(['category_id'=>$newsCategoryModel->id],['category_id'=>$this->param['pid']]);  
72 - if($rs === false){  
73 - DB::rollBack();  
74 - $this->response('error',Code::USER_ERROR);  
75 - }  
76 - }  
77 - }  
78 - }  
79 - DB::commit(); 55 + //添加商品时,验证分类上级分类是否有商品,有则更新到当前分类中,没有时直接添加
  56 + $newsCategoryLogic->add_news_category();
80 //TODO::写入日志 57 //TODO::写入日志
81 - $this->response('success',Code::SUCCESS); 58 + $this->response('success',Code::SUCCESS,[]);
82 } 59 }
83 60
84 /** 61 /**
@@ -79,6 +79,8 @@ class NewsController extends BaseController @@ -79,6 +79,8 @@ class NewsController extends BaseController
79 $this->param['create_id'] = $this->uid; 79 $this->param['create_id'] = $this->uid;
80 $this->param['operator_id'] = $this->uid; 80 $this->param['operator_id'] = $this->uid;
81 $this->param['project_id'] = $this->user['project_id']; 81 $this->param['project_id'] = $this->user['project_id'];
  82 + //多个分类按逗号隔开
  83 + $this->param['category_id'] = ','.$this->param['category_id'].',';
82 //TODO::路由映射 84 //TODO::路由映射
83 $rs = $news->add($this->param); 85 $rs = $news->add($this->param);
84 if($rs === false){ 86 if($rs === false){
@@ -101,6 +103,8 @@ class NewsController extends BaseController @@ -101,6 +103,8 @@ class NewsController extends BaseController
101 'id.required' => 'ID不能为空', 103 'id.required' => 'ID不能为空',
102 ]); 104 ]);
103 $this->param['operator_id'] = $this->uid; 105 $this->param['operator_id'] = $this->uid;
  106 + //多个分类按逗号隔开
  107 + $this->param['category_id'] = ','.$this->param['category_id'].',';
104 $rs = $news->edit($this->param,['id'=>$this->param['id']]); 108 $rs = $news->edit($this->param,['id'=>$this->param['id']]);
105 if($rs === false){ 109 if($rs === false){
106 $this->response('error',Code::USER_ERROR); 110 $this->response('error',Code::USER_ERROR);
@@ -56,6 +56,4 @@ class CategoryController extends BaseController @@ -56,6 +56,4 @@ class CategoryController extends BaseController
56 $data = $logic->delete($this->param['ids']); 56 $data = $logic->delete($this->param['ids']);
57 return $this->success($data); 57 return $this->success($data);
58 } 58 }
59 -  
60 - //todo Ai生成 关键词和描述  
61 } 59 }
@@ -138,7 +138,7 @@ class BaseLogic @@ -138,7 +138,7 @@ class BaseLogic
138 $this->fail('数据不存在或者已经删除'); 138 $this->fail('数据不存在或者已经删除');
139 } 139 }
140 } 140 }
141 - 141 + $param['project_id'] = $this->user['project_id'];
142 foreach ($param as $name => $value){ 142 foreach ($param as $name => $value){
143 $this->model[$name] = $value; 143 $this->model[$name] = $value;
144 } 144 }
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Bside;
  4 +
  5 +use App\Helper\Arr;
  6 +use App\Models\Department;
  7 +
  8 +/**
  9 + * Class DepartmentLogic
  10 + * @package App\Http\Logic\Bside\Department
  11 + * @author zbj
  12 + * @date 2023/4/18
  13 + */
  14 +class DepartmentLogic extends BaseLogic
  15 +{
  16 + public function __construct()
  17 + {
  18 + parent::__construct();
  19 +
  20 + $this->model = new Department();
  21 + }
  22 +
  23 + public function save($param){
  24 + if(!empty($param['pid'])){
  25 + if(!empty($param['id']) && $param['pid'] == $param['id']){
  26 + $this->fail('上级部门不能是本部门');
  27 + }
  28 + $p_cate = $this->getCacheInfo($param['pid']);
  29 + if(!$p_cate){
  30 + $this->fail('上级部门不存在');
  31 + }
  32 + }
  33 + return parent::save($param);
  34 + }
  35 +
  36 + public function delete($ids){
  37 + $ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
  38 + foreach ($ids as $id){
  39 + $info = $this->getCacheInfo($id);
  40 + if(!$info){
  41 + continue;
  42 + }
  43 + //是否有子部门
  44 + if(Department::where('project_id', $this->user['project_id'])->where('pid', $id)->count()){
  45 + $this->fail("部门{$info['title']}存在下级部门,不能删除");
  46 + }
  47 + }
  48 + return parent::delete($ids);
  49 + }
  50 +}
@@ -27,7 +27,7 @@ class CategoryLogic extends BaseLogic @@ -27,7 +27,7 @@ class CategoryLogic extends BaseLogic
27 if(!empty($param['id']) && $param['pid'] == $param['id']){ 27 if(!empty($param['id']) && $param['pid'] == $param['id']){
28 $this->fail('上级分类不能是本分类'); 28 $this->fail('上级分类不能是本分类');
29 } 29 }
30 - $p_cate = Category::find($param['pid']); 30 + $p_cate = $this->getCacheInfo($param['pid']);
31 if(!$p_cate){ 31 if(!$p_cate){
32 $this->fail('上级分类不存在'); 32 $this->fail('上级分类不存在');
33 } 33 }
@@ -43,7 +43,7 @@ class CategoryLogic extends BaseLogic @@ -43,7 +43,7 @@ class CategoryLogic extends BaseLogic
43 continue; 43 continue;
44 } 44 }
45 //是否有子分类 45 //是否有子分类
46 - if(Category::where('pid', $id)->count()){ 46 + if(Category::where('project_id', $this->user['project_id'])->where('pid', $id)->count()){
47 $this->fail("分类{$info['title']}存在子分类,不能删除"); 47 $this->fail("分类{$info['title']}存在子分类,不能删除");
48 } 48 }
49 //是否有对应商品 49 //是否有对应商品
  1 +<?php
  2 +
  3 +namespace App\Http\Requests\Bside;
  4 +
  5 +use Illuminate\Foundation\Http\FormRequest;
  6 +
  7 +/**
  8 + * Class DepartmentRequest
  9 + * @package App\Http\Requests\Bside\product
  10 + * @author zbj
  11 + * @date 2023/4/18
  12 + */
  13 +class DepartmentRequest extends FormRequest
  14 +{
  15 + /**
  16 + * Determine if the user is authorized to make this request.
  17 + *
  18 + * @return bool
  19 + */
  20 + public function authorize()
  21 + {
  22 + return true;
  23 + }
  24 +
  25 + /**
  26 + * Get the validation rules that apply to the request.
  27 + *
  28 + * @return array
  29 + */
  30 + public function rules()
  31 + {
  32 + return [
  33 + 'title'=>'required|max:50',
  34 + 'remark'=>'max:200',
  35 + ];
  36 + }
  37 +
  38 + public function messages()
  39 + {
  40 + return [
  41 + 'title.required' => '请输入部门名称',
  42 + 'title.max' => '部门名称不能超过50个字符',
  43 + 'remark.max' => '备注不能超过200个字符',
  44 + ];
  45 + }
  46 +
  47 +}
@@ -24,7 +24,7 @@ class NewsCategoryRequest extends FormRequest @@ -24,7 +24,7 @@ class NewsCategoryRequest extends FormRequest
24 public function rules() 24 public function rules()
25 { 25 {
26 return [ 26 return [
27 - 'name'=>'required|max:100', 27 + 'name'=>'required|max:100||unique:gl_news_category',
28 ]; 28 ];
29 } 29 }
30 30
@@ -19,7 +19,7 @@ class ProjectGroupRequest extends FormRequest @@ -19,7 +19,7 @@ class ProjectGroupRequest extends FormRequest
19 public function rules() 19 public function rules()
20 { 20 {
21 return [ 21 return [
22 - 'name' => 'required|max:255', 22 + 'name' => 'required|max:255||unique:gl_project_group',
23 ]; 23 ];
24 } 24 }
25 25
@@ -19,7 +19,7 @@ class ProjectRoleRequest extends FormRequest @@ -19,7 +19,7 @@ class ProjectRoleRequest extends FormRequest
19 public function rules() 19 public function rules()
20 { 20 {
21 return [ 21 return [
22 - 'name'=>'required|max:11', 22 + 'name'=>'required|max:11||unique:gl_project_role',
23 'role_menu'=>'required|string', 23 'role_menu'=>'required|string',
24 ]; 24 ];
25 } 25 }
@@ -24,7 +24,7 @@ class UserRequest extends FormRequest @@ -24,7 +24,7 @@ class UserRequest extends FormRequest
24 public function rules() 24 public function rules()
25 { 25 {
26 return [ 26 return [
27 - 'mobile'=>'required|string|max:11', 27 + 'mobile'=>'required|string|max:11||unique:gl_project_user',
28 'password'=>'required|string|min:5', 28 'password'=>'required|string|min:5',
29 'name'=>'required|max:20', 29 'name'=>'required|max:20',
30 'role_id'=>'required' 30 'role_id'=>'required'
@@ -30,7 +30,7 @@ class AttrRequest extends FormRequest @@ -30,7 +30,7 @@ class AttrRequest extends FormRequest
30 public function rules() 30 public function rules()
31 { 31 {
32 return [ 32 return [
33 - 'title' => 'required|max:30', 33 + 'title' => 'required|max:50',
34 'remark' => 'max:200', 34 'remark' => 'max:200',
35 'values' => 'required|array' 35 'values' => 'required|array'
36 ]; 36 ];
@@ -40,7 +40,7 @@ class AttrRequest extends FormRequest @@ -40,7 +40,7 @@ class AttrRequest extends FormRequest
40 { 40 {
41 return [ 41 return [
42 'title.required' => '请输入参数名称', 42 'title.required' => '请输入参数名称',
43 - 'title.max' => '参数名称不能超过30个字符', 43 + 'title.max' => '参数名称不能超过50个字符',
44 'remark.max' => '备注不能超过200个字符', 44 'remark.max' => '备注不能超过200个字符',
45 'values.required' => '请添加参数值', 45 'values.required' => '请添加参数值',
46 'values.array' => '参数值格式异常', 46 'values.array' => '参数值格式异常',
@@ -30,7 +30,7 @@ class CategoryRequest extends FormRequest @@ -30,7 +30,7 @@ class CategoryRequest extends FormRequest
30 public function rules() 30 public function rules()
31 { 31 {
32 return [ 32 return [
33 - 'title'=>'required|max:20', 33 + 'title'=>'required|max:50',
34 'image'=>'required', 34 'image'=>'required',
35 'keywords'=>'required|max:50', 35 'keywords'=>'required|max:50',
36 'describe'=>'required|max:200', 36 'describe'=>'required|max:200',
@@ -41,7 +41,7 @@ class CategoryRequest extends FormRequest @@ -41,7 +41,7 @@ class CategoryRequest extends FormRequest
41 { 41 {
42 return [ 42 return [
43 'title.required' => '请输入分类名称', 43 'title.required' => '请输入分类名称',
44 - 'title.max' => '分类名称不能超过20个字符', 44 + 'title.max' => '分类名称不能超过50个字符',
45 'image.required' => '请上传分类图片', 45 'image.required' => '请上传分类图片',
46 'keywords.required' => '请输入分类关键词', 46 'keywords.required' => '请输入分类关键词',
47 'keywords.max' => '分类关键词不能超过50个字符', 47 'keywords.max' => '分类关键词不能超过50个字符',
@@ -30,7 +30,7 @@ class DescribeRequest extends FormRequest @@ -30,7 +30,7 @@ class DescribeRequest extends FormRequest
30 public function rules() 30 public function rules()
31 { 31 {
32 return [ 32 return [
33 - 'title'=>'required|max:30', 33 + 'title'=>'required|max:50',
34 'describe'=>'required', 34 'describe'=>'required',
35 ]; 35 ];
36 } 36 }
@@ -39,7 +39,7 @@ class DescribeRequest extends FormRequest @@ -39,7 +39,7 @@ class DescribeRequest extends FormRequest
39 { 39 {
40 return [ 40 return [
41 'title.required' => '请输入描述名称', 41 'title.required' => '请输入描述名称',
42 - 'title.max' => '描述名称不能超过30个字符', 42 + 'title.max' => '描述名称不能超过50个字符',
43 'seo_title.required' => '请输入描述内容', 43 'seo_title.required' => '请输入描述内容',
44 ]; 44 ];
45 } 45 }
@@ -30,7 +30,7 @@ class KeywordRequest extends FormRequest @@ -30,7 +30,7 @@ class KeywordRequest extends FormRequest
30 public function rules() 30 public function rules()
31 { 31 {
32 return [ 32 return [
33 - 'title'=>'required|max:30', 33 + 'title'=>'required|max:50',
34 'seo_title'=>'max:200', 34 'seo_title'=>'max:200',
35 'seo_keywords'=>'max:200', 35 'seo_keywords'=>'max:200',
36 'seo_description'=>'max:200', 36 'seo_description'=>'max:200',
@@ -41,7 +41,7 @@ class KeywordRequest extends FormRequest @@ -41,7 +41,7 @@ class KeywordRequest extends FormRequest
41 { 41 {
42 return [ 42 return [
43 'title.required' => '请输入关键词', 43 'title.required' => '请输入关键词',
44 - 'title.max' => '关键词不能超过30个字符', 44 + 'title.max' => '关键词不能超过50个字符',
45 'seo_title.max' => 'SEO标题不能超过200个字符', 45 'seo_title.max' => 'SEO标题不能超过200个字符',
46 'seo_keywords.max' => 'SEO关键词不能超过200个字符', 46 'seo_keywords.max' => 'SEO关键词不能超过200个字符',
47 'seo_description.max' => 'SEO描述不能超过200个字符', 47 'seo_description.max' => 'SEO描述不能超过200个字符',
@@ -94,7 +94,7 @@ class ProductRequest extends FormRequest @@ -94,7 +94,7 @@ class ProductRequest extends FormRequest
94 'category_id.required' => '请选择分类', 94 'category_id.required' => '请选择分类',
95 'keywords.required' => '请添加关键词标签', 95 'keywords.required' => '请添加关键词标签',
96 'intro.required' => '请输入短描述', 96 'intro.required' => '请输入短描述',
97 - 'intro.max' => '短描述不能超过20个字符', 97 + 'intro.max' => '短描述不能超过500个字符',
98 'content.required' => '请输入产品描述', 98 'content.required' => '请输入产品描述',
99 'describe.required' => '请添加描述切换栏', 99 'describe.required' => '请添加描述切换栏',
100 'describe.array' => '描述切换栏格式异常', 100 'describe.array' => '描述切换栏格式异常',
  1 +<?php
  2 +
  3 +namespace App\Models;
  4 +
  5 +use Illuminate\Database\Eloquent\SoftDeletes;
  6 +
  7 +class Department extends Base
  8 +{
  9 + use SoftDeletes;
  10 +
  11 + //设置关联表名
  12 + protected $table = 'gl_department';
  13 +
  14 +}
@@ -88,7 +88,7 @@ Route::middleware(['bloginauth'])->group(function () { @@ -88,7 +88,7 @@ Route::middleware(['bloginauth'])->group(function () {
88 //产品 88 //产品
89 Route::get('/', [\App\Http\Controllers\Bside\Product\ProductController::class, 'index'])->name('product'); 89 Route::get('/', [\App\Http\Controllers\Bside\Product\ProductController::class, 'index'])->name('product');
90 Route::get('/info', [\App\Http\Controllers\Bside\Product\ProductController::class, 'info'])->name('product_info'); 90 Route::get('/info', [\App\Http\Controllers\Bside\Product\ProductController::class, 'info'])->name('product_info');
91 - Route::post('/save', [\App\Http\Controllers\Bside\Product\ProductController::class, 'save'])->name(' '); 91 + Route::post('/save', [\App\Http\Controllers\Bside\Product\ProductController::class, 'save'])->name('product_save');
92 Route::any('/delete', [\App\Http\Controllers\Bside\Product\ProductController::class, 'delete'])->name('product_delete'); 92 Route::any('/delete', [\App\Http\Controllers\Bside\Product\ProductController::class, 'delete'])->name('product_delete');
93 93
94 //产品分类 94 //产品分类
@@ -115,6 +115,14 @@ Route::middleware(['bloginauth'])->group(function () { @@ -115,6 +115,14 @@ Route::middleware(['bloginauth'])->group(function () {
115 Route::post('describe/save', [\App\Http\Controllers\Bside\Product\DescribeController::class, 'save'])->name('product_describe_save'); 115 Route::post('describe/save', [\App\Http\Controllers\Bside\Product\DescribeController::class, 'save'])->name('product_describe_save');
116 Route::any('describe/delete', [\App\Http\Controllers\Bside\Product\DescribeController::class, 'delete'])->name('product_describe_delete'); 116 Route::any('describe/delete', [\App\Http\Controllers\Bside\Product\DescribeController::class, 'delete'])->name('product_describe_delete');
117 }); 117 });
  118 +
  119 + //组织架构
  120 + Route::prefix('department')->group(function () {
  121 + Route::get('/', [\App\Http\Controllers\Bside\DepartmentController::class, 'index'])->name('department');
  122 + Route::get('/info', [\App\Http\Controllers\Bside\DepartmentController::class, 'info'])->name('department_info');
  123 + Route::post('/save', [\App\Http\Controllers\Bside\DepartmentController::class, 'save'])->name('department_save');
  124 + Route::any('/delete', [\App\Http\Controllers\Bside\DepartmentController::class, 'delete'])->name('department_delete');
  125 + });
118 }); 126 });
119 127
120 //无需登录验证的路由组 128 //无需登录验证的路由组