作者 邓超

自定义

... ... @@ -44,19 +44,11 @@ class Demo extends Command
*/
public function handle()
{
//切换数据库配置
$project = ProjectServer::useProject(1);
//创建数据库
ProjectServer::createDatabase($project);
//创建表
ProjectServer::initTable($project);
preg_match_all("/\@include\(\"([a-z0-9_]+)\"\)/i",'
@include("asdf")@include("")@include("asdtrw2erf")
',$include);
dd(1);
$sql = 'CREATE DATABASE database_name;';
$results = DB::select($sql);
dd($results);
return true;
print_r($include);
}
public function printMessage()
... ... @@ -97,4 +89,4 @@ class Demo extends Command
}
dd(1);
}
}
\ No newline at end of file
}
... ...
... ... @@ -2,7 +2,10 @@
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Models\Template\ATemplate;
use App\Models\Template\ATemplateHtml;
use Illuminate\Validation\Rule;
/**
* 模板
... ... @@ -22,9 +25,22 @@ class TemplateController extends BaseController
*/
public function index(){
$limit = $this->param['limit']??20;
return view('a');
$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());
}
... ... @@ -34,7 +50,7 @@ class TemplateController extends BaseController
* @time 2023/5/4 16:19
*/
public function edit(){
$this->save(true);
}
/**
... ... @@ -43,12 +59,168 @@ class TemplateController extends BaseController
* @time 2023/5/5 9:30
*/
public function insert(){
$this->save();
}
/**
* @param false $is_edit
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author:dc
* @time 2023/5/11 10:13
*/
private function save($is_edit=false){
$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']);
// 保存
$id = ATemplate::_save($data,$data['id']??0);
if(!$id){
return $this->response('保存失败',Code::SYSTEM_ERROR);
}
return $this->success(ATemplate::_find($id));
}
/**
* 删除
* @author:dc
* @time 2023/5/4 17:10
*/
public function delete($id){
if(ATemplate::destroy($id)){
return $this->response('删除成功');
}
return $this->response('删除失败',Code::SYSTEM_ERROR);
}
/**
* 列表
* @author:dc
* @time 2023/5/4 17:10
*/
public function html_index($template_id){
$lists = ATemplateHtml::where('template_id',$template_id)->get();
return $this->success($lists->toArray());
}
/**
* 编辑
* @author:dc
* @time 2023/5/4 16:19
*/
public function html_edit($template_id){
$this->html_save($template_id,true);
}
/**
* 新增
* @author:dc
* @time 2023/5/5 9:30
*/
public function html_insert($template_id){
$this->html_save($template_id);
}
private function save($name = ''){
/**
* @param false $is_edit
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author:dc
* @time 2023/5/11 10:13
*/
private function html_save($template_id,$is_edit=false){
$verify = [
'role' => [
'id' => ['required','integer'],
// 'template_id' => ['required','integer'],
'name' => ['required'],
'type' => ['required',Rule::in(ATemplateHtml::$typeMap)],
'css' => [],
'script' => [],
'html' => ['required'],
],
'message' => [
'id.required' => 'id必须',
'id.integer' => 'id必须',
// 'template_id.required' => '模板选择错误',
// 'template_id.integer' => '模板选择错误',
'name.required' => '名称必须',
'type.required' => '页面类型选择错误',
'type.in' => '页面类型选择错误',
'html.required' => 'html 代码必须',
]
];
if(!$is_edit) unset($verify['role']['id']);
$data = $this->validate(request() ,$verify['role'],$verify['message']);
// 保存
$id = ATemplateHtml::_save($template_id,$data,$data['id']??0);
if(!$id){
return $this->response('保存失败',Code::SYSTEM_ERROR);
}
return $this->success(ATemplateHtml::_find($id));
}
... ... @@ -57,12 +229,28 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/4 17:10
*/
public function delete(){
public function html_delete($template_id, $id){
if(ATemplateHtml::where('template_id',$template_id)->where('id',$id)->delete()){
return $this->response('删除成功');
}
return $this->response('删除失败',Code::SYSTEM_ERROR);
}
/**
* 页面类型
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author:dc
* @time 2023/5/11 10:29
*/
public function html_type(){
return $this->success(ATemplateHtml::$typeMap);
}
... ...
... ... @@ -101,12 +101,21 @@ class BaseController extends Controller
*/
public function response($msg = null,string $code = Code::SUCCESS,$data = [],$result_code = 200,$type = 'application/json'): JsonResponse
{
$code = Code::fromValue($code);
$result = [
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $this->_extents($data),
];
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),
];
}
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
$response = response($result,$result_code,$this->header);;
... ...
... ... @@ -189,7 +189,7 @@ class NavController extends BaseController
'name' => '单页'
],
[
'url' => 'goods',
'url' => '/goods',
'name' => '商品'
],
]);
... ...
... ... @@ -3,9 +3,12 @@
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Models\Template\ATemplate;
use App\Models\Template\ATemplateHtml;
use App\Models\Template\BSetting;
use App\Models\Template\BTemplateData;
use Illuminate\Validation\Rule;
/**
... ... @@ -93,6 +96,29 @@ class TemplateController extends BaseController
}
/**
* 获取 编辑html
* @author:dc
* @time 2023/5/11 9:33
*/
public function get_html(){
$source = $this->param['source']??'';
$source_id = $this->param['source_id']??0;
$sourceMap = [
// 数据表/数据类型 =》 模板类型/模板名称
'index' => 'index',
'product' => 'product',
'product_info' => 'product_info',
'blogs' => 'blogs',
'blogs_info' => 'blogs_info',
'page' => 'page',
];
return $this->success();
}
/**
* 自定义块
... ... @@ -102,14 +128,33 @@ class TemplateController extends BaseController
public function customChunk(){
$html = $this->param['html']??[];
// 那个页面 的
$type = $this->param['type']??'';
if(!is_array($html)){
return $this->response('参数异常','B_CUSTOM_CHUNK_PARAMS');
}
// 项目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('页面类型错误','B_CUSTOM_CHUNK_PARAMS_TYPE');
}
$html = view("template.{$template_id}.{$type}")->render();
return $this->response('',Code::SUCCESS,$html);
// $data = BTemplateData::_insert();
$data = BTemplateData::_insert();
}
... ...
... ... @@ -94,6 +94,30 @@ 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;
}
}
... ...
... ... @@ -24,6 +24,28 @@ class ATemplateHtml extends \App\Models\Base{
use SoftDeletes;
public static $sourceMap = [
// 数据表/数据类型 =》 模板类型/模板名称
'index' => 'index',
'product' => 'product',
'product_info' => 'product_info',
'blogs' => 'blogs',
'blogs_info' => 'blogs_info',
'page' => 'page',
];
public static $typeMap = [
'index' => '首页',
'product' => '商品列表',
'product_info' => '商品详情',
'blogs' => '博客',
'blogs_info' => '博客详情',
'page' => '单页',
'news' => '新闻列表',
'news_info' => '新闻详情',
];
/**
* 模板中的数据
* @param $template_id
... ... @@ -36,4 +58,57 @@ class ATemplateHtml extends \App\Models\Base{
}
/**
* 是否存在type
* @param int $template_id
* @param $type
* @return mixed
* @author:dc
* @time 2023/5/10 16:03
*/
public static function _typeExist(int $template_id,$type){
return static::where(['template_id'=>$template_id,'type'=>$type])->limit(1)->count();
}
public static function _bAll($template_id){
return static::where(['template_id'=>$template_id,'status'=>1])->get();
}
public static function _find($id){
return static::where('id',$id)->first();
}
/**
* @param array $data
* @param int $id
* @return mixed
* @author:dc
* @time 2023/5/11 10:20
*/
public static function _save(int $template_id, array $data,int $id = 0){
if($id){
$model = static::where('id',$id)->first();
}
if(empty($model)) $model = new static();
$model->template_id = $template_id;
$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;
}
}
... ...
... ... @@ -21,29 +21,37 @@ class BTemplateData extends \App\Models\Base{
/**
* 插入
* @param $project_id
* @param $data
* 插入/修改
* @param int $project_id
* @param array $data
* @return mixed
* @author:dc
* @time 2023/5/10 10:23
*/
public static function _insert($project_id,$data)
public static function _save(int $project_id, array $data)
{
$model = new static();
$model->project_id = $project_id;
$model->template_id = $data['template_id'];
$model->name = $data['name'];
$model->type = $data['type'];
$model->is_edit = $data['is_edit'];
$model->css = $data['css'];
$model->script = $data['script'];
$model->html = $data['html'];
$model->data_ext = $data['data_ext'];
$model = static::where([
'project_id'=>$project_id,
'template_id'=>$data['template_id'],
'type' => $data['type'],
'tag' => $data['tag'],
])->first();
if(!$model){
$model = new static();
$model->project_id = $project_id;
$model->template_id = $data['template_id'];
$model->type = $data['type'];
$model->tag = $data['tag'];
}
$model->css = $data['css']??'';
$model->script = $data['script']??'';
$model->html = $data['html']??'';
$model->data_ext = $data['data_ext']??'';
$model->data_source = $data['data_source']??'all';
$model->data_source_id = $data['data_source_id']??0;
$model->save();
... ...
*
!.gitignore
!readme.md
... ...
此目录为自动创建
不可手动操作
... ...
... ... @@ -126,10 +126,16 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w
// 自定义页面 模板,头部底部
Route::prefix('template')->group(function () {
Route::get('/', [\App\Http\Controllers\Aside\TemplateController::class, 'index'])->name('admin.template_header_footer');
Route::get('/edit', [\App\Http\Controllers\Aside\TemplateController::class, 'edit'])->name('admin.template_header_footer_edit');
Route::get('/insert', [\App\Http\Controllers\Aside\TemplateController::class, 'insert'])->name('admin.template_header_footer_insert');
Route::get('/delete', [\App\Http\Controllers\Aside\TemplateController::class, 'delete'])->name('admin.template_header_footer_system');
Route::get('/', [\App\Http\Controllers\Aside\TemplateController::class, 'index'])->name('admin.template');
Route::post('/edit', [\App\Http\Controllers\Aside\TemplateController::class, 'edit'])->name('admin.template_edit');
Route::post('/insert', [\App\Http\Controllers\Aside\TemplateController::class, 'insert'])->name('admin.template_insert');
Route::delete('/delete/{id}', [\App\Http\Controllers\Aside\TemplateController::class, 'delete'])->where('id','\d+')->name('admin.template_delete');
Route::get('/html/{template_id}', [\App\Http\Controllers\Aside\TemplateController::class, 'html_index'])->where('template_id','\d+')->name('admin.template.html');
Route::post('/html/{template_id}/edit', [\App\Http\Controllers\Aside\TemplateController::class, 'html_edit'])->where('template_id','\d+')->name('admin.template_edit.html');
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');
});
... ...
... ... @@ -225,7 +225,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::prefix('template')->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\TemplateController::class, 'index'])->name('bside_template');
Route::any('/use-template', [\App\Http\Controllers\Bside\TemplateController::class, 'info'])->name('bside_template_use');
Route::post('/edit', [\App\Http\Controllers\Bside\TemplateController::class, 'edit_save'])->name('template_header_footer_edit_save');
Route::get('/custom-chunk', [\App\Http\Controllers\Bside\TemplateController::class, 'customChunk'])->name('bside_template_custom_chunk');
Route::get('/system', [\App\Http\Controllers\Bside\TemplateController::class, 'system_all_html'])->name('template_header_footer_system');
});
... ...