作者 赵彬吉

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

<?php
namespace App\Http\Controllers\Aside\Template;
use App\Http\Controllers\Aside\BaseController;
/**
* 模板header footer
* @author:dc
* @time 2023/4/26 11:10
* Class HeaderFooterController
* @package App\Http\Controllers\Aside\Template
*/
class HeaderFooterController extends BaseController
{
}
... ... @@ -3,9 +3,12 @@
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Logic\Aside\Template\TemplateChunkLogic;
use App\Http\Logic\Aside\Template\TemplateLogic;
use App\Http\Requests\Aside\Template\TemplateChunkRequest;
use App\Http\Requests\Aside\Template\TemplateRequest;
use App\Models\Template\ATemplate;
use App\Models\Template\ATemplateChunk;
use App\Models\Template\ATemplateHtml;
use Illuminate\Validation\Rule;
... ... @@ -195,4 +198,48 @@ class TemplateController extends BaseController
/**
* 自定义界面,块
* @author:dc
* @time 2023/5/29 10:27
*/
public function chunk_lists(){
$lists = TemplateChunkLogic::instance()->getList()->toArray();
return $this->success($lists);
}
/**
* 自定义界面,块 保存
* @author:dc
* @time 2023/5/29 10:37
*/
public function chunk_save(TemplateChunkRequest $request){
$data = TemplateChunkLogic::instance()->save($request->validated());
return $this->success(TemplateChunkLogic::instance()->getInfo($data['id']));
}
/**
* 自定义界面,块 删除
* @author:dc
* @time 2023/5/29 10:38
*/
public function chunk_delete($chunk_id){
TemplateChunkLogic::instance()->delete($chunk_id);
return $this->response('删除成功');
}
}
... ...
... ... @@ -39,4 +39,31 @@ class FileController extends BaseController
$path = Upload::url2path($this->param['url'] ?? '');
return Storage::disk('upload')->download($path);
}
/**
* 文件列表
* @author:dc
* @time 2023/5/29 11:42
*/
public function lists(){
$type = \request()->get('type');
switch ($type){
case 'video':{
$ext = ['mp4','avi'];
break;
}
default:{
$ext = ['png','jpg','jpeg','gif'];
break;
}
}
$files = Upload::lists($this->param['config'] ?? 'default',$ext);
return $this->success($files);
}
}
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Aside\Template\TemplateChunkLogic;
use App\Http\Logic\Bside\TemplateLogic;
use App\Http\Requests\Bside\TemplateRequest;
use App\Models\Template\ATemplate;
... ... @@ -119,16 +120,11 @@ class TemplateController extends BaseController
public function get_html(){
$source = $this->param['source']??'';
$source_id = $this->param['source_id']??0;
$data = TemplateLogic::instance()->first($source,$source_id);
$res = [
'html' => $data['html']??'',
'name' => 'example'
];
return $this->response('',Code::SUCCESS,$res);
}
... ... @@ -141,17 +137,38 @@ class TemplateController extends BaseController
public function save_html(TemplateRequest $request){
$data = $request->validated();
$data['data_source'] = $data['source'];
$data['data_source_id'] = $data['source_id'];
unset($data['source']);
unset($data['source_id']);
TemplateLogic::instance()->save($data);
return $this->response('保存成功');
// 不需要数据id
if(in_array($data['data_source'],['index'])){
$data['data_source_id'] = 0;
}
unset($data['source']);
unset($data['source_id']);
$id = TemplateLogic::instance()->save($data);
if($id){
$info = TemplateLogic::instance()->getInfo($id['id']);
$info['source'] = $info['data_source'];
$info['source_id'] = $info['data_source_id'];
unset($info['data_source']);
unset($info['data_source_id']);
unset($info['template_id']);
unset($info['created_at']);
unset($info['updated_at']);
unset($info['css']);
unset($info['script']);
unset($info['data_ext']);
return $this->success($info,Code::SUCCESS,'保存成功');
}
return $this->response('保存失败',Code::SYSTEM_ERROR);
}
/**
... ... @@ -179,36 +196,17 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/10 14:55
*/
public function customChunk(){
//
// $html = $this->param['html']??[];
// // 那个页面 的
// $type = $this->param['type']??'';
//
// if(!is_array($html)){
// return $this->response('参数异常',Code::SYSTEM_ERROR);
// }
//
// // 项目id
// $project_id = $this->user['project_id'];
// // 当前模板
// $template_id = BSetting::_get($project_id)['template_id'];
//
// // 验证这个模板是否存在
// if(!$type || !ATemplateHtml::_typeExist($template_id,$type)){
// return $this->response('页面类型错误',Code::SYSTEM_ERROR);
// }
//
//
// $html = view("template.{$template_id}.{$type}")->render();
//
//
// return $this->response('',Code::SUCCESS,$html);
//// $data = BTemplateData::_insert();
//
//
public function chunk(){
$lists = TemplateChunkLogic::instance()->getList([['status','=',1]],['sort'=>'asc'],['*'],false)->toArray();
foreach ($lists as &$list){
unset($list['created_at']);
unset($list['updated_at']);
unset($list['status']);
}
return $this->success($lists);
}
... ...
... ... @@ -95,8 +95,8 @@ class UserController extends BaseController
],[
'id.required' => 'ID不能为空',
]);
$userLogic->user_info();
$this->response('success');
$info = $userLogic->user_info();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :删除管理员
... ...
... ... @@ -141,7 +141,7 @@ class FileController
$fileModel = new File();
$file_hash = $fileModel->read(['hash'=>$hash]);
if($file_hash !== false){
return $hash;
return $this->response('资源',Code::SUCCESS,['file'=>$hash]);
}
$url = $this->path;
$fileName = uniqid().rand(10000,99999).'.'.$files->getClientOriginalExtension();
... ... @@ -197,7 +197,7 @@ class FileController
$data[] = $hash;
}
$fileModel->insert($save_data);
return $this->response('资源',Code::SUCCESS,['files'=>$data]);
return $this->response('资源',Code::SUCCESS,['file'=>$data]);
}
/**
* @name 统一返回参数
... ...
... ... @@ -175,7 +175,7 @@ class ImageController
$hash = hash_file('md5', $file->getPathname());
$image_hash = $imageModel->read(['hash'=>$hash]);
if($image_hash !== false){
$data[] = $hash;
$data[] = ['image'=>$hash];
continue;
}
$url = $this->path;
... ... @@ -192,10 +192,10 @@ class ImageController
'hash' => $hash,
'type'=>$file->getClientOriginalExtension(),
];
$data[] = $hash;
$data[] = ['image'=>$hash];
}
$imageModel->insert($save_data);
return $this->response('图片资源',Code::SUCCESS,['image'=>$data]);
return $this->response('图片资源',Code::SUCCESS,$data);
}
//下载
... ... @@ -247,15 +247,6 @@ class ImageController
case 'image':
$data['image_link'] = url('/b/image/' . $v);
break;
case 'images':
$v = explode(',',$v);
foreach ($v as $k1=>$v1){
$data['images_link'][$k1] = url('/b/image/' . $v1);
}
break;
case 'file':
$data['file_link'] = url('/b/file_hash/' . $v);
break;
}
}
}
... ...
... ... @@ -99,6 +99,5 @@ class Kernel extends HttpKernel
'aloginauth'=>AsideLoginAuthMiddleware::class,
//B端登录验证中间件
'bloginauth'=>BsideLoginAuthMiddleware::class,
'accesstoken'=>AccessToken::class,
];
}
... ...
<?php
namespace App\Http\Logic\Aside\Template;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Template\ATemplateChunk;
/**
* 自定义块 模板
* @author:dc
* @time 2023/5/29 10:46
* Class TemplateChunkLogic
* @package App\Http\Logic\Aside\Template
*/
class TemplateChunkLogic extends BaseLogic {
public function __construct()
{
parent::__construct();
$this->model = new ATemplateChunk();
}
public function save($param)
{
$param['images'] = is_array($param['images']??'') ? json_encode($param['images']): '[]';
$param['video'] = is_array($param['video']??'') ? json_encode($param['video']): '[]';
return parent::save($param); // TODO: Change the autogenerated stub
}
}
... ...
... ... @@ -37,9 +37,11 @@ class TemplateLogic extends BaseLogic
$data = $this->first($param['data_source'],$param['data_source_id']);
if($data){
$param['id'] = $data['id'];
}else{
$param['template_id'] = BSetting::_get($this->user['project_id'])['template_id'];
}
parent::save($param);
return parent::save($param);
}
... ... @@ -83,7 +85,7 @@ class TemplateLogic extends BaseLogic
'project_id'=>$this->user['project_id'],
'data_source' => $source,
'data_source_id' => $source_id,
'template_id' => BSetting::_get($this->user['project_id'])
'template_id' => BSetting::_get($this->user['project_id'])['template_id']
])->first();
}
... ...
... ... @@ -9,6 +9,7 @@ use App\Exceptions\AsideGlobalException;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Models\Devops\ServerInformationLog;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
... ... @@ -57,7 +58,7 @@ class Logic
* @param array $sort
* @param array $columns
* @param int $limit
* @return array
* @return array|Model
* @author zbj
* @date 2023/4/13
*/
... ...
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Closure;
class AccessToken
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
session_start();
// 指定允许其他域名访问
$http_origin = "*";
if(isset($_SERVER['HTTP_ORIGIN'])){
$http_origin = $_SERVER['HTTP_ORIGIN'];
}
header("Access-Control-Allow-Origin:".$http_origin);
header('Access-Control-Allow-Methods:POST,GET'); //支持的http 动作
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept, Authorization, token'); //响应头 请按照自己需求添加。
if (strtolower($_SERVER['REQUEST_METHOD']) == 'options') {
exit;
}
return $next($request);
}
}
... ... @@ -15,22 +15,19 @@ class EnableCrossRequestMiddleware
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$origin = $request->server('HTTP_ORIGIN') ?: '';
// $allow_origin = [
// 'http://localhost:8080',
// ];
// if (in_array($origin, $allow_origin)) {
$header = [
// 'Access-Control-Allow-Origin' => $origin,
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Headers' => '*',
'Access-Control-Expose-Headers' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS',
'Access-Control-Allow-Credentials' => 'true',
];
$response->headers->add($header);
// }
return $response;
// 指定允许其他域名访问
$http_origin = "*";
if(isset($_SERVER['HTTP_ORIGIN'])){
$http_origin = $_SERVER['HTTP_ORIGIN'];
}
header("Access-Control-Allow-Origin:".$http_origin);
header('Access-Control-Allow-Methods:POST,GET'); //支持的http 动作
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept, Authorization, token'); //响应头 请按照自己需求添加。
if (strtolower($_SERVER['REQUEST_METHOD']) == 'options') {
exit;
}
return $next($request);
}
}
... ...
<?php
namespace App\Http\Requests\Aside\Template;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
/**
* 自定义模板 块
* @author:dc
* @time 2023/5/29 10:57
* Class TemplateChunkRequest
* @package App\Http\Requests\Aside\Template
*/
class TemplateChunkRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rule = [
'id' => ['required','integer'],
'name' => ['required'],
'type' => ['required'],
'status' => ['required',Rule::in(0,1)],
'sort' => ['required','integer'],
'thumb' => ['required'],
'html' => ['required'],
'attr' => [],
'images' => [],
'video' => [],
];
// 更新场景
if($this->is('a/template/chunk/create')){
unset($rule['id']);
}
if($this->is('b/template/chunk/create')){
unset($rule['id']);
}
return $rule;
}
public function messages()
{
return [
'id.required' => 'id必须',
'id.integer' => 'id必须',
'name.required' => '名称必须',
'type.required' => '类型必须',
'status.integer' => '状态错误',
'status.in' => '状态错误',
'sort.required' => '排序必须',
'sort.integer' => '排序必须',
'thumb.required' => '缩略图必须',
'html.required' => 'html代码必须',
// 'attr.required' => '其他必须',
];
}
}
... ...
... ... @@ -43,7 +43,7 @@ class TemplateRequest extends FormRequest
// 删除
if(!$this->is('b/template/status')){
if($this->is('b/template/status')){
unset($rule['css']);
unset($rule['script']);
unset($rule['html']);
... ...
<?php
namespace App\Models\Template;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* 自定义块 模板块
* @author:dc
* @time 2023/5/29 10:39
* Class ATemplateChunk
* @package App\Models\Template
*/
class ATemplateChunk extends \App\Models\Base{
protected $table = 'gl_aside_template_chunk';
protected $hidden = ['deleted_at'];
use SoftDeletes;
public static $typeMap = [
'index' => '首页',
'product' => '商品列表',
'product_info' => '商品详情',
'blogs' => '博客列表',
'blogs_info' => '博客详情',
'page' => '单页',
'news' => '新闻列表',
'news_info' => '新闻详情',
];
public function getImagesAttribute($val)
{
return $val ? json_decode($val,true) : [];
}
public function getVideoAttribute($val)
{
return $val ? json_decode($val,true) : [];
}
}
... ...
... ... @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Facade;
* @method static array filePut(string $filename, string $content, string|array $config="default")
* @method static string url2path(string $url, string|array $disk="upload")
* @method static string path2url(string $path, string|array $disk="upload")
* @method static array lists(string $config,array $ext=[])
*/
class Upload extends Facade
{
... ...
... ... @@ -272,4 +272,33 @@ class UploadService extends BaseService
$this->config();
return Storage::disk($this->config['disk'])->url($path);
}
/**
* 文件列表
* @return array
* @author:dc
* @time 2023/5/29 11:49
*/
public function lists($config,array $ext=[]){
$this->config($config);
$disk = Storage::disk($this->config['disk']);
$lists = $disk->allFiles();
if($ext){
foreach ($lists as $k=>$list){
$list = explode('.',$list);
if(!in_array(end($list),$ext)){
unset($lists[$k]);
}else{
$lists[$k] = $disk->url($lists[$k]);
}
}
}
return $lists;
}
}
... ...
... ... @@ -6,7 +6,8 @@ use \Illuminate\Support\Facades\Route;
use \App\Http\Controllers\Aside;
//必须登录验证的路由组
Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上web的中间件
Route::middleware(['web','accesstoken'])->group(function (){ //admin用渲染默认要加上web的中间件
Route::middleware(['aloginauth'])->group(function () {
Route::get('/', [Aside\IndexController::class, 'index'])->name('admin.home.white');
Route::get('/logout', [Aside\LoginController::class, 'logout'])->name('admin.logout.white');
... ... @@ -164,10 +165,13 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w
Route::post('/html/{template_id}/insert', [\App\Http\Controllers\Aside\TemplateController::class, 'html_insert'])->where('template_id','\d+')->name('admin.template_insert.html');
Route::delete('/html/{template_id}/delete/{id}', [\App\Http\Controllers\Aside\TemplateController::class, 'html_delete'])->where('template_id','\d+')->where('id','\d+')->name('admin.template_delete.html');
Route::get('/html/type', [\App\Http\Controllers\Aside\TemplateController::class, 'html_type'])->name('admin.template_type.html');
});
// 自定义块,模板块
Route::get('/chunk/lists', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_lists'])->name('admin.template.chunk_lists');
Route::post('/chunk/create', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_save'])->name('admin.template.chunk_create');
Route::post('/chunk/update', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_save'])->name('admin.template.chunk_update');
Route::delete('/chunk/delete/{chunk_id}', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_delete'])->where('chunk_id','\d+')->name('admin.template.chunk_delete');
});
});
//无需登录验证的路由组
... ...
... ... @@ -6,7 +6,7 @@
use Illuminate\Support\Facades\Route;
//必须登录验证的路由组
Route::middleware(['bloginauth','accesstoken'])->group(function () {
Route::middleware(['bloginauth'])->group(function () {
//登录用户编辑个人资料
Route::any('/edit_info', [\App\Http\Controllers\Bside\ComController::class, 'edit_info'])->name('edit_info');
Route::any('/logout', [\App\Http\Controllers\Bside\ComController::class, 'logout'])->name('logout');
... ... @@ -187,6 +187,7 @@ Route::middleware(['bloginauth','accesstoken'])->group(function () {
//文件操作
Route::prefix('file')->group(function () {
Route::post('/upload', [\App\Http\Controllers\Bside\FileController::class, 'upload'])->name('file_upload');
Route::get('/lists', [\App\Http\Controllers\Bside\FileController::class, 'lists'])->name('file_lists');
});
//图片操作
Route::prefix('images')->group(function () {
... ... @@ -232,9 +233,22 @@ Route::middleware(['bloginauth','accesstoken'])->group(function () {
// Route::get('/custom-chunk', [\App\Http\Controllers\Bside\TemplateController::class, 'customChunk'])->name('bside_template_custom_chunk');
Route::get('/get_type', [\App\Http\Controllers\Bside\TemplateController::class, 'get_type'])->name('bside_template_type');
Route::get('/get_html', [\App\Http\Controllers\Bside\TemplateController::class, 'get_html'])->name('bside_template_get_html');
Route::get('/save_html', [\App\Http\Controllers\Bside\TemplateController::class, 'save_html'])->name('bside_template_save_html');
Route::post('/save_html', [\App\Http\Controllers\Bside\TemplateController::class, 'save_html'])->name('bside_template_save_html');
Route::get('/status', [\App\Http\Controllers\Bside\TemplateController::class, 'status'])->name('bside_template_status');
// 自定义模板的 块。
Route::get('/chunk', [\App\Http\Controllers\Bside\TemplateController::class, 'chunk'])->name('bside_template_chunk');
Route::post('/chunk/create', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_save'])->name('admin.template.chunk_create');
Route::post('/chunk/update', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_save'])->name('admin.template.chunk_update');
Route::delete('/chunk/delete/{chunk_id}', [\App\Http\Controllers\Aside\TemplateController::class, 'chunk_delete'])->where('chunk_id','\d+')->name('admin.template.chunk_delete');
});
// 自定义页面,专题页
Route::prefix('custom')->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\CustomController::class, 'index'])->name('bside_custom');
... ...