作者 zhl

Merge remote-tracking branch 'origin/master' into zhl

@@ -4,6 +4,7 @@ namespace App\Console\Commands\Import; @@ -4,6 +4,7 @@ namespace App\Console\Commands\Import;
4 4
5 use App\Http\Logic\Bside\Blog\BlogLogic; 5 use App\Http\Logic\Bside\Blog\BlogLogic;
6 use App\Http\Logic\Bside\News\NewsLogic; 6 use App\Http\Logic\Bside\News\NewsLogic;
  7 +use App\Http\Logic\Bside\Product\ProductLogic;
7 use App\Models\Import\ImportTask; 8 use App\Models\Import\ImportTask;
8 use App\Services\ProjectServer; 9 use App\Services\ProjectServer;
9 use Illuminate\Console\Command; 10 use Illuminate\Console\Command;
@@ -80,11 +81,14 @@ class ProjectImport extends Command @@ -80,11 +81,14 @@ class ProjectImport extends Command
80 if ((new NewsLogic())->importNews($task->project_id, $task->user_id, $v)) { 81 if ((new NewsLogic())->importNews($task->project_id, $task->user_id, $v)) {
81 $success_count += 1; 82 $success_count += 1;
82 } 83 }
83 - }  
84 - if ($task->type == ImportTask::TYPE_BLOG) { 84 + } elseif ($task->type == ImportTask::TYPE_BLOG) {
85 if ((new BlogLogic())->importBlog($task->project_id, $task->user_id, $v)) { 85 if ((new BlogLogic())->importBlog($task->project_id, $task->user_id, $v)) {
86 $success_count += 1; 86 $success_count += 1;
87 } 87 }
  88 + } else {
  89 + if ((new ProductLogic())->importProduct($task->project_id, $task->user_id, $v)) {
  90 + $success_count += 1;
  91 + }
88 } 92 }
89 } 93 }
90 } 94 }
@@ -5,9 +5,12 @@ namespace App\Http\Controllers\Aside\Optimize; @@ -5,9 +5,12 @@ namespace App\Http\Controllers\Aside\Optimize;
5 use App\Enums\Common\Code; 5 use App\Enums\Common\Code;
6 use App\Http\Controllers\Aside\BaseController; 6 use App\Http\Controllers\Aside\BaseController;
7 use App\Http\Logic\Aside\Optimize\OptimizeLogic; 7 use App\Http\Logic\Aside\Optimize\OptimizeLogic;
  8 +use App\Models\ASide\APublicModel;
  9 +use App\Models\Channel\Channel;
8 use App\Models\Domain\DomainInfo; 10 use App\Models\Domain\DomainInfo;
9 use App\Models\Manage\Manage; 11 use App\Models\Manage\Manage;
10 use App\Models\Project\Project; 12 use App\Models\Project\Project;
  13 +use App\Models\Task\Task;
11 use Illuminate\Support\Facades\DB; 14 use Illuminate\Support\Facades\DB;
12 15
13 /** 16 /**
@@ -32,14 +35,8 @@ class OptimizeController extends BaseController @@ -32,14 +35,8 @@ class OptimizeController extends BaseController
32 $query = $this->searchParam($query); 35 $query = $this->searchParam($query);
33 $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); 36 $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
34 if(!empty($lists['list'])){ 37 if(!empty($lists['list'])){
35 - $manager = new Manage();  
36 - $domainModel = new DomainInfo();  
37 foreach ($lists['list'] as $k => $v){ 38 foreach ($lists['list'] as $k => $v){
38 - $v['plan'] = $project::planMap()[$v['plan']];  
39 - $v['optimist_mid_name'] = $manager->getName($v['optimist_mid']);  
40 - $v['tech_mid_name'] = $manager->getName($v['tech_mid']);  
41 - $v['autologin_code'] = getAutoLoginCode($v['id']);  
42 - $v['domain'] = $domainModel->getDomain($v['domain']); 39 + $v = $this->handleParam($v);
43 $lists['list'][$k] = $v; 40 $lists['list'][$k] = $v;
44 } 41 }
45 } 42 }
@@ -47,6 +44,40 @@ class OptimizeController extends BaseController @@ -47,6 +44,40 @@ class OptimizeController extends BaseController
47 } 44 }
48 45
49 /** 46 /**
  47 + * @remark :参数处理
  48 + * @name :handleParam
  49 + * @author :lyh
  50 + * @method :post
  51 + * @time :2023/8/18 14:44
  52 + */
  53 + public function handleParam(&$item){
  54 + if($item['type'] != Project::TYPE_ZERO){
  55 + $data = APublicModel::getNumByProjectId($item['id']);
  56 + }
  57 + $manageModel = new Manage();
  58 + $item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0);
  59 + $item['build_leader'] = $manageModel->getName($item['leader_mid']);
  60 + $item['build_manager'] = $manageModel->getName($item['manager_mid']);
  61 + $item['build_designer'] = $manageModel->getName($item['designer_mid']);
  62 + $item['build_tech'] = $manageModel->getName($item['tech_mid']);
  63 + $item['optimize_manager'] = $manageModel->getName($item['optimize_manager_mid']);
  64 + $item['optimize_optimist'] = $manageModel->getName($item['optimize_optimist_mid']);
  65 + $item['optimize_assist'] = $manageModel->getName($item['optimize_assist_mid']);
  66 + $item['optimize_tech'] = $manageModel->getName($item['optimize_tech_mid']);
  67 + $item['plan'] = Project::planMap()[$item['plan']];
  68 + $item['created_at'] = date('Y年m月d日', strtotime($item['cooperate_date']));
  69 + $item['autologin_code'] = getAutoLoginCode($item['id']);
  70 + $domainModel = new DomainInfo();
  71 + $item['domain'] = !empty($item['domain']) ? $domainModel->getDomain($item['domain']) : '';
  72 + $item['product_num'] = $data['product'] ?? 0;
  73 + $item['keyword_num'] = $item['key'] ?? 0;
  74 + $item['autologin_code'] = getAutoLoginCode($item['id']);
  75 + $item['article_num'] = ($data['blog'] ?? 0) + ($data['news'] ?? 0);
  76 + $item['task_finish_num'] = Task::getNumByProjectId($item['id'], Task::STATUS_DOWN);
  77 + $item['task_pending_num'] = Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]);
  78 + return $item;
  79 + }
  80 + /**
50 * @remark :查询字段处理 81 * @remark :查询字段处理
51 * @name :selectParam 82 * @name :selectParam
52 * @author :lyh 83 * @author :lyh
@@ -57,14 +88,32 @@ class OptimizeController extends BaseController @@ -57,14 +88,32 @@ class OptimizeController extends BaseController
57 $select = [ 88 $select = [
58 'gl_project.id AS id', 89 'gl_project.id AS id',
59 'gl_project.title AS title', 90 'gl_project.title AS title',
  91 + 'gl_project.channel AS channel',
60 'gl_project.company AS company', 92 'gl_project.company AS company',
61 'gl_project.type AS type', 93 'gl_project.type AS type',
62 - 'gl_project_deploy_build.service_duration AS service_duration',  
63 - 'gl_project_deploy_build.plan AS plan', 94 + 'gl_project.created_at AS created_at',
  95 + 'gl_project.cooperate_date AS cooperate_date',
64 'gl_project_payment.amount AS amount', 96 'gl_project_payment.amount AS amount',
65 - 'gl_project_deploy_optimize.optimist_mid AS optimist_mid',  
66 - 'gl_project_deploy_optimize.tech_mid AS tech_mid', 97 + 'gl_project_deploy_build.dept_id AS dept_id',
  98 + 'gl_project_deploy_build.keyword_num AS key',
  99 + 'gl_project_deploy_build.service_duration AS day',
  100 + 'gl_project_deploy_build.leader_mid AS leader_mid',
  101 + 'gl_project_deploy_build.manager_mid AS manager_mid',
  102 + 'gl_project_deploy_build.designer_mid AS designer_mid',
  103 + 'gl_project_deploy_build.tech_mid AS tech_mid',
  104 + 'gl_project_deploy_build.test_domain AS test_domain',
  105 + 'gl_project_deploy_build.plan AS plan',
  106 + 'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
  107 + 'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
  108 + 'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
  109 + 'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
  110 + 'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
  111 + 'gl_project_deploy_optimize.design_mid AS design_mid',
  112 + 'gl_project_deploy_optimize.tech_leader AS tech_leader',
67 'gl_project_deploy_optimize.domain AS domain', 113 'gl_project_deploy_optimize.domain AS domain',
  114 + 'gl_project_deploy_optimize.quality_mid AS quality_mid',
  115 + 'gl_project_deploy_optimize.design_mid AS design_mid',
  116 + 'gl_project_payment.amount AS amount',
68 ]; 117 ];
69 return $select; 118 return $select;
70 } 119 }
@@ -85,23 +134,4 @@ class OptimizeController extends BaseController @@ -85,23 +134,4 @@ class OptimizeController extends BaseController
85 return $query; 134 return $query;
86 } 135 }
87 136
88 - /**  
89 - * @remark :授权域名  
90 - * @name :empowerDomain  
91 - * @author :lyh  
92 - * @method :post  
93 - * @time :2023/6/20 15:10  
94 - */  
95 - public function empowerDomain(OptimizeLogic $optimizeLogic){  
96 - $this->request->validate([  
97 - 'id'=>'required',  
98 - 'gsc_id'=>'required'  
99 - ],[  
100 - 'id.required' => '审核域名ID不能为空',  
101 - 'gsc_id.required' => 'GSC账号ID不能为空'  
102 - ]);  
103 - $optimizeLogic->empowerDomain();  
104 - $this->response('success');  
105 - }  
106 -  
107 } 137 }
@@ -53,7 +53,9 @@ class ProjectController extends BaseController @@ -53,7 +53,9 @@ class ProjectController extends BaseController
53 $query = $project->leftJoin('gl_project_payment', 'gl_project.id', '=', 'gl_project_payment.project_id') 53 $query = $project->leftJoin('gl_project_payment', 'gl_project.id', '=', 'gl_project_payment.project_id')
54 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id') 54 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
55 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') 55 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
56 - ->leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id'); 56 + ->leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id')
  57 + ->where('gl_project.delete_status',Project::TYPE_ZERO)
  58 + ->where('gl_project.extend_type',Project::TYPE_ZERO);
57 $query = $this->searchParam($query); 59 $query = $this->searchParam($query);
58 $lists = $query->orderBy('gl_project.id', 'desc')->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); 60 $lists = $query->orderBy('gl_project.id', 'desc')->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
59 if(!empty($lists) && !empty($lists['list'])){ 61 if(!empty($lists) && !empty($lists['list'])){
@@ -94,11 +96,6 @@ class ProjectController extends BaseController @@ -94,11 +96,6 @@ class ProjectController extends BaseController
94 * @time :2023/8/30 10:14 96 * @time :2023/8/30 10:14
95 */ 97 */
96 public function searchType(&$query){ 98 public function searchType(&$query){
97 - $query->where('gl_project.delete_status',Project::TYPE_ZERO);  
98 - $query->where('gl_project.extend_type',Project::TYPE_ZERO);  
99 - if(!isset($this->map['type'])){  
100 - $this->map['type'] = Project::TYPE_ZERO;  
101 - }  
102 if($this->map['type'] == Project::TYPE_ZERO){ 99 if($this->map['type'] == Project::TYPE_ZERO){
103 $query->where('gl_project.type',Project::TYPE_ZERO); 100 $query->where('gl_project.type',Project::TYPE_ZERO);
104 }elseif ($this->map['type'] == Project::TYPE_ONE){ 101 }elseif ($this->map['type'] == Project::TYPE_ONE){
@@ -23,7 +23,8 @@ class ATemplateController extends BaseController @@ -23,7 +23,8 @@ class ATemplateController extends BaseController
23 * @time :2023/6/28 16:34 23 * @time :2023/6/28 16:34
24 */ 24 */
25 public function lists(ATemplateLogic $aTemplateLogic){ 25 public function lists(ATemplateLogic $aTemplateLogic){
26 - $lists = $aTemplateLogic->aTemplateList($this->map,$this->page,$this->row,$this->order); 26 + $filed = ['id','name','image','url','status','sort','deleted_status','test_model','created_at','project_id'];
  27 + $lists = $aTemplateLogic->aTemplateList($this->map,$this->page,$this->row,$this->order,$filed);
27 if(!empty($lists) && !empty($lists['list'])){ 28 if(!empty($lists) && !empty($lists['list'])){
28 foreach ($lists['list'] as $k => $v){ 29 foreach ($lists['list'] as $k => $v){
29 $v['image_link'] = getImageUrl($v['image']); 30 $v['image_link'] = getImageUrl($v['image']);
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :WebSettingImageController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2023/9/21 15:12
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Bside\Setting;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Bside\BaseController;
  14 +use App\Models\WebSetting\WebSettingImage;
  15 +
  16 +class WebSettingImageController extends BaseController
  17 +{
  18 + /**
  19 + * @remark :网站背景图片列表
  20 + * @name :lists
  21 + * @author :lyh
  22 + * @method :post
  23 + * @time :2023/9/21 15:12
  24 + */
  25 + public function lists(WebSettingImage $webSettingImage){
  26 + $list = $webSettingImage->list();
  27 + $this->response('success',Code::SUCCESS,$list);
  28 + }
  29 +
  30 + /**
  31 + * @remark :保存数据
  32 + * @name :save
  33 + * @author :lyh
  34 + * @method :post
  35 + * @time :2023/9/21 15:17
  36 + */
  37 + public function save(WebSettingImage $webSettingImage){
  38 + foreach ($this->param['data'] as $v){
  39 + if(isset($v['id']) && !empty($v['id'])){
  40 + $rs = $webSettingImage->edit($v,['id'=>$v['id']]);
  41 + }else{
  42 + $v['project_id'] = $this->user['project_id'];
  43 + $rs = $webSettingImage->add($v);
  44 + }
  45 + if($rs === false){
  46 + $this->response('系统错误请联系管理员');
  47 + }
  48 + }
  49 + $this->response('success');
  50 + }
  51 +}
@@ -311,7 +311,7 @@ class BlogCategoryLogic extends BaseLogic @@ -311,7 +311,7 @@ class BlogCategoryLogic extends BaseLogic
311 if(!$p_category){ 311 if(!$p_category){
312 $p_id = $this->model->addReturnId(['name'=>$p_cate,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]); 312 $p_id = $this->model->addReturnId(['name'=>$p_cate,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]);
313 313
314 - $route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_NEWS_CATE, $p_id, $project_id); 314 + $route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_BLOG_CATE, $p_id, $project_id);
315 $this->model->edit(['alias'=>$route],['id'=>$p_id]); 315 $this->model->edit(['alias'=>$route],['id'=>$p_id]);
316 }else{ 316 }else{
317 $p_id = $p_category['id']; 317 $p_id = $p_category['id'];
@@ -323,7 +323,7 @@ class BlogCategoryLogic extends BaseLogic @@ -323,7 +323,7 @@ class BlogCategoryLogic extends BaseLogic
323 if(!$c_category){ 323 if(!$c_category){
324 $c_id = $this->model->addReturnId(['name'=>$c_cate,'pid'=>$p_id,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]); 324 $c_id = $this->model->addReturnId(['name'=>$c_cate,'pid'=>$p_id,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]);
325 325
326 - $route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_NEWS_CATE, $c_id, $project_id); 326 + $route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_BLOG_CATE, $c_id, $project_id);
327 $this->model->edit(['alias'=>$route],['id'=>$c_id]); 327 $this->model->edit(['alias'=>$route],['id'=>$c_id]);
328 }else{ 328 }else{
329 $c_id = $c_category['id']; 329 $c_id = $c_category['id'];
@@ -277,8 +277,8 @@ class BlogLogic extends BaseLogic @@ -277,8 +277,8 @@ class BlogLogic extends BaseLogic
277 $category_id = $blogCategoryLogic->importBlogCategory($project_id, $user_id, $data[2]); 277 $category_id = $blogCategoryLogic->importBlogCategory($project_id, $user_id, $data[2]);
278 } 278 }
279 279
280 - $news = $this->model->read(['name' => $data[0]]);  
281 - if (!$news) { 280 + $blog = $this->model->read(['name' => $data[0]]);
  281 + if (!$blog) {
282 $id = $this->model->addReturnId( 282 $id = $this->model->addReturnId(
283 [ 283 [
284 'name' => $data[0], 284 'name' => $data[0],
@@ -297,7 +297,7 @@ class BlogLogic extends BaseLogic @@ -297,7 +297,7 @@ class BlogLogic extends BaseLogic
297 ] 297 ]
298 ); 298 );
299 //更新路由 299 //更新路由
300 - $route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_NEWS, $id, $project_id); 300 + $route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_BLOG, $id, $project_id);
301 $this->edit(['url' => $route], ['id' => $id]); 301 $this->edit(['url' => $route], ['id' => $id]);
302 302
303 return true; 303 return true;
@@ -186,4 +186,50 @@ class CategoryLogic extends BaseLogic @@ -186,4 +186,50 @@ class CategoryLogic extends BaseLogic
186 $this->setRouteDeleteSave($data); 186 $this->setRouteDeleteSave($data);
187 return $this->success(); 187 return $this->success();
188 } 188 }
  189 +
  190 + /**
  191 + * 产品导入:分类处理
  192 + * @param $project_id
  193 + * @param $category
  194 + * @return string
  195 + * @throws \Exception
  196 + * @author Akun
  197 + * @date 2023/09/21 14:55
  198 + */
  199 + public function importProductCategory($project_id,$category){
  200 + $return = [];
  201 +
  202 + $cate_arr = explode('/',$category);
  203 + $p_cate = $cate_arr[0];
  204 + $c_cate = $cate_arr[1];
  205 +
  206 + $p_category = $this->model->read(['title'=>$p_cate,'pid'=>0]);
  207 + if(!$p_category){
  208 + $p_id = $this->model->addReturnId(['title'=>$p_cate,'project_id'=>$project_id]);
  209 +
  210 + $route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_PRODUCT_CATE, $p_id, $project_id);
  211 + $this->model->edit(['route'=>$route],['id'=>$p_id]);
  212 + }else{
  213 + $p_id = $p_category['id'];
  214 + }
  215 + $return[] = $p_id;
  216 +
  217 + if($c_cate){
  218 + $c_category = $this->model->read(['title'=>$c_cate,'pid'=>$p_id]);
  219 + if(!$c_category){
  220 + $c_id = $this->model->addReturnId(['title'=>$c_cate,'pid'=>$p_id,'project_id'=>$project_id]);
  221 +
  222 + $route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_PRODUCT_CATE, $c_id, $project_id);
  223 + $this->model->edit(['route'=>$route],['id'=>$c_id]);
  224 + }else{
  225 + $c_id = $c_category['id'];
  226 + }
  227 + $return[] = $c_id;
  228 + }
  229 +
  230 + //清除缓存
  231 + Common::del_user_cache('product_category',$project_id);
  232 +
  233 + return ','.implode(',',$return).',';
  234 + }
189 } 235 }
@@ -139,4 +139,36 @@ class KeywordLogic extends BaseLogic @@ -139,4 +139,36 @@ class KeywordLogic extends BaseLogic
139 $this->setRouteDeleteSave($data); 139 $this->setRouteDeleteSave($data);
140 return $this->success(); 140 return $this->success();
141 } 141 }
  142 +
  143 + /**
  144 + * 产品导入:关键词处理
  145 + * @param $project_id
  146 + * @param $keyword
  147 + * @return string
  148 + * @throws \Exception
  149 + * @author Akun
  150 + * @date 2023/09/21 14:55
  151 + */
  152 + public function importProductKeyword($project_id,$keyword){
  153 + $return = [];
  154 +
  155 + $keyword_arr = explode(',',$keyword);
  156 +
  157 + foreach ($keyword_arr as $v){
  158 + $keyword_info = $this->model->read(['title'=>$v]);
  159 + if(!$keyword_info){
  160 + $k_id = $this->model->addReturnId(['title'=>$v,'project_id'=>$project_id]);
  161 + $route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id);
  162 + $this->model->edit(['route'=>$route],['id'=>$k_id]);
  163 + }else{
  164 + $k_id = $keyword_info['id'];
  165 + }
  166 + $return[] = $k_id;
  167 + }
  168 +
  169 + //清除缓存
  170 + Common::del_user_cache('product_keyword',$project_id);
  171 +
  172 + return ','.implode(',',$return).',';
  173 + }
142 } 174 }
@@ -8,6 +8,7 @@ use App\Models\Product\CategoryRelated; @@ -8,6 +8,7 @@ use App\Models\Product\CategoryRelated;
8 use App\Models\Product\Product; 8 use App\Models\Product\Product;
9 use App\Models\RouteMap\RouteMap; 9 use App\Models\RouteMap\RouteMap;
10 use App\Models\Template\BTemplate; 10 use App\Models\Template\BTemplate;
  11 +use App\Services\CosService;
11 use Illuminate\Support\Facades\DB; 12 use Illuminate\Support\Facades\DB;
12 13
13 /** 14 /**
@@ -367,4 +368,88 @@ class ProductLogic extends BaseLogic @@ -367,4 +368,88 @@ class ProductLogic extends BaseLogic
367 } 368 }
368 return $this->success(); 369 return $this->success();
369 } 370 }
  371 +
  372 + /**
  373 + * 产品导入
  374 + * @param $project_id
  375 + * @param $user_id
  376 + * @param $data
  377 + * @return bool
  378 + * @throws \Exception
  379 + * @author Akun
  380 + * @date 2023/09/21 14:55
  381 + */
  382 + public function importProduct($project_id, $user_id, $data)
  383 + {
  384 + $category_id = '';
  385 + if ($data[2]) {
  386 + //处理分类
  387 + $categoryLogic = new CategoryLogic();
  388 + $category_id = $categoryLogic->importProductCategory($project_id, $data[2]);
  389 + }
  390 +
  391 + $keyword_id = '';
  392 + if($data[3]){
  393 + //处理关键词
  394 + $keywordLogic = new KeywordLogic();
  395 + $keyword_id = $keywordLogic->importProductKeyword($project_id, $data[3]);
  396 + }
  397 +
  398 + $gallery = [];
  399 + $thumb = '';
  400 + if($data[7]){
  401 + //处理图片
  402 + $img_arr = explode(',',$data[7]);
  403 + foreach ($img_arr as $v_img){
  404 + $one_img = CosService::uploadRemote($project_id,'image_product',$v_img);
  405 + if($one_img){
  406 + $one_gallery = [
  407 + 'alt' => '这是一张产品图',
  408 + 'url' => $one_img
  409 + ];
  410 +
  411 + if(!$thumb){
  412 + $thumb = Arr::a2s($one_gallery);
  413 + }
  414 +
  415 + $gallery[] = $one_gallery;
  416 + }
  417 + }
  418 + }
  419 +
  420 +
  421 + //处理seo
  422 + $seo_mate = [
  423 + 'title' => $data[8]??'',
  424 + 'keyword' => $data[9]??'',
  425 + 'description' => $data[10]??''
  426 + ];
  427 +
  428 + $product = $this->model->read(['title' => $data[0]]);
  429 + if (!$product) {
  430 + $id = $this->model->addReturnId(
  431 + [
  432 + 'project_id' => $project_id,
  433 + 'title' => $data[0],
  434 + 'thumb' => $thumb,
  435 + 'gallery' => Arr::a2s($gallery),
  436 + 'attrs' => $data[4] ? $data[4] : Arr::a2s([]),
  437 + 'category_id' => $category_id,
  438 + 'keyword_id' => $keyword_id,
  439 + 'intro' => $data[5] ?? '',
  440 + 'content' => $data[6] ?? '',
  441 + 'seo_mate' => Arr::a2s($seo_mate),
  442 + 'created_uid' => $user_id,
  443 + 'status' => Product::STATUS_ON
  444 + ]
  445 + );
  446 + //更新路由
  447 + $route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_PRODUCT, $id, $project_id);
  448 + $this->edit(['route' => $route], ['id' => $id]);
  449 +
  450 + return true;
  451 + }
  452 +
  453 + return false;
  454 + }
370 } 455 }
@@ -89,7 +89,15 @@ class Project extends Base @@ -89,7 +89,15 @@ class Project extends Base
89 3 => '推广案例', 89 3 => '推广案例',
90 4 => '全球搜案例', 90 4 => '全球搜案例',
91 5 => '设计师案例', 91 5 => '设计师案例',
92 - 6 => '可登陆后台' 92 + 6 => '可登陆后台',
  93 + 7 => 'T项目',
  94 + 8 => '特殊前后缀',
  95 + 9 => '推广续费',
  96 + 10 => '案例渠道',
  97 + 11 => 'Ads',
  98 + 12 => 'AI',
  99 + 13 => 'AI站群',
  100 + 14 => '未达标',
93 ]; 101 ];
94 } 102 }
95 103
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :WebSettingImage.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2023/9/21 15:13
  8 + */
  9 +
  10 +namespace App\Models\WebSetting;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +class WebSettingImage extends Base
  15 +{
  16 + protected $table = 'gl_web_setting_image';
  17 +
  18 + //连接数据库
  19 + protected $connection = 'custom_mysql';
  20 +}
@@ -168,6 +168,12 @@ Route::middleware(['bloginauth'])->group(function () { @@ -168,6 +168,12 @@ Route::middleware(['bloginauth'])->group(function () {
168 Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingSeoController::class, 'save'])->name('web_seo_save'); 168 Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingSeoController::class, 'save'])->name('web_seo_save');
169 }); 169 });
170 170
  171 + //其他设置
  172 + Route::prefix('image')->group(function () {
  173 + Route::any('/', [\App\Http\Controllers\Bside\Setting\WebSettingImageController::class, 'lists'])->name('web_image_list');
  174 + Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingImageController::class, 'save'])->name('web_image_save');
  175 + });
  176 +
171 }); 177 });
172 //产品 178 //产品
173 Route::prefix('product')->group(function () { 179 Route::prefix('product')->group(function () {