李帅

1.重构模板和临境上传功能

......@@ -85,7 +85,7 @@ class OnePoemController extends AdminController
$form->display('id');
$form->text('title');
$form->text('author');
$form->text('content');
$form->textarea('content');
$form->text('annotate');
$form->text('spelling');
$form->text('en');
......
......@@ -2,7 +2,10 @@
namespace App\Admin\Controllers;
use App\Admin\Renderable\PoemTable;
use App\Admin\Renderable\TemplateTable;
use App\Admin\Repositories\VideoShow;
use App\Models\OnePoem;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
......@@ -62,11 +65,60 @@ class VideoShowController extends AdminController
{
return Form::make(new VideoShow(), function (Form $form) {
$form->display('id');
$form->text('video_url');
$form->text('video_size');
$form->text('video_time');
$form->text('is_horizontal');
$form->selectTable('poem_id','选择一言')
->title('一言诗词库')
->from(PoemTable::make());
// $form->radio('type')->addElementClass('type')
// ->options([1=>'图文音频',2=>'视频'])->default(1);
$form->radio('type')
->options([1=>'视频', 2=>'图文音频'])
->when(1,function (Form $form){
$form->file('bg_url','上传视频')
->accept('mp4')
->autoUpload()
->uniqueName()
->addElementClass('bg_video_url');
})
->when(2,function (Form $form){
$form->multipleImage('bg_url','上传图片')
->limit(5)
->uniqueName()
->addElementClass('bg_img_url');
})
->default(1);
$form->radio('bg_music','背景音')
->options(['无', '有'])
->when(1,function (Form $form){
$form->file('bgm_url','上传背景音')
->accept('mp3,aac,wav')
->autoUpload()
->uniqueName()
->addElementClass('bgm_url');
})
->default(0);
$form->textarea('feel','有感');
$form->selectTable('poem_id','选择模板')
->title('模板选择')
->from(TemplateTable::make());
$form->radio('thumbnail','封面')
->options([1=>'手动上传', 2=>'选择截屏'])
->when(1,function (Form $form){
$form->multipleImage('bg_url','上传图片')
->limit(5)
->uniqueName()
->addElementClass('bg_img_url');
})
->when(2,function (Form $form){
$form->html('');
})
->default(1);
$form->display('created_at');
$form->display('updated_at');
});
......
......@@ -2,16 +2,18 @@
namespace App\Admin\Controllers;
use App\Admin\Repositories\VideoTemp;
use App\Models\VideoTemp;
use App\Models\Component;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Http\Request;
use Dcat\Admin\Widgets\Table;
use Illuminate\Support\Facades\DB;
class VideoTempController extends AdminController
{
protected $title = '视频模板';
protected $title = '临境模板';
/**
* Make a grid builder.
*
......@@ -20,20 +22,28 @@ class VideoTempController extends AdminController
protected function grid()
{
return Grid::make(new VideoTemp(), function (Grid $grid) {
$grid->model()->with('components');
// 设置自定义视图
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->column('id',__('ID'))->sortable();
$grid->column('title');
$grid->column('type');
$grid->column('bg_type');
$grid->column('bg_url')->image('/storage/');
$grid->column('bg_music');
$grid->column('state');
$grid->column('sn');
$grid->column('top');
$grid->column('left');
$grid->column('font_size');
$grid->column('','组件信息')
->display('展开')
->expand(function (){
$th = ['id','模板id','名称','位置','字号','字体颜色','背景色','透明度','创建时间','修改时间'];
return Table::make($th, $this->components->toArray())->withBorder();
});
// $grid->column('type');
// $grid->column('bg_type');
// $grid->column('bg_url')->image('/storage/');
// $grid->column('bg_music');
$grid->column('state')->switch();
// $grid->column('sn');
// $grid->column('top');
// $grid->column('left');
// $grid->column('font_size');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
//
......@@ -75,7 +85,7 @@ class VideoTempController extends AdminController
*
* @return Form
*/
protected function form()
protected function form2()
{
return Form::make(new VideoTemp(), function (Form $form) {
$form->display('id');
......@@ -139,4 +149,107 @@ class VideoTempController extends AdminController
$form->display('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new VideoTemp(), function (Form $form) {
$form->display('id');
$form->block(8, function (Form\BlockForm $form) {
// 设置标题
$form->title('基本设置');
// 显示底部提交按钮
$form->showFooter();
// 设置字段宽度
$form->width(8, 3);
$form->text('title');
$form->checkbox('components','组件')
->when('every_poem', function (Form\BlockForm $form) {
$form->select('pos_every_poem', '每日位置')->options([
'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右',
]);
$form->divider();
})
->when('one_poem', function (Form\BlockForm $form) {
$form->select('pos_one_poem', '一言位置')->options([
'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右',
]);
$form->divider();
})
->when('weather', function (Form\BlockForm $form) {
$form->select('pos_weather', '天气位置')->options([
'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右',
]);
$form->divider();
})
->when('date', function (Form\BlockForm $form) {
$form->select('pos_date', '日期位置')->options([
'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右',
]);
$form->divider();
})
->when('feel', function (Form\BlockForm $form) {
$form->select('pos_feel', '日期位置')->options([
'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右',
]);
$form->divider();
})
->default(['one_poem','weather','date'])
->options([
'every_poem' => '每日一言组件',
'one_poem' => '一言组件',
'weather' => '天气组件',
'date' => '日期组件',
'feel' => '临境有感组件',
]);
$form->hidden('state')
->saving(function ($v) {
return $v;
});
});
// $form->block(4, function (Form\BlockForm $form) {
// $form->html(view('admin.form.phone'));
// });
$form->display('created_at');
$form->display('updated_at');
});
}
public function store()
{
$all = \request()->all();
dd($all);
try{
DB::transaction(function ()use ($all){
$vide_temp = VideoTemp::query()->create([
'title' => $all['title'],
'state' => 1,
]);
foreach ($all['components'] as $component) {
if ($component !== null){
Component::query()->create([
'temp_id' => $vide_temp->id,
'name' => $component,
'position' => $all['pos_' . $component]
]);
}
}
});
}catch (\Exception $exception){
return $this->form()->response()->error($exception->getMessage());
}
return $this->form()->response()->refresh()->success(trans('admin.save_succeeded'));
}
}
......
......@@ -22,8 +22,8 @@ class PoemTable extends LazyRenderable
$grid->column('author');
$grid->column('content');
$grid->column('annotate');
$grid->column('spelling');
$grid->column('en');
// $grid->column('spelling');
// $grid->column('en');
$grid->quickSearch(['title', 'author', 'content', 'annotate']);
......@@ -31,8 +31,9 @@ class PoemTable extends LazyRenderable
$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->like('username')->width(4);
$filter->like('name')->width(4);
$filter->like('title')->width(3);
$filter->like('author')->width(3);
$filter->like('content')->width(3);
});
});
}
......
<?php
/**
* Created by PhpStorm.
* User: lishuai
* Date: 2022/1/10
* Time: 5:57 PM
*/
namespace App\Admin\Renderable;
use App\Models\VideoTemp;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\LazyRenderable;
use Dcat\Admin\Widgets\Table;
class TemplateTable extends LazyRenderable
{
public function grid(): Grid
{
return Grid::make(new VideoTemp(), function (Grid $grid) {
$grid->model()->with(['componentsTable']);
$grid->column('id', 'ID')->sortable();
$grid->column('title');
$grid->column('','组件信息')
->display('展开')
->expand(function (){
$th = ['id','模板id','名称','位置','字号'];
return Table::make($th, $this->componentsTable->toArray())->withBorder();
});
$grid->column('state')->switch();
$grid->quickSearch(['title']);
$grid->paginate(10);
$grid->disableActions();
$grid->filter(function (Grid\Filter $filter) {
$filter->like('title')->width(3);
$filter->like('author')->width(3);
$filter->like('content')->width(3);
});
});
}
}
\ No newline at end of file
......@@ -24,8 +24,11 @@ Route::group([
/** 众妙*/
$router->resource('/package', 'PackPoemController');
/** 视频模板*/
$router->resource('/template', 'VideoTempController');
/** 临境*/
$router->group(['prefix'=>'/linjing'],function (Router $router){
$router->resource('/template', 'VideoTempController');
$router->resource('/official', 'VideoShowController');
});
/** 订单*/
$router->resource('/order', 'OrderController');
......
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Component extends Model
{
use HasFactory;
protected $guarded = [''];
}
......@@ -10,5 +10,16 @@ class VideoTemp extends Model
{
use HasDateTimeFormatter;
protected $table = 'video_temp';
protected $guarded = [''];
public function components()
{
return $this->hasMany('App\Models\Component','temp_id');
}
public function componentsTable()
{
return $this->hasMany('App\Models\Component','temp_id')->select(['id','temp_id','name','position','font_size']);
}
}
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateComponentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::dropIfExists('video_temp');
Schema::create('video_temp', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->unsignedTinyInteger('state');
$table->timestamps();
});
Schema::create('components', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('temp_id');
$table->string('name')->comment('组件名称');
$table->string('position')->nullable()->comment('位置');
$table->unsignedTinyInteger('font_size')->default(12)->comment('字号');
$table->string('text_color')->nullable()->comment('文字颜色');
$table->string('text_bg_color')->nullable()->comment('文字背景色');
$table->double('opacity')->nullable()->comment('透明度');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('components');
}
}
......@@ -15,7 +15,6 @@ use Illuminate\Routing\Router;
*/
Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){
/** 移动端微信用户登录*/
$api->get('login/{service}/callback', 'AuthController@apiHandleProviderCallback');
});
......