作者 刘锟

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

... ... @@ -16,6 +16,7 @@ use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
... ... @@ -87,7 +88,10 @@ class VideoTask extends Command
continue;
}
ProjectServer::useProject($task_project->project_id);
$keyword = $this->getProjectKeyword($task_project->num);
if(!empty($task_project->keywords)){
$task_project->keywords = explode(',',trim(',',$task_project->keywords));
}
$keyword = $this->getProjectKeyword($task_project->number,$task_project->keywords);
// 已经没有需要生成视频的关键词
if (!$keyword) {
$task_project->status = KeywordVideoTask::STATUS_CLOSE;
... ... @@ -95,13 +99,7 @@ class VideoTask extends Command
continue;
}
$logo_bg = $this->getImage($domainInfo);
$num = $task_project->num;
foreach ($keyword as $val) {
if($sub_task_num == 0){
$task_project->num = $num;
$task_project->save();
break;
}
$log = KeywordVideoTaskLog::where(['project_id' => $task_project->project_id, 'keyword_id' => $val->id])->first();
if ($log){
continue;
... ... @@ -120,19 +118,13 @@ class VideoTask extends Command
'created_at' => date('Y-m-d H:i:s'),
];
$rs = KeywordVideoTaskLog::insert($array);
if($rs){
$num--;
if($rs && ($sub_task_num > 0)){
$sub_task_num--;
}
}
}
if($sub_task_num != 0){
$task_project->num = $num;
if($num == 0){
$task_project->status = KeywordVideoTask::STATUS_CLOSE;
}
$task_project->save();
}
$task_project->status = KeywordVideoTask::STATUS_CLOSE;
$task_project->save();
}
return true;
}
... ... @@ -182,18 +174,27 @@ class VideoTask extends Command
* @param $number
* @return mixed
*/
public function getProjectKeyword($number)
public function getProjectKeyword($number,$keywords = [])
{
$keyword_arr_id = Keyword::where('video', null)->where('route', 'not like', '%-tag')->whereNotNull('keyword_content')->pluck('id')->toArray();
if(!empty($keywords)){
$keyword_id = Keyword::where('video', null)->whereIn("title", $keywords)
->where('route', 'not like', '%-tag')->whereNotNull('keyword_content')->pluck('id')->toArray();
if(count($keyword_id) == 0){
$keyword_arr_id = Keyword::where('video', null)->where('route', 'not like', '%-tag')
->whereNotNull('keyword_content')->orderBy('id','asc')->limit($number)->pluck('id')->toArray();
}else{
$keyword_arr_id = Keyword::where('video', null)->whereNotIn("title", $keywords)->where('route', 'not like', '%-tag')
->whereNotNull('keyword_content')->orderBy('id','asc')->limit($number - count($keyword_id))->pluck('id')->toArray();
$keyword_arr_id = array_merge($keyword_id,$keyword_arr_id);
}
}else{
$keyword_arr_id = Keyword::where('video', null)->where('route', 'not like', '%-tag')
->whereNotNull('keyword_content')->orderBy('id','asc')->limit($number)->pluck('id')->toArray();
}
if(count($keyword_arr_id) == 0){
return [];
}
if(count($keyword_arr_id) <= $number){
$keyword_id = array_rand($keyword_arr_id, count($keyword_arr_id));
}else{
$keyword_id = array_rand($keyword_arr_id, $number);
}
$keyword = Keyword::whereIn("id", $keyword_id)->get();
$keyword = Keyword::whereIn("id", $keyword_arr_id)->get();
return $keyword;
}
... ...
... ... @@ -33,11 +33,16 @@ class SyncFile extends Command
$errorFileModel = new ErrorFile();
$lists = $errorFileModel->list(['status'=>0]);//未同步成功的图片及文件
foreach ($lists as $k => $v){
$code = $this->synchronizationFile($v['path']);
if(strpos($v['path'], '/181/') !== false ){
$code = $this->synchronizationFiles($v['path']);
}else{
$code = $this->synchronizationFile($v['path']);
}
if((int)$code == 200){
echo date('Y-m-d H:i:s') . '编辑的path为:'. $v['path'] .',主键id:'. $v['id'] . PHP_EOL;
$errorFileModel->edit(['status'=>1],['id'=>$v['id']]);
}
}
echo date('Y-m-d H:i:s') . '编辑的end为:' . PHP_EOL;
return true;
... ... @@ -57,4 +62,13 @@ class SyncFile extends Command
$cmd = 'curl -F "file_path='.$file_path.'" -F "save_path=/www/wwwroot/cos'.$directoryPath.'" https://v6-file.globalso.com/upload.php';
return shell_exec($cmd);
}
public function synchronizationFiles($path_name){
//同步到大文件
$file_path = config('filesystems.disks.s3')['cdn'].$path_name;
$directoryPath = pathinfo($path_name, PATHINFO_DIRNAME);
$cmd = 'curl -F "file_path='.$file_path.'" -F "save_path=/www/wwwroot/cos'.$directoryPath.'" https://v6-file.globalso.com/upload.php';
return shell_exec($cmd);
}
}
... ...
... ... @@ -8,12 +8,18 @@
namespace App\Console\Commands\Test;
use App\Models\Com\KeywordVideoTask;
use App\Models\File\File;
use App\Models\File\File as FileModel;
use App\Models\File\Image;
use App\Models\File\Image as ImageModel;
use App\Models\Product\Keyword;
use App\Models\Project\Project;
use App\Services\AmazonS3Service;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class Demo extends Command
... ... @@ -33,25 +39,25 @@ class Demo extends Command
protected $description = 'demo';
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->param['project_id'] = 181;
$imageModel = new ImageModel();
//获取当前项目的所有图片
$imageList = $imageModel->list(['project_id'=>$this->param['project_id'],'is_cos'=>1],'id',['id','path','is_cos','size']);
if(!empty($imageList)){
$amazonS3Service = new AmazonS3Service();
foreach ($imageList as $k => $v){
$amazonS3Service->syncImageFiles(getImageUrl($v['path']));
$imageModel->edit(['is_cos'=>0],['id'=>$v['id']]);
}
}
// /**
// * Execute the job.
// *
// * @return void
// */
// public function handle()
// {
// $this->param['project_id'] = 181;
// $imageModel = new ImageModel();
// //获取当前项目的所有图片
// $imageList = $imageModel->list(['project_id'=>$this->param['project_id'],'is_cos'=>1],'id',['id','path','is_cos','size']);
// if(!empty($imageList)){
// $amazonS3Service = new AmazonS3Service();
// foreach ($imageList as $k => $v){
// $amazonS3Service->syncImageFiles(getImageUrl($v['path']));
// $imageModel->edit(['is_cos'=>0],['id'=>$v['id']]);
// }
// }
//
// $fileModel = new FileModel();
// $fileList = $fileModel->list(['project_id'=>$this->param['project_id'],'is_cos'=>1],'id',['id','path','is_cos','name']);
// if(!empty($fileList)){
... ... @@ -63,7 +69,73 @@ class Demo extends Command
// gc_collect_cycles();
// }
// }
return true;
// return true;
// }
// public function handle(){
// $keywordVideoModel = new KeywordVideoTask();
// $project_id_arr = $keywordVideoModel::where('id','>',0)->pluck('project_id')->toArray();
// $projectModel = new Project();
// $list = $projectModel->list(['type'=>['!=',0],'delete_status'=>0,'id'=>['in',$project_id_arr]]);
// $data = [];
// foreach ($list as $v){
// echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
// ProjectServer::useProject($v['id']);
// $this->saveKeyword();
// DB::disconnect('custom_mysql');
// }
// echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
// }
//
// /**
// * @remark :关键字有视频的改为1
// * @name :getProductKeywordInfo
// * @author :lyh
// * @method :post
// * @time :2024/5/31 9:54
// */
// public function saveKeyword(){
// $keywordModel = new Keyword();
// $rs = $keywordModel->edit(['is_video_keyword'=>1],['video'=>['!=',null]]);
// echo date('Y-m-d H:i:s') . 'end'.$rs . PHP_EOL;
// return true;
// }
public function handle(){
//切换数据库配置
ProjectServer::useProject(1862);
return $this->initTable(1380,1862);
}
public function initTable($project_id, $news_project_id)
{
config(['database.connections.custom_tmp_mysql_copy.database' => 'gl_data_' . $project_id]);
$database_name = DB::connection('custom_tmp_mysql_copy')->getDatabaseName();
$tables = Schema::connection('custom_tmp_mysql_copy')->getAllTables();
$tables = array_column($tables, 'Tables_in_' . $database_name);
foreach ($tables as $table) {
$has_table = Schema::connection('custom_mysql')->hasTable($table);
if (!$has_table) {
$sql = DB::connection('custom_tmp_mysql_copy')->select("SHOW CREATE TABLE {$table}");
DB::connection('custom_mysql')->statement(array_values((array)$sql[0])[0]); // 修正此处的sql语句获取方式
}
if ($table == 'gl_customer_visit' || $table == 'gl_customer_visit_item' || $table == 'gl_inquiry_other' || $table == 'gl_inquiry_form_data' || $table == 'gl_inquiry_form') {
continue;
}
DB::connection('custom_mysql')->table($table)->truncate(); // 清空目标表数据
DB::connection('custom_mysql')->table($table)->insertUsing(
[], // 列名数组,留空表示插入所有列
function ($query) use ($table, $project_id) {
$name = 'gl_data_' . $project_id . '.' . $table;
$query->select('*')->from("{$name}");
}
);
if (Schema::connection('custom_mysql')->hasColumn($table, 'project_id')) {
DB::connection('custom_mysql')->table($table)->update(['project_id' => $news_project_id]);
}
}
return true;
}
}
... ...
... ... @@ -100,6 +100,7 @@ class NoticeController extends BaseController
$keyword->video = $video;
$keyword->embed_code = $embed_code;
$keyword->video_thumb = $thumb;
$keyword->is_video_keyword = 1;
$keyword->save();
DB::disconnect('custom_mysql');
return 200;
... ...
... ... @@ -9,6 +9,7 @@ use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\Ai\AiPrefix;
use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\Com\KeywordVideoTask;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\ManageHr;
use App\Models\Project\DeployOptimize;
... ... @@ -194,6 +195,7 @@ class OptimizeController extends BaseController
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.start_date AS start_date',
'gl_project_deploy_optimize.backlink AS backlink',
'gl_project_deploy_optimize.ai_video AS ai_video',
'gl_domain_info.amp_status AS amp_status',
'gl_domain_info.domain AS domain',
];
... ... @@ -390,4 +392,30 @@ class OptimizeController extends BaseController
$optimizeModel->edit(['backlink'=>$this->param['backlink']],['project_id'=>$this->param['project_id']]);
$this->response('success');
}
/**
* @remark :开启视频模块
* @name :setAiVideo
* @author :lyh
* @method :post
* @time :2024/5/30 10:30
*/
public function setAiVideo(){
$this->request->validate([
'project_id'=>'required',
'status'=>'required',
],[
'project_id.required' => 'project_id不能为空',
'status.required' => '状态不能为空',
]);
$keywordVideoModel = new KeywordVideoTask();
$info = $keywordVideoModel->read(['project_id'=>$this->param['project_id']]);
if($info === false){
$this->response('请先创建视频任务,才能开启',Code::SYSTEM_ERROR);
}
$keywordVideoModel->edit(['status'=>$this->param['status']],['project_id'=>$this->param['project_id']]);
$optimizeModel = new DeployOptimize();
$optimizeModel->edit(['ai_video'=>$this->param['status']],['project_id'=>$this->param['project_id']]);
$this->response('success');
}
}
... ...
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/5/28
* Time: 14:25
*/
namespace App\Http\Controllers\Aside\Task;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Com\Notify;
use App\Models\Project\Project;
use App\Models\WebSetting\WebLanguage;
use Illuminate\Http\Request;
/**
* 自动任务信息
* Class AutoTaskController
* @package App\Http\Controllers\Aside\Task
*/
class AutoTaskController extends BaseController
{
/**
* 页面生成任务
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function createHtmlTask(Request $request)
{
// 接收信息
$project_id = intval($request->input('project_id'));
$status = intval($request->input('status'));
$route = intval($request->input('route'));
$type = intval($request->input('type'));
$row = intval($request->input('row', 20));
// 所有参数都有初始化数据, 无数据验证
// 查询初始数据
$where = compact('project_id', 'route', 'type');
$where = array_filter($where);
if ($status)
$where['status'] = $status - 1;
$result = Notify::select(['id','project_id', 'type', 'data', 'status', 'route', 'num', 'updated_at', 'created_at'])
->where('id', '>', 84000) // 查询有效数据
->where('server_id', '<>', 9) // 过滤测试环境数据
->where('server_id', '>', 0) // 过滤测试环境数据
->where($where)
->orderBy('id', 'desc')
->paginate($row);
// 数据中需要处理项目信息
$project_ids = $result->pluck('project_id')->toArray();
$projects = Project::whereIN('id', $project_ids)->pluck('title', 'id')->toArray();
// 数据中需要处理的语种信息
$language = WebLanguage::pluck('chinese', 'id')->toArray();
// 数据中需要映射的参数信息
$type = Notify::typeMap();
$route = Notify::routeMap();
$status = Notify::statusMap();
// 转数组操作, 如果是对象, 添加字段会报错
$result = $result->toArray();
foreach ($result['list'] as &$val) {
// 解析data信息, 以后数据库尽量不要存需要处理的JSON信息, 拆分成指定字段
$data = json_decode($val['data'], true);
$val['language'] = [];
// 小语种 并且 有语种信息, 将语种转换成中文
if ($val['type'] == Notify::TYPE_MINOR && FALSE == empty($data['language'])) {
foreach ($data['language'] as $v) {
$val['language'][] = $language[$v];
}
}
// 映射信息 以及解析信息
$val['type'] = $type[$val['type']];
$val['route'] = $route[$val['route']];
$val['status'] = $status[$val['status']];
$val['project_title'] = $projects[$val['project_id']] ?? '';
$val['domain'] = $data['domain'] ?? '';
$val['url'] = FALSE == empty($data['url']) ? $data['url'] : [];
}
return $this->response('success', Code::SUCCESS, $result);
}
/**
* 页面生成任务参数
* @return \Illuminate\Http\JsonResponse
*/
public function createHtmlTaskParam()
{
$status = Notify::statusMap();
$status_new = [];
foreach ($status as $key=>$val) {
$status_new[$key+1] = $val;
}
$result = [
'status' => $status_new,
'type' => Notify::typeMap(),
'route' => Notify::routeMap()
];
return $this->response('success', Code::SUCCESS, $result);
}
}
\ No newline at end of file
... ...
... ... @@ -96,6 +96,7 @@ class FileManageController extends BaseController
$cosService = new CosService();
$cosService->uploadFile($file,$path,$fileName);
$data['project_id'] = $this->user['project_id'];
$data['en_name'] = $fileName;
$data['path'] = $path.'/'.$fileName;
$rs = $fileManage->add($data);
if ($rs === false) {
... ... @@ -113,14 +114,16 @@ class FileManageController extends BaseController
*/
public function getOnlyFilename($name,$project_id = 0){
$nameArr = explode('.',$name);
$enName = generateRoute(Translate::tran($nameArr[0], 'en'));
$suffix = array_pop($nameArr) ?? 'txt';
$nameStr = implode('-', $nameArr);
$enName = generateRoute(Translate::tran($nameStr, 'en'));
$fileName = $enName;
$i=1;
while($this->onlyName($enName.'.'.$nameArr[1],$project_id)){
while($this->onlyName($enName.'.'.$suffix,$project_id)){
$enName = $fileName .'-'.$i;
$i++;
}
return $enName.'.'.$nameArr[1];
return $enName.'.'.$suffix;
}
/**
... ... @@ -154,7 +157,7 @@ class FileManageController extends BaseController
if(!in_array($extension, explode(',', $this->upload_config['allow_file_type']))){
$this->fail('不允许上传的文件类型');
}
$hash = hash_file('md5', $file->getPathname());
$hash = hash_file('sha256', $file->getPathname());
$info = FileManage::where('hash', $hash)->first();
if($info){
$this->fail('文件已上传,文件名称.'.$info['name']);
... ...
... ... @@ -201,4 +201,26 @@ class KeywordController extends BaseController
}
$this->response('success');
}
/**
* @remark :批量操作关键字是否展示视频
* @name :batchKeywordIsVideo
* @author :lyh
* @method :post
* @time :2024/5/30 14:29
*/
public function batchKeywordIsVideo(){
$this->request->validate([
'title'=>['required','array', 'max:500']
],[
'title.required' => 'title不能为空',
'title.array' => 'title为数组',
'title.max' => '批量操作不能超过500条数据'
]);
$keywordModel = new Keyword();
foreach ($this->param['title'] as $v){
$keywordModel->edit(['is_video_keyword'=>$this->param['is_video_keyword']],['title'=>$v]);
}
$this->response('success');
}
}
... ...
... ... @@ -195,7 +195,7 @@ class FileController
*/
public function api_upload_single(&$files)
{
$hash = hash_file('md5', $files->getPathname());
$hash = hash_file('sha256', $files->getPathname());
$name = $files->getFilename();
//查看文件是否存在
$fileModel = new File();
... ...
... ... @@ -45,9 +45,12 @@ class AyrReleaseLogic extends BaseLogic
}
$this->param['result_data'] = $res;
$this->param['platforms'] = json_encode($this->param['platforms']);
$rs = $this->model->add($this->param);
if($rs === false){
$this->fail('error');
$info = $this->model->read(['platforms'=>$this->param['platforms'],'operator_id'=>$this->param['operator_id'],'project_id'=>$this->param['project_id'],'title'=>$this->param['title']]);
if($info === false){
$rs = $this->model->add($this->param);
if($rs === false){
$this->fail('error');
}
}
return $this->success();
}
... ...
... ... @@ -9,6 +9,7 @@ use App\Models\Service\Service as ServiceSettingModel;
use App\Models\Template\BCustomTemplate;
use App\Models\Template\BTemplateCommon;
use App\Models\Template\BTemplateLog;
use App\Models\Template\BTemplateMain;
use App\Models\Template\Setting;
use App\Models\Template\BTemplate;
... ... @@ -83,6 +84,13 @@ class CustomTemplateLogic extends BaseLogic
if($this->param['url'] == $this->model::NOT_FOUND_PAGE_URL){
$this->fail('404页面已存在');
}
if($this->param['url'] == 'search'){
$bTemplateMainModel = new BTemplateMain();
$mainInfo = $bTemplateMainModel->read(['type'=>8]);
if($mainInfo !== false){
$this->param['html'] = $mainInfo['main_html'];
}
}
$this->param['project_id'] = $this->user['project_id'];
$id = $this->model->addReturnId($this->param);
$route = RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_PAGE, $id, $this->user['project_id']);
... ...
... ... @@ -303,7 +303,7 @@ class TranslateLogic extends BaseLogic
if(strtolower($route) == 'all'){
return $this->success($data);
}
if($route == '/'){
if($route == 'index'){
$data['source'] = 1;
return $this->success($data);
}
... ...
... ... @@ -69,10 +69,11 @@ class CopyProjectJob implements ShouldQueue
$settingTemplateModel = new Setting();
$settingData = $settingTemplateModel::where('project_id', $this->param['project_id'])->first();
if(!empty($settingData)){
$settingData = $settingData->getAttributes();
unset($settingData['id']);
$settingData['project_id'] = $project_id;
$settingTemplateModel->insert($settingData);
$data = [
'template_id' =>$settingData['template_id'],
'project_id' => $project_id
];
$settingTemplateModel->add($data);
}
//复制部署表
$buildModel = new DeployBuild();
... ...
... ... @@ -13,6 +13,7 @@ class Notify extends Base
const STATUS_INIT = 0;
const STATUS_FINISH_ROUTE = 1;
const STATUS_FINISH_PAGE = 2;
const STATUS_FINISH_SITEMAP = 3;
/**
* 类型 1:主站, 2:小语种, 3:amp
... ... @@ -36,4 +37,47 @@ class Notify extends Base
const ROUTE_PRODUCT_KEYWORD = 4;
const ROUTE_NOT_TRANSLATE = 5;
const ROUTE_PRODUCT_VIDEO_KEYWORD = 6;
/**
* 类型
* @return array
*/
public static function typeMap()
{
return [
self::TYPE_MASTER => '主站',
self::TYPE_MINOR => '小语种',
self::TYPE_AMP => 'AMP',
];
}
/**
* 生成目标页面
* @return array
*/
public static function routeMap()
{
return [
self::ROUTE_ALL => '主站页面',
self::ROUTE_NEED => '更新页面',
self::ROUTE_URL => '指定路由',
self::ROUTE_PRODUCT_KEYWORD => '聚合页面',
self::ROUTE_NOT_TRANSLATE => '漏翻检查',
self::ROUTE_PRODUCT_VIDEO_KEYWORD => '视频聚合页'
];
}
/**
* 状态
* @return array
*/
public static function statusMap()
{
return [
self::STATUS_INIT => '排队中',
self::STATUS_FINISH_ROUTE => '页面生成中',
self::STATUS_FINISH_PAGE => 'sitemap生成中',
self::STATUS_FINISH_SITEMAP => '完成',
];
}
}
... ...
... ... @@ -71,14 +71,16 @@ class UpdateLog extends Model
*/
public static function getProjectUpdate($project_id)
{
$collect_time = '';
$collect_un_count = UpdateLog::where('project_id', $project_id)->where('collect_status', 0)->count();
if ($collect_un_count > 0) {
$collect_time = '采集中';
} else {
$collect_info = UpdateLog::where('project_id', $project_id)->orderBy('updated_at', 'desc')->first();
$collect_time = $collect_info->updated_at->format('Y-m-d H:i:s');
if(!empty($collect_info)){
$collect_time = $collect_info->updated_at->format('Y-m-d H:i:s');
}
}
return $collect_time;
}
}
... ...
... ... @@ -51,7 +51,7 @@ return [
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'cdn'=>'https://v6-file.globalso.com'
'cdn'=>'https://globalso-v6.s3.us-west-2.amazonaws.com'
],
'upload' => [
... ...
... ... @@ -276,6 +276,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/saveAiPrefix', [Aside\Optimize\OptimizeController::class, 'saveAiPrefix'])->name('admin.optimize_saveAiPrefix');//保存Ai前后缀
Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关
Route::any('/editBacklink', [Aside\Optimize\OptimizeController::class, 'editBacklink'])->name('admin.optimize_editBacklink');//设置backlink开关
Route::any('/setAiVideo', [Aside\Optimize\OptimizeController::class, 'setAiVideo'])->name('admin.optimize_setAiVideo');//设置backlink开关
Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关
});
//生成关键字
... ... @@ -411,6 +412,10 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/generate_aicc_token', [Aside\Com\IndexController::class, 'generateAiCCToken'])->name('admin.generate_aicc_token');
Route::any('/getAutoToken', [Aside\Com\IndexController::class, 'getAutoToken'])->name('admin.getAutoToken');
// 生成页面任务
Route::any('/create_html_task', [Aside\Task\AutoTaskController::class, 'createHtmlTask'])->name('admin.create_html_task');
Route::any('/create_html_param', [Aside\Task\AutoTaskController::class, 'createHtmlTaskParam'])->name('admin.create_html_param');
});
//无需登录验证的路由组
... ...
... ... @@ -266,6 +266,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::post('keyword/batchAdd', [\App\Http\Controllers\Bside\Product\KeywordController::class, 'batchAdd'])->name('product_keyword_batchAdd');
Route::post('keyword/batchDel', [\App\Http\Controllers\Bside\Product\KeywordController::class, 'batchDel'])->name('product_keyword_batchDel');
Route::any('keyword/delete', [\App\Http\Controllers\Bside\Product\KeywordController::class, 'delete'])->name('product_keyword_delete');
Route::any('keyword/batchKeywordIsVideo', [\App\Http\Controllers\Bside\Product\KeywordController::class, 'batchKeywordIsVideo'])->name('product_keyword_batchKeywordIsVideo');
Route::any('keyword/batchKeywordFiled', [\App\Http\Controllers\Bside\Product\KeywordController::class, 'batchKeywordFiled'])->name('product_keyword_batchKeywordFiled');
//产品参数
Route::get('attr', [\App\Http\Controllers\Bside\Product\AttrController::class, 'index'])->name('product_attr');
... ...