作者 Your Name

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

... ... @@ -144,3 +144,68 @@ if (!function_exists('checkDomain')) {
}
}
}
/**
* 把返回的数据集转换成Tree
* @param $list array 数据列表
* @param string|int $pk 主键|root
* @param string $pid 父id
* @param string $child 子键
* @param int $root 获取哪个id下面
* @param bool $empty_child 当子数据不存在,是否要返回空子数据
* @return array
*/
function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0,$empty_child=true) {
// 如果是数字,则是root
if(is_numeric($pk)){
$root = $pk;
$pk = 'id';
}
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
if($empty_child){
$list[$key][$child] = [];
}
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$refer[$parentId][$child][] = & $list[$key];
}
}
}
}
return $tree;
}
/**
* tree数据转list
* @param $tree
* @param string $child
* @return array
* @author:dc
* @time 2022/1/11 10:13
*/
function tree_to_list($tree, $child='_child'){
$lists = [];
foreach ($tree as $item){
$c = $item[$child]??[];
unset($item[$child]);
$lists[] = $item;
if ($c){
$lists = array_merge($lists,tree_to_list($c, $child));
}
}
return $lists;
}
... ...
... ... @@ -4,6 +4,8 @@ namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Controller;
use App\Http\Requests\Aside\Template\TemplateRequest;
use App\Http\Requests\Scene;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Exceptions\HttpResponseException;
... ... @@ -155,4 +157,21 @@ class BaseController extends Controller
}
return $data;
}
/**
* 验证
* @param $c
* @param $scene
* @return array
* @author:dc
* @time 2023/5/11 14:56
*/
protected final function verify($c,$scene=null){
return (new $c())->setScene($scene?:Scene::$CREATE)->validated();
}
}
... ...
... ... @@ -3,6 +3,9 @@
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Logic\Aside\Template\TemplateLogic;
use App\Http\Requests\Aside\Template\TemplateRequest;
use App\Http\Requests\Scene;
use App\Models\Template\ATemplate;
use App\Models\Template\ATemplateHtml;
use Illuminate\Validation\Rule;
... ... @@ -25,22 +28,9 @@ class TemplateController extends BaseController
*/
public function index(){
$limit = $this->param['limit']??20;
$lists = (new ATemplate)->lists($this->map,$this->page,$this->row,$this->order,['id','name','status','is_default','sort','thumb','url','created_at','updated_at']);
$this->response('success',Code::SUCCESS,$lists);
$lists = ATemplate::where(function ($query){
!empty($this->param['status']) && $query->where('status',$this->param['status']);
!empty($this->param['name']) && $query->where('status',$this->param['name']);
})
->select(['id','name','status','is_default','sort','thumb','url','created_at','updated_at'])
->orderBy('sort')
->paginate($limit);
return $this->success($lists->toArray());
}
... ... @@ -50,7 +40,7 @@ class TemplateController extends BaseController
* @time 2023/5/4 16:19
*/
public function edit(){
$this->save(true);
$this->save(Scene::$UPDATE);
}
/**
... ... @@ -59,7 +49,7 @@ class TemplateController extends BaseController
* @time 2023/5/5 9:30
*/
public function insert(){
$this->save();
$this->save(Scene::$CREATE);
}
... ... @@ -72,47 +62,15 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/11 10:13
*/
private function save($is_edit=false){
private function save($scene){
$verify = [
'role' => [
'id' => ['required','integer'],
'name' => ['required'],
'status' => ['required',Rule::in(0,1)],
'is_default' => ['required',Rule::in(0,1)],
'sort' => ['required','integer'],
'thumb' => ['required'],
'url' => ['required'],
],
'message' => [
'id.required' => 'id必须',
'id.integer' => 'id必须',
'name.required' => '名称必须',
'status.integer' => '状态错误',
'status.in' => '状态错误',
'is_default.integer' => '是否默认',
'is_default.in' => '是否默认',
'sort.required' => '排序必须',
'sort.integer' => '排序必须',
'thumb.required' => '缩略图必须',
'url.required' => '预览链接必须',
]
];
if(!$is_edit) unset($verify['role']['id']);
$data = $this->validate(request() ,$verify['role'],$verify['message']);
$data = $this->verify(TemplateRequest::class,$scene);
TemplateLogic::instance()->save($data);
// 保存
$id = ATemplate::_save($data,$data['id']??0);
if(!$id){
return $this->response('保存失败',Code::SYSTEM_ERROR);
}
return $this->success(ATemplate::_find($id));
}
... ... @@ -142,11 +100,9 @@ class TemplateController extends BaseController
*/
public function html_index($template_id){
$lists = (new ATemplate)->list($this->map,$this->order,['id','name','status','is_default','sort','thumb','url','created_at','updated_at']);
$this->response('success',Code::SUCCESS,$lists);
$lists = ATemplateHtml::where('template_id',$template_id)->get();
return $this->success($lists->toArray());
}
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Helper\Common;
use App\Http\Controllers\Controller;
use App\Http\Requests\Scene;
use App\Models\User\User as UserModel;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
... ... @@ -101,21 +102,12 @@ class BaseController extends Controller
*/
public function response($msg = null,string $code = Code::SUCCESS,$data = [],$result_code = 200,$type = 'application/json'): JsonResponse
{
try {
$code = Code::fromValue($code);
$result = [
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $this->_extents($data),
];
}catch (\Throwable $e){
$result = [
'msg' => $msg,
'code' => $code,
'data' => $this->_extents($data),
];
}
$code = Code::fromValue($code);
$result = [
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $this->_extents($data),
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
$response = response($result,$result_code,$this->header);;
... ... @@ -216,4 +208,18 @@ class BaseController extends Controller
}
/**
* 验证
* @param $c
* @param $scene
* @return array
* @author:dc
* @time 2023/5/11 14:56
*/
protected final function verify($c,$scene=null){
return (new $c())->setScene($scene?:Scene::$CREATE)->validated();
}
}
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Requests\Bside\Nav\NavRequest;
use App\Models\BNav;
/**
... ... @@ -16,42 +17,6 @@ use App\Models\BNav;
class NavController extends BaseController
{
/**
* 验证规则
* @var array[]
*/
private $verify = [
'role' => [
'pid' => ['required','integer','gte:0'],
'name' => ['required','max:100'],
'location' => ['required','in:header,footer'],
'url' => ['required','max:200'],
'status' => ['required','in:0,1'],
'target' => ['required','in:0,1'],
'sort' => ['required','integer','gte:0']
],
'message' => [
'pid.required' => '上级选择错误',
'pid.gte' => '上级选择错误',
'pid.integer' => '上级选择错误',
'name.required' => '名称必须',
'name.max' => '名称不能超过100个字符',
'location.required' => '位置选择错误',
'location.in' => '位置选择错误',
'url.required' => '链接必须',
'url.max' => '链接不能超过200个字符',
'status.required' => '状态选择错误',
'status.in' => '状态必须是显示/隐藏',
'target.required' => '打开方式必须',
'target.in' => '打开方式选择错误',
'sort.required' => '排序必须',
'sort.integer' => '排序必须是一个数字',
'sort.gte' => '排序必须大于等于0',
],
'attr' => [
]
];
/**
* 列表数据
... ... @@ -98,9 +63,7 @@ class NavController extends BaseController
* @time 2023/5/8 17:06
*/
public function update(){
$this->verify['role']['id'] = ['required','integer','gt:0'];
$this->verify['message']['id.gt'] = $this->verify['message']['id.integer'] = $this->verify['message']['id.required'] = '编辑导航数据不存在';
return $this->save();
return $this->save(true);
}
/**
... ... @@ -112,8 +75,9 @@ class NavController extends BaseController
* @author:dc
* @time 2023/5/8 17:06
*/
private function save(){
$data = $this->validate(request() ,$this->verify['role'],$this->verify['message']);
private function save($edit=false){
$data = $this->verify(NavRequest::class,$edit?NavRequest::$UPDATE:null);
if($data['pid']){
// 验证是否存在上级
... ...
... ... @@ -4,9 +4,7 @@ namespace App\Http\Controllers\file;
use App\Enums\Common\Code;
use App\Http\Controllers\type;
use App\Http\Controllers\统一返回参数;
use App\Models\File\Image as ImageModel;
use App\Models\User\User as UserModel;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Storage;
... ... @@ -43,7 +41,16 @@ class ImageController
$this->path = $this->config['root'].$this->uploads['path'].'/';
}
public function index($hash = '',$type = self::TYPE, $w = 0 ,$h = 0 ){
/**
* @param $hash
* @param $w
* @param $h
* @name :index
* @author :lyh
* @method :post
* @time :2023/5/11 17:19
*/
public function index($hash = '', $w = 0 ,$h = 0 ){
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
header("HTTP/1.1 304 Not Modified");
exit;
... ... @@ -54,14 +61,13 @@ class ImageController
$this->response('指定图片不存在!', Code::USER_ERROR);
}
//查看缩略图是否存在
$header['Content-Type'] = 'image/'.$info['type'];
$filename = $this->path . $info['hash'] . $w . '_' . $h;
if(is_file($filename)){
$last_modified_time = gmdate(time() + ((30 * 60 * 60 * 24))) . " GMT";
$header = str_replace(['%Expires%', "%etag%", '%Last-Modified%'],
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 2, $last_modified_time], $this->upload_img['header']);
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 1, $last_modified_time], $this->upload_img['header']);
$content = file_get_contents($filename);
$header['Content-Length'] = $info['size'];
$header['Content-Length'] = strlen($content);
}else{
$path = $info['path'];
if (!is_file($path)) {
... ... @@ -70,25 +76,18 @@ class ImageController
$content = '';
$last_modified_time = gmdate(time() + ((30 * 60 * 60 * 24))) . " GMT";
$header = str_replace(['%Expires%', "%etag%", '%Last-Modified%'],
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 2, $last_modified_time], $this->upload_img['header']);
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 1, $last_modified_time], $this->upload_img['header']);
if ($w > 0 && $h > 0) {
$path = $this->cacheImage($info, $w, $h);
$content = file_get_contents($path);
$header['Content-Length'] = strlen($content);
} else {
$content = file_get_contents($path);
$header['Content-Length'] = $info['size'];
$header['Content-Length'] = strlen($content);
}
}
$img_type = $info['type'];
$content = base64_encode($content);
$img_base64 = 'data:image/' . $img_type . ';base64,' . $content;
if($type != self::TYPE){
header('Content-Type: image/' . $img_type);
echo base64_decode($content);
exit;
}
return response($img_base64,200,$header);
$header['Content-Type'] = 'image/'.$info['type'];
return response($content,200,$header);
}
/**
... ...
... ... @@ -26,4 +26,15 @@ class BaseLogic extends Logic
$this->user = Session::get('manage');
}
/**
* 获取实例
* @param mixed ...$params
* @return static
* @author:dc
* @time 2023/5/11 15:23
*/
public static function instance(...$params){
return new static(...$params);
}
}
... ...
... ... @@ -109,6 +109,9 @@ class BaseLogic extends Logic
if($image_hash !== false){
return $hash;
}
$this->config = config('filesystems.disks.upload');
$this->uploads = config('upload.default_image');
$this->path = $this->config['root'].$this->uploads['path'].'/';
$url = $this->path;
$fileName = uniqid().rand(10000,99999).'.'.$files->getClientOriginalExtension();
$res = $files->move($url,$fileName);
... ...
... ... @@ -99,7 +99,7 @@ class NewsLogic extends BaseLogic
}
//设置路由
RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_NEWS, $this->param['id'], $this->user['project_id']);
$this->model->edit($this->param,['id'=>$this->param['id']]);
$this->edit($this->param,['id'=>$this->param['id']]);
DB::commit();
}catch (\exception $e){
DB::rollBack();
... ...
... ... @@ -94,29 +94,29 @@ class ATemplate extends \App\Models\Base{
}
/**
* @param array $data
* @param int $id
* @author:dc
* @time 2023/5/11 10:08
*/
public static function _save(array $data,int $id=0){
if($id){
$model = static::where('id',$id)->first();
}
if(empty($model)) $model = new static();
$model->name = $data['name'];
$model->status = $data['status'];
$model->is_default = $data['is_default'];
$model->sort = $data['sort'];
$model->thumb = $data['thumb'];
$model->url = $data['url'];
$model->save();
return $model->id;
}
// /**
// * @param array $data
// * @param int $id
// * @author:dc
// * @time 2023/5/11 10:08
// */
// public static function _save(array $data,int $id=0){
// if($id){
// $model = static::where('id',$id)->first();
// }
// if(empty($model)) $model = new static();
//
// $model->name = $data['name'];
// $model->status = $data['status'];
// $model->is_default = $data['is_default'];
// $model->sort = $data['sort'];
// $model->thumb = $data['thumb'];
// $model->url = $data['url'];
//
// $model->save();
//
// return $model->id;
// }
... ...
... ... @@ -260,6 +260,6 @@ Route::group([], function () {
Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login');
// Route::any('/', [\App\Http\Controllers\Bside\ComController::class, 'get_country'])->name('get_country');
Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download');
Route::any('/image/{hash}/{type?}/{w?}/{h?}', [\App\Http\Controllers\file\ImageController::class,'index'])->name('image_show');
Route::any('/image/{hash}/{w?}/{h?}', [\App\Http\Controllers\file\ImageController::class,'index'])->name('image_show');
Route::any('/file_hash/{hash}/', [\App\Http\Controllers\file\FileController::class,'index'])->name('file_show');
});
... ...