作者 李宇航

合并分支 'lyh-server' 到 'master'

Lyh server



查看合并请求 !2050
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :AggregateKeywordAffixController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/5/27 14:20
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Aside\Project;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Aside\BaseController;
  14 +use App\Http\Logic\Aside\Project\AggregateKeywordAffixLogic;
  15 +use Illuminate\Http\Request;
  16 +
  17 +class AggregateKeywordAffixController extends BaseController
  18 +{
  19 + public function __construct(Request $request)
  20 + {
  21 + parent::__construct($request);
  22 + $this->logic = new AggregateKeywordAffixLogic();
  23 + }
  24 +
  25 + /**
  26 + * @remark :获取当前项目关键字前后缀
  27 + * @name :getAffix
  28 + * @author :lyh
  29 + * @method :post
  30 + * @time :2025/5/27 14:23
  31 + */
  32 + public function getAffix(){
  33 + $this->request->validate([
  34 + 'project_id'=>'required',
  35 + ],[
  36 + 'project_id.required' => 'project_id不能为空',
  37 + ]);
  38 + $data = $this->logic->getAffix();
  39 + $this->response('success',Code::SUCCESS,$data);
  40 + }
  41 +
  42 + /**
  43 + * @remark :保存关键字前后缀
  44 + * @name :save
  45 + * @author :lyh
  46 + * @method :post
  47 + * @time :2025/5/27 14:23
  48 + */
  49 + public function saveAffix(){
  50 + $this->request->validate([
  51 + 'project_id'=>'required',
  52 + 'prefix'=>'required',
  53 + 'suffix'=>'required',
  54 + ],[
  55 + 'project_id.required' => 'project_id不能为空',
  56 + 'prefix.required' => '前缀不能为空',
  57 + 'suffix.required' => '后缀不能为空',
  58 + ]);
  59 + $data = $this->logic->saveAffix();
  60 + $this->response('success',Code::SUCCESS,$data);
  61 + }
  62 +
  63 +}
@@ -9,9 +9,9 @@ @@ -9,9 +9,9 @@
9 9
10 namespace App\Http\Controllers\Bside\News; 10 namespace App\Http\Controllers\Bside\News;
11 11
  12 +use App\Enums\Common\Code;
12 use App\Http\Controllers\Bside\BaseController; 13 use App\Http\Controllers\Bside\BaseController;
13 use App\Http\Logic\Bside\News\NewsExtendLogic; 14 use App\Http\Logic\Bside\News\NewsExtendLogic;
14 -use App\Models\News\NewsExtend;  
15 use Illuminate\Http\Request; 15 use Illuminate\Http\Request;
16 16
17 class NewsExtendController extends BaseController 17 class NewsExtendController extends BaseController
@@ -56,6 +56,25 @@ class NewsExtendController extends BaseController @@ -56,6 +56,25 @@ class NewsExtendController extends BaseController
56 } 56 }
57 57
58 /** 58 /**
  59 + * @remark :修改状态
  60 + * @name :status
  61 + * @author :lyh
  62 + * @method :post
  63 + * @time :2025/5/27 9:22
  64 + */
  65 + public function status(){
  66 + $this->request->validate([
  67 + 'id' => 'required',
  68 + 'status' => 'required',
  69 + ], [
  70 + 'id.required' => '字段名称不能为空',
  71 + 'status.required' => '字段类型不能为空',
  72 + ]);
  73 + $data = $this->logic->extendStatus();
  74 + $this->response('success', Code::SUCCESS, $data);
  75 + }
  76 +
  77 + /**
59 * @remark :删除扩展字段 78 * @remark :删除扩展字段
60 * @name :del 79 * @name :del
61 * @author :lyh 80 * @author :lyh
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :AggregateKeywordAffixLogic.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/5/27 14:21
  8 + */
  9 +
  10 +namespace App\Http\Logic\Aside\Project;
  11 +
  12 +use App\Http\Logic\Aside\BaseLogic;
  13 +use App\Models\Project\AggregateKeywordAffix;
  14 +
  15 +class AggregateKeywordAffixLogic extends BaseLogic
  16 +{
  17 + public function __construct()
  18 + {
  19 + parent::__construct();
  20 + $this->param = $this->requestAll;
  21 + $this->model = new AggregateKeywordAffix();
  22 + }
  23 +
  24 + /**
  25 + * @remark :保存数据
  26 + * @name :getAffix
  27 + * @author :lyh
  28 + * @method :post
  29 + * @time :2025/5/27 14:25
  30 + */
  31 + public function getAffix(){
  32 + $data = $this->model->read(['project_id'=>$this->param['project_id']]);
  33 + if($data === false){
  34 + $data = [];
  35 + }
  36 + return $this->success($data);
  37 + }
  38 +
  39 + /**
  40 + * @remark :保存数据
  41 + * @name :saveAffix
  42 + * @author :lyh
  43 + * @method :post
  44 + * @time :2025/5/27 14:28
  45 + */
  46 + public function saveAffix(){
  47 + $info = $this->model->read(['project_id'=>$this->param['project_id']]);
  48 + try {
  49 + if($info === false){
  50 + $this->model->addReturnId(['project_id'=>$this->param['project_id'],'prefix'=>$this->param['prefix'] ?? '','suffix'=>$this->param['suffix'] ?? '']);
  51 + }else{
  52 + $this->model->edit(['prefix'=>$this->param['prefix'] ?? '','suffix'=>$this->param['suffix'] ?? ''],['project_id'=>$this->param['project_id']]);
  53 + }
  54 + }catch (\Exception $e){
  55 + $this->fail('保存失败,请联系管理员');
  56 + }
  57 + return $this->success();
  58 + }
  59 +}
@@ -49,10 +49,16 @@ class CustomTemplateLogic extends BaseLogic @@ -49,10 +49,16 @@ class CustomTemplateLogic extends BaseLogic
49 if($info === false){ 49 if($info === false){
50 $this->fail('当前数据不存在'); 50 $this->fail('当前数据不存在');
51 } 51 }
  52 + if(!empty($info['html'])){
  53 + $info['is_renovation'] = 1;
  54 + }else{
  55 + $info['html'] = $info['text'];
  56 + $info['is_renovation'] = 0;
  57 + }
52 $info['image'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']); 58 $info['image'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']);
53 if($info['is_visualization'] == 0 || $info['is_visualization'] == 1){ 59 if($info['is_visualization'] == 0 || $info['is_visualization'] == 1){
54 $template_id = $this->getTemplateId(); 60 $template_id = $this->getTemplateId();
55 - $html = $this->getTemplateComHtml(empty($info['html']) ? $info['text'] : $info['html'],$info['html_style'],$template_id); 61 + $html = $this->getTemplateComHtml($info['html'],$info['html_style'],$template_id);
56 $info['html'] = $this->getHeadFooter($html); 62 $info['html'] = $this->getHeadFooter($html);
57 } 63 }
58 return $this->success($info); 64 return $this->success($info);
@@ -30,6 +30,7 @@ class NewsExtendLogic extends BaseLogic @@ -30,6 +30,7 @@ class NewsExtendLogic extends BaseLogic
30 * @time :2025/5/26 15:17 30 * @time :2025/5/26 15:17
31 */ 31 */
32 public function list($map){ 32 public function list($map){
  33 + $map['status'] = 1;
33 $data = $this->model->list($map); 34 $data = $this->model->list($map);
34 return $this->success($data); 35 return $this->success($data);
35 } 36 }
@@ -61,6 +62,18 @@ class NewsExtendLogic extends BaseLogic @@ -61,6 +62,18 @@ class NewsExtendLogic extends BaseLogic
61 } 62 }
62 63
63 /** 64 /**
  65 + * @remark :修改状态
  66 + * @name :extendStatus
  67 + * @author :lyh
  68 + * @method :post
  69 + * @time :2025/5/27 9:20
  70 + */
  71 + public function extendStatus(){
  72 + $result = $this->model->edit(['status'=>$this->param['status']],['id'=>$this->param['id']]);
  73 + return $this->success(['result'=>$result]);
  74 + }
  75 +
  76 + /**
64 * @remark :删除字段 77 * @remark :删除字段
65 * @name :extendDel 78 * @name :extendDel
66 * @author :lyh 79 * @author :lyh
@@ -8,6 +8,8 @@ use App\Http\Logic\Bside\BaseLogic; @@ -8,6 +8,8 @@ use App\Http\Logic\Bside\BaseLogic;
8 use App\Models\News\News; 8 use App\Models\News\News;
9 use App\Models\News\NewsCategory; 9 use App\Models\News\NewsCategory;
10 use App\Models\News\NewsCategory as NewsCategoryModel; 10 use App\Models\News\NewsCategory as NewsCategoryModel;
  11 +use App\Models\News\NewsExtend;
  12 +use App\Models\News\NewsExtendInfo;
11 use App\Models\RouteMap\RouteMap; 13 use App\Models\RouteMap\RouteMap;
12 use App\Models\Template\BTemplate; 14 use App\Models\Template\BTemplate;
13 use App\Services\CosService; 15 use App\Services\CosService;
@@ -79,6 +81,7 @@ class NewsLogic extends BaseLogic @@ -79,6 +81,7 @@ class NewsLogic extends BaseLogic
79 $this->edit(['url' => $route], ['id' => $id]); 81 $this->edit(['url' => $route], ['id' => $id]);
80 $this->curlDelRoute(['new_route'=>$route]); 82 $this->curlDelRoute(['new_route'=>$route]);
81 } 83 }
  84 + $this->model->saveExtendInfo($id,$this->param['extend'] ?? []);
82 $this->addUpdateNotify(RouteMap::SOURCE_NEWS,$route); 85 $this->addUpdateNotify(RouteMap::SOURCE_NEWS,$route);
83 return $this->success(['id'=>$id]); 86 return $this->success(['id'=>$id]);
84 } 87 }
@@ -143,11 +146,12 @@ class NewsLogic extends BaseLogic @@ -143,11 +146,12 @@ class NewsLogic extends BaseLogic
143 { 146 {
144 $info = $this->model->read($this->param); 147 $info = $this->model->read($this->param);
145 if($info === false){ 148 if($info === false){
146 - $this->fail('error'); 149 + $this->fail('当前数据不存在');
147 } 150 }
148 $info['category_id'] = explode(',',trim($info['category_id'],',')); 151 $info['category_id'] = explode(',',trim($info['category_id'],','));
149 $info['image_link'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']); 152 $info['image_link'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']);
150 $info['og_image'] = getImageUrl(empty($info['og_image']) ? $info['image'] : $info['og_image'],$this->user['storage_type'],$this->user['project_location']); 153 $info['og_image'] = getImageUrl(empty($info['og_image']) ? $info['image'] : $info['og_image'],$this->user['storage_type'],$this->user['project_location']);
  154 + $info['extend'] = $this->model->getExtendInfo($info['id']);
151 return $this->success($info); 155 return $this->success($info);
152 } 156 }
153 157
@@ -32,4 +32,124 @@ class News extends Base @@ -32,4 +32,124 @@ class News extends Base
32 public function getRelatedProductIdAttribute($value){ 32 public function getRelatedProductIdAttribute($value){
33 return Arr::setToArr($value); 33 return Arr::setToArr($value);
34 } 34 }
  35 +
  36 + /**
  37 + * @remark :扩展字段根据type返回类型
  38 + * @name :setTypValues
  39 + * @author :lyh
  40 + * @method :post
  41 + * @time :2023/12/6 14:43
  42 + */
  43 + public function getExtendInfo($news_id){
  44 + $extendModel = new NewsExtend();
  45 + $list = $extendModel->list(['status'=>1],'id',['id','type','key','title']);
  46 + if(empty($list)){
  47 + return [];
  48 + }
  49 + $extendInfoModel = new NewsExtendInfo();
  50 + $infoList = $extendInfoModel->list(['news_id'=>$news_id],'created_at');
  51 + foreach ($list as $k=>$v){
  52 + if($v['type'] == 3 || $v['type'] == 4){
  53 + $v['values'] = [];
  54 + }else{
  55 + $v['values'] = '';
  56 + }
  57 + if(!empty($infoList)){
  58 + foreach ($infoList as $values){
  59 + if($v['key'] == $values['key']){
  60 + $v = $this->setTypValues($v,$values);
  61 + break;
  62 + }
  63 + }
  64 + }
  65 + $list[$k] = $v;
  66 + }
  67 + return $list;
  68 + }
  69 +
  70 +
  71 + /**
  72 + * @remark :扩展字段根据type返回类型
  73 + * @name :setTypValues
  74 + * @author :lyh
  75 + * @method :post
  76 + * @time :2023/12/6 14:43
  77 + */
  78 + public function setTypValues($v,$info){
  79 + if($v['type'] == 3){
  80 + $arr = json_decode($info['values']);
  81 + foreach ($arr as $k1=>$v1){
  82 + $v1 = (array)$v1;
  83 + $v1['url'] = getImageUrl($v1['url'],$this->user['storage_type'],$this->user['project_location']);
  84 + $arr[$k1] = $v1;
  85 + }
  86 + $v['values'] = $arr;
  87 + }elseif($v['type'] == 4){
  88 + $arr1 = json_decode($info['values']);
  89 + foreach ($arr1 as $k1=>$v1){
  90 + $v1 = (array)$v1;
  91 + if(isset($v1['url'])){
  92 + $v1['url'] = getFileUrl($v1['url'],$this->user['storage_type'],$this->user['project_location'],$this->user['file_cdn'] ?? 0);
  93 + }else{
  94 + $v1 = getFileUrl($v1,$this->user['storage_type'],$this->user['project_location'],$this->user['file_cdn'] ?? 0);
  95 + }
  96 + $arr1[$k1] = $v1;
  97 + }
  98 + $v['values'] = $arr1;
  99 + }else{
  100 + $v['values'] = $info['values'];
  101 + }
  102 + return $v;
  103 + }
  104 +
  105 + /**
  106 + * @remark :保存扩展字段
  107 + * @name :saveExtend
  108 + * @author :lyh
  109 + * @method :post
  110 + * @time :2023/11/9 15:02
  111 + */
  112 + public function saveExtendInfo($news_id,$extend){
  113 + //先删除以前的数据
  114 + $extendInfoModel = new NewsExtendInfo();
  115 + $extendInfoModel->del(['news_id'=>$news_id]);
  116 + if(empty($extend)) {
  117 + return true;
  118 + }
  119 + foreach ($extend as $k => $v){
  120 + if(empty($v['values'])){
  121 + continue;
  122 + }
  123 + $v = $this->saveHandleExtend($v,$news_id);
  124 + $extendInfoModel->add($v);
  125 + }
  126 + return true;
  127 + }
  128 +
  129 + /**
  130 + * @remark :保存扩展字段时处理数据
  131 + * @name :saveHandleExtend
  132 + * @author :lyh
  133 + * @method :post
  134 + * @time :2023/12/6 15:11
  135 + */
  136 + public function saveHandleExtend(&$v,$news_id){
  137 + unset($v['title']);
  138 + if($v['type'] == 3){
  139 + foreach ($v['values'] as $k1=>$v1){
  140 + $v1['url'] = str_replace_url($v1['url']);
  141 + $v['values'][$k1] = $v1;
  142 + }
  143 + $v['values'] = json_encode($v['values']);
  144 + }elseif ($v['type'] == 4){
  145 + foreach ($v['values'] as $k1=>$v1){
  146 + $v1['url'] = str_replace_url($v1['url']);
  147 + $v['values'][$k1] = $v1;
  148 + }
  149 + $v['values'] = json_encode($v['values']);
  150 + }
  151 + $v['project_id'] = $this->user['project_id'];
  152 + $v['news_id'] = $news_id;
  153 + return $v;
  154 + }
35 } 155 }
@@ -26,7 +26,7 @@ class NewsExtend extends Base @@ -26,7 +26,7 @@ class NewsExtend extends Base
26 * @time :2025/5/26 15:39 26 * @time :2025/5/26 15:39
27 */ 27 */
28 public function getKey($key = self::EXTEND_KEY,$i = 1){ 28 public function getKey($key = self::EXTEND_KEY,$i = 1){
29 - $info = $this->model->read(['key'=>$key.$i]); 29 + $info = $this->read(['key'=>$key.$i]);
30 if($info !== false){ 30 if($info !== false){
31 return $this->getKey($key,$i+1); 31 return $this->getKey($key,$i+1);
32 }else{ 32 }else{
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :AggregateKeywordAffix.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/5/27 14:16
  8 + */
  9 +
  10 +namespace App\Models\Project;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +/**
  15 + * @remark :聚合页关键字前后缀
  16 + * @name :AggregateKeywordAffix
  17 + * @author :lyh
  18 + * @method :post
  19 + * @time :2025/5/27 14:16
  20 + */
  21 +class AggregateKeywordAffix extends Base
  22 +{
  23 + protected $table = 'gl_aggregate_keyword_affix';
  24 +}
@@ -220,6 +220,7 @@ Route::middleware(['aloginauth'])->group(function () { @@ -220,6 +220,7 @@ Route::middleware(['aloginauth'])->group(function () {
220 Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList'); 220 Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
221 Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages'); 221 Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages');
222 }); 222 });
  223 +
223 //更新项目tdk 224 //更新项目tdk
224 Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk'); 225 Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk');
225 //项目内容采集 226 //项目内容采集
@@ -562,6 +563,11 @@ Route::middleware(['aloginauth'])->group(function () { @@ -562,6 +563,11 @@ Route::middleware(['aloginauth'])->group(function () {
562 Route::any('/info', [Aside\Project\AggregateKeywordController::class, 'info'])->name('admin.aggregateKeyword_info'); 563 Route::any('/info', [Aside\Project\AggregateKeywordController::class, 'info'])->name('admin.aggregateKeyword_info');
563 Route::any('/save', [Aside\Project\AggregateKeywordController::class, 'save'])->name('admin.aggregateKeyword_save'); 564 Route::any('/save', [Aside\Project\AggregateKeywordController::class, 'save'])->name('admin.aggregateKeyword_save');
564 Route::any('/del', [Aside\Project\AggregateKeywordController::class, 'del'])->name('admin.aggregateKeyword_del'); 565 Route::any('/del', [Aside\Project\AggregateKeywordController::class, 'del'])->name('admin.aggregateKeyword_del');
  566 + //聚合页关键词前后缀
  567 + Route::prefix('affix')->group(function () {
  568 + Route::any('/getAffix', [Aside\Project\AggregateKeywordAffixController::class, 'getAffix'])->name('admin.affix_getAffix');
  569 + Route::any('/saveAffix', [Aside\Project\AggregateKeywordAffixController::class, 'saveAffix'])->name('admin.affix_saveAffix');
  570 + });
565 }); 571 });
566 572
567 }); 573 });
@@ -104,6 +104,11 @@ Route::middleware(['bloginauth'])->group(function () { @@ -104,6 +104,11 @@ Route::middleware(['bloginauth'])->group(function () {
104 Route::any('/category/status', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'status'])->name('news_category_status'); 104 Route::any('/category/status', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'status'])->name('news_category_status');
105 Route::any('/category/sort', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'sort'])->name('news_category_sort'); 105 Route::any('/category/sort', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'sort'])->name('news_category_sort');
106 Route::any('/category/categoryTopList', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'categoryTopList'])->name('news_category_categoryTopList'); 106 Route::any('/category/categoryTopList', [\App\Http\Controllers\Bside\News\NewsCategoryController::class, 'categoryTopList'])->name('news_category_categoryTopList');
  107 + //新闻扩展模块
  108 + Route::any('/extend/', [\App\Http\Controllers\Bside\News\NewsExtendController::class, 'lists'])->name('news_extend_lists');
  109 + Route::any('/extend/save', [\App\Http\Controllers\Bside\News\NewsExtendController::class, 'save'])->name('news_extend_save');
  110 + Route::any('/extend/status', [\App\Http\Controllers\Bside\News\NewsExtendController::class, 'status'])->name('news_extend_status');
  111 + Route::any('/extend/del', [\App\Http\Controllers\Bside\News\NewsExtendController::class, 'del'])->name('news_extend_del');
107 }); 112 });
108 113
109 //博客相关路由 114 //博客相关路由