作者 刘锟

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

@@ -30,7 +30,7 @@ class ProductController extends BaseController @@ -30,7 +30,7 @@ class ProductController extends BaseController
30 public function getImages(Request $request) 30 public function getImages(Request $request)
31 { 31 {
32 $project_id = $request->input('project_id'); 32 $project_id = $request->input('project_id');
33 - $project = ProjectServer::useProject($project_id); 33 + $project = ProjectServer::useProject($project_id); $project = ProjectServer::useProject($project_id);
34 if (!$project) { 34 if (!$project) {
35 $this->response('项目不存在', Code::SYSTEM_ERROR); 35 $this->response('项目不存在', Code::SYSTEM_ERROR);
36 } 36 }
@@ -66,7 +66,7 @@ class ExtensionModuleController extends BaseController @@ -66,7 +66,7 @@ class ExtensionModuleController extends BaseController
66 'module_id.required' => '模块id不能为空', 66 'module_id.required' => '模块id不能为空',
67 ]); 67 ]);
68 $moduleFieldModel = new ExtensionModuleField(); 68 $moduleFieldModel = new ExtensionModuleField();
69 - $list = $moduleFieldModel->list(['module_id'=>$this->param['module_id']]); 69 + $list = $moduleFieldModel->list(['module_id'=>$this->param['module_id']],'sort');
70 $moduleValueModel = new ExtensionModuleValue(); 70 $moduleValueModel = new ExtensionModuleValue();
71 foreach ($list as $k => $v){ 71 foreach ($list as $k => $v){
72 $v['is_use'] = 0; 72 $v['is_use'] = 0;
@@ -257,4 +257,36 @@ class ExtensionModuleController extends BaseController @@ -257,4 +257,36 @@ class ExtensionModuleController extends BaseController
257 } 257 }
258 $this->response('success',Code::SUCCESS,['str'=>$uniqueString]); 258 $this->response('success',Code::SUCCESS,['str'=>$uniqueString]);
259 } 259 }
  260 +
  261 + /**
  262 + * @remark :获取类型
  263 + * @name :getFieldType
  264 + * @author :lyh
  265 + * @method :post
  266 + * @time :2024/8/22 11:22
  267 + */
  268 + public function getFieldType(){
  269 + $data = [
  270 + 1=>'文本框',
  271 + 2=>'多文本框',
  272 + 3=>'图片框',
  273 + 4=>'文件框',
  274 + 5=>'下拉框',
  275 + 6=>'自动订单'
  276 + ];
  277 + $this->response('success',Code::SUCCESS,$data);
  278 + }
  279 +
  280 + /**
  281 + * @remark :设置排序
  282 + * @name :setSort
  283 + * @author :lyh
  284 + * @method :post
  285 + * @time :2024/8/22 17:27
  286 + */
  287 + public function setSort(){
  288 + $moduleFieldModel = new ExtensionModuleField();
  289 + $moduleFieldModel->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]);
  290 + $this->response('success');
  291 + }
260 } 292 }
@@ -134,6 +134,9 @@ class InquiryController extends BaseController @@ -134,6 +134,9 @@ class InquiryController extends BaseController
134 } 134 }
135 135
136 foreach ($map as $field => $name) { 136 foreach ($map as $field => $name) {
  137 + if(is_array($item[$field])){
  138 + $item[$field] = implode(',',$item[$field]);
  139 + }
137 if (Str::startsWith($item[$field], '=')) { 140 if (Str::startsWith($item[$field], '=')) {
138 $item[$field] = "'" . $item[$field]; 141 $item[$field] = "'" . $item[$field];
139 } 142 }
@@ -17,6 +17,7 @@ use App\Models\Product\ExtendInfo; @@ -17,6 +17,7 @@ use App\Models\Product\ExtendInfo;
17 use App\Models\Product\Keyword; 17 use App\Models\Product\Keyword;
18 use App\Models\Product\KeywordRelated; 18 use App\Models\Product\KeywordRelated;
19 use App\Models\Product\Product; 19 use App\Models\Product\Product;
  20 +use App\Models\Product\ProductType;
20 use App\Models\RouteMap\RouteMap; 21 use App\Models\RouteMap\RouteMap;
21 use App\Models\Template\Setting; 22 use App\Models\Template\Setting;
22 use App\Models\Template\BTemplate; 23 use App\Models\Template\BTemplate;
@@ -665,4 +666,41 @@ class ProductController extends BaseController @@ -665,4 +666,41 @@ class ProductController extends BaseController
665 $logic->delProductKeyword(); 666 $logic->delProductKeyword();
666 $this->response('success'); 667 $this->response('success');
667 } 668 }
  669 +
  670 + /**
  671 + * @remark :获取产品类型
  672 + * @name :getProductType
  673 + * @author :lyh
  674 + * @method :post
  675 + * @time :2024/8/21 17:18
  676 + */
  677 + public function getProductType(){
  678 + $typeModel = new ProductType();
  679 + $data = $typeModel->list(['project_id'=>['in',[0,$this->user['project_id']]]]);
  680 + $this->response('success',Code::SUCCESS,$data);
  681 + }
  682 +
  683 + /**
  684 + * @remark :保存数据
  685 + * @name :saveType
  686 + * @author :lyh
  687 + * @method :post
  688 + * @time :2024/8/21 17:52
  689 + */
  690 + public function saveType(){
  691 + $this->request->validate([
  692 + 'name'=>'required',
  693 + ],[
  694 + 'name.required' => 'id不为空',
  695 + ]);
  696 + $typeModel = new ProductType();
  697 + if(isset($this->param['id']) && !empty($this->param['id'])){
  698 + $id = $this->param['id'];
  699 + $typeModel->edit($this->param,['id'=>$this->param['id']]);
  700 + }else{
  701 + $this->param['project_id'] = $this->user['project_id'];
  702 + $id = $typeModel->addReturnId($this->param);
  703 + }
  704 + $this->response('success',Code::SUCCESS,['id'=>$id]);
  705 + }
668 } 706 }
@@ -10,6 +10,7 @@ use App\Jobs\CopyProjectJob; @@ -10,6 +10,7 @@ use App\Jobs\CopyProjectJob;
10 use App\Jobs\SyncImageFileJob; 10 use App\Jobs\SyncImageFileJob;
11 use App\Models\File\ErrorFile; 11 use App\Models\File\ErrorFile;
12 use App\Models\File\Image as ImageModel; 12 use App\Models\File\Image as ImageModel;
  13 +use App\Models\File\WatermarkImage;
13 use App\Models\Project\Project; 14 use App\Models\Project\Project;
14 use App\Services\AmazonS3Service; 15 use App\Services\AmazonS3Service;
15 use App\Services\CosService; 16 use App\Services\CosService;
@@ -525,16 +526,21 @@ class ImageController extends Controller @@ -525,16 +526,21 @@ class ImageController extends Controller
525 */ 526 */
526 public function coverOriginalImage(){ 527 public function coverOriginalImage(){
527 $this->request->validate([ 528 $this->request->validate([
  529 + 'old_url'=>['required'],
528 'url'=>['required'], 530 'url'=>['required'],
529 'saveUrl'=>['required'], 531 'saveUrl'=>['required'],
530 ],[ 532 ],[
  533 + 'old_url.required'=>'原图的相对路径',
531 'url.required'=>'请填写预览的链接', 534 'url.required'=>'请填写预览的链接',
532 'saveUrl.required'=>'保存的路径', 535 'saveUrl.required'=>'保存的路径',
533 ]); 536 ]);
534 $cos = new CosService(); 537 $cos = new CosService();
535 $url = $cos->coverOriginalImage($this->param['url'],$this->param['saveUrl']); 538 $url = $cos->coverOriginalImage($this->param['url'],$this->param['saveUrl']);
536 - $upYun = new UpyunService();  
537 - $upYun->purgePush($url); 539 + $this->saveWatermarkImage($this->param['saveUrl'],$this->param['old_url']);
  540 + if($this->param['saveUrl'] == $this->param['old_url']){
  541 + $upYun = new UpyunService();
  542 + $upYun->purgePush($url);
  543 + }
538 $this->response('success',Code::SUCCESS,['url'=>$url]); 544 $this->response('success',Code::SUCCESS,['url'=>$url]);
539 } 545 }
540 546
@@ -583,4 +589,21 @@ class ImageController extends Controller @@ -583,4 +589,21 @@ class ImageController extends Controller
583 $data = $cos->getPosition(); 589 $data = $cos->getPosition();
584 $this->response('success',Code::SUCCESS,$data); 590 $this->response('success',Code::SUCCESS,$data);
585 } 591 }
  592 +
  593 + /**
  594 + * @remark :保存水印图片记录
  595 + * @name :saveWatermarkImage
  596 + * @author :lyh
  597 + * @method :post
  598 + * @time :2024/8/21 14:34
  599 + */
  600 + public function saveWatermarkImage($path,$old_path){
  601 + $watermarkImageModel = new WatermarkImage();
  602 + $data = [
  603 + 'path' => $path,
  604 + 'old_path'=>$old_path,
  605 + 'project_id' =>$this->cache['project_id'] ?? 0
  606 + ];
  607 + return $watermarkImageModel->addReturnId($data);
  608 + }
586 } 609 }
@@ -94,7 +94,8 @@ class CustomModuleContentLogic extends BaseLogic @@ -94,7 +94,8 @@ class CustomModuleContentLogic extends BaseLogic
94 }elseif($v['type'] == 4){ 94 }elseif($v['type'] == 4){
95 $arr1 = json_decode($info['values']); 95 $arr1 = json_decode($info['values']);
96 foreach ($arr1 as $k1=>$v1){ 96 foreach ($arr1 as $k1=>$v1){
97 - $v1 = getFileUrl($v1,$this->user['storage_type'],$this->user['project_location'],$this->user['file_cdn'] ?? 0); 97 + $v1 = (array)$v1;
  98 + $v1['url'] = getFileUrl($v1['url'] ?? $v1,$this->user['storage_type'],$this->user['project_location'],$this->user['file_cdn'] ?? 0);
98 $arr1[$k1] = $v1; 99 $arr1[$k1] = $v1;
99 } 100 }
100 $v['values'] = $arr1; 101 $v['values'] = $arr1;
@@ -149,6 +150,11 @@ class CustomModuleContentLogic extends BaseLogic @@ -149,6 +150,11 @@ class CustomModuleContentLogic extends BaseLogic
149 * @time :2023/12/7 15:04 150 * @time :2023/12/7 15:04
150 */ 151 */
151 public function contentAdd(){ 152 public function contentAdd(){
  153 + //验证当前name是否已添加
  154 + $info = $this->model->read(['name'=>$this->param['name'],'module_id'=>$this->param['module_id']]);
  155 + if($info !== false){
  156 + $this->fail('当前数据名称已存在');
  157 + }
152 try { 158 try {
153 $this->param['sort'] = $this->setNewsSort(); 159 $this->param['sort'] = $this->setNewsSort();
154 $id = $this->model->addReturnId($this->param); 160 $id = $this->model->addReturnId($this->param);
@@ -301,7 +307,7 @@ class CustomModuleContentLogic extends BaseLogic @@ -301,7 +307,7 @@ class CustomModuleContentLogic extends BaseLogic
301 $v['values'] = json_encode($v['values']); 307 $v['values'] = json_encode($v['values']);
302 }elseif ($v['type'] == 4){ 308 }elseif ($v['type'] == 4){
303 foreach ($v['values'] as $k1=>$v1){ 309 foreach ($v['values'] as $k1=>$v1){
304 - $v1 = str_replace_url($v1); 310 + $v1['url'] = str_replace_url($v1['url']);
305 $v['values'][$k1] = $v1; 311 $v['values'][$k1] = $v1;
306 } 312 }
307 $v['values'] = json_encode($v['values']); 313 $v['values'] = json_encode($v['values']);
@@ -178,6 +178,7 @@ class UserLoginLogic @@ -178,6 +178,7 @@ class UserLoginLogic
178 $info['uptime'] = $project['uptime']; 178 $info['uptime'] = $project['uptime'];
179 $info['storage_type'] = $project['storage_type']; 179 $info['storage_type'] = $project['storage_type'];
180 $info['project_location'] = $project['project_location']; 180 $info['project_location'] = $project['project_location'];
  181 + $info['open_export_product'] = $project['open_export_product'];
181 $info['is_update_language'] = $project['is_update_language']; 182 $info['is_update_language'] = $project['is_update_language'];
182 $info['configuration'] = $project['deploy_build']['configuration']; 183 $info['configuration'] = $project['deploy_build']['configuration'];
183 $info['file_cdn'] = $project['deploy_build']['file_cdn']; 184 $info['file_cdn'] = $project['deploy_build']['file_cdn'];
@@ -286,6 +287,7 @@ class UserLoginLogic @@ -286,6 +287,7 @@ class UserLoginLogic
286 $info['configuration'] = $project['deploy_build']['configuration']; 287 $info['configuration'] = $project['deploy_build']['configuration'];
287 $info['project_type'] = $project['type']; 288 $info['project_type'] = $project['type'];
288 $info['storage_type'] = $project['storage_type']; 289 $info['storage_type'] = $project['storage_type'];
  290 + $info['open_export_product'] = $project['open_export_product'];
289 $info['project_location'] = $project['project_location']; 291 $info['project_location'] = $project['project_location'];
290 $info['file_cdn'] = $project['deploy_build']['file_cdn']; 292 $info['file_cdn'] = $project['deploy_build']['file_cdn'];
291 $info['service_duration'] = $project['deploy_build']['service_duration'] ?? 0; 293 $info['service_duration'] = $project['deploy_build']['service_duration'] ?? 0;
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :WatermarkImage.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2024/8/21 14:29
  8 + */
  9 +
  10 +namespace App\Models\File;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +class WatermarkImage extends Base
  15 +{
  16 + protected $table = 'gl_watermark_image';
  17 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :ProductType.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2024/8/21 16:46
  8 + */
  9 +
  10 +namespace App\Models\Product;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +class ProductType extends Base
  15 +{
  16 + protected $table = 'gl_product_type';
  17 +}
@@ -274,15 +274,15 @@ class CosService @@ -274,15 +274,15 @@ class CosService
274 */ 274 */
275 public function getPosition(){ 275 public function getPosition(){
276 return [ 276 return [
277 - 1=>'gravity/northWest',  
278 - 2=>'gravity/north',  
279 - 3=>'gravity/northEast',  
280 - 4=>'gravity/west',  
281 - 5=>'gravity/center',  
282 - 6=>'gravity/east',  
283 - 7=>'gravity/southWest',  
284 - 8=>'gravity/south',  
285 - 9=>'gravity/southEast', 277 + 1=>'northWest',
  278 + 2=>'north',
  279 + 3=>'northEast',
  280 + 4=>'west',
  281 + 5=>'center',
  282 + 6=>'east',
  283 + 7=>'southWest',
  284 + 8=>'south',
  285 + 9=>'southEast',
286 ]; 286 ];
287 } 287 }
288 288
@@ -257,6 +257,8 @@ Route::middleware(['bloginauth'])->group(function () { @@ -257,6 +257,8 @@ Route::middleware(['bloginauth'])->group(function () {
257 Route::any('/sendAiProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'sendAiProduct'])->name('product_sendAiProduct'); 257 Route::any('/sendAiProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'sendAiProduct'])->name('product_sendAiProduct');
258 Route::any('/getSearchCategoryList', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getSearchCategoryList'])->name('product_getSearchCategoryList'); 258 Route::any('/getSearchCategoryList', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getSearchCategoryList'])->name('product_getSearchCategoryList');
259 Route::any('/delProductKeyword', [\App\Http\Controllers\Bside\Product\ProductController::class, 'delProductKeyword'])->name('product_delProductKeyword'); 259 Route::any('/delProductKeyword', [\App\Http\Controllers\Bside\Product\ProductController::class, 'delProductKeyword'])->name('product_delProductKeyword');
  260 + Route::any('/getProductType', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getProductType'])->name('product_getProductType');
  261 + Route::any('/saveType', [\App\Http\Controllers\Bside\Product\ProductController::class, 'saveType'])->name('product_saveType');
260 //产品分类 262 //产品分类
261 Route::get('category', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'index'])->name('product_category'); 263 Route::get('category', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'index'])->name('product_category');
262 Route::get('category/info', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'info'])->name('product_category_info'); 264 Route::get('category/info', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'info'])->name('product_category_info');
@@ -582,6 +584,8 @@ Route::middleware(['bloginauth'])->group(function () { @@ -582,6 +584,8 @@ Route::middleware(['bloginauth'])->group(function () {
582 Route::any('/addModuleValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'addModuleValue'])->name('extension_module_addModuleValue'); 584 Route::any('/addModuleValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'addModuleValue'])->name('extension_module_addModuleValue');
583 Route::any('/editModuleValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'editModuleValue'])->name('extension_module_editModuleValue'); 585 Route::any('/editModuleValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'editModuleValue'])->name('extension_module_editModuleValue');
584 Route::any('/sendUniqueStr', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'sendUniqueStr'])->name('extension_module_sendUniqueStr'); 586 Route::any('/sendUniqueStr', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'sendUniqueStr'])->name('extension_module_sendUniqueStr');
  587 + Route::any('/getFieldType', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'getFieldType'])->name('extension_module_getFieldType');
  588 + Route::any('/setSort', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'setSort'])->name('extension_module_setSort');
585 }); 589 });
586 590
587 //自定义小语种文本信息 591 //自定义小语种文本信息