李帅

1.新增字体管理。

...@@ -4,21 +4,21 @@ namespace App\Admin\Controllers; ...@@ -4,21 +4,21 @@ namespace App\Admin\Controllers;
4 4
5 use App\Admin\Renderable\PoemTable; 5 use App\Admin\Renderable\PoemTable;
6 use App\Admin\Renderable\TemplateTable; 6 use App\Admin\Renderable\TemplateTable;
7 -use App\Jobs\MakeImages; 7 +use App\Jobs\AdminMakeImmerse;
8 -use App\Jobs\MakeVideo; 8 +use App\Admin\Repositories\AdminMakeVideo;
9 -use App\Models\AdminMakeVideo;
10 use App\Models\Immerse; 9 use App\Models\Immerse;
11 -use App\Models\Order; 10 +use App\Models\OnePoem;
11 +use App\Models\VideoTemp;
12 use Dcat\Admin\Form; 12 use Dcat\Admin\Form;
13 use Dcat\Admin\Grid; 13 use Dcat\Admin\Grid;
14 -use Dcat\Admin\Layout\Content;
15 use Dcat\Admin\Show; 14 use Dcat\Admin\Show;
16 use Dcat\Admin\Http\Controllers\AdminController; 15 use Dcat\Admin\Http\Controllers\AdminController;
17 use Illuminate\Support\Facades\Storage; 16 use Illuminate\Support\Facades\Storage;
18 -use Illuminate\Support\Str;
19 17
20 class AdminMakeVideoController extends AdminController 18 class AdminMakeVideoController extends AdminController
21 { 19 {
20 + protected $title = '制作历史记录';
21 +
22 /** 22 /**
23 * Make a grid builder. 23 * Make a grid builder.
24 * 24 *
...@@ -26,33 +26,36 @@ class AdminMakeVideoController extends AdminController ...@@ -26,33 +26,36 @@ class AdminMakeVideoController extends AdminController
26 */ 26 */
27 protected function grid() 27 protected function grid()
28 { 28 {
29 - return Grid::make(new Immerse(), function (Grid $grid) { 29 + return Grid::make(new AdminMakeVideo(), function (Grid $grid) {
30 - $grid->model()->where('user_id','=',1); 30 + // 设置自定义视图
31 - 31 + $grid->setActionClass(Grid\Displayers\Actions::class);
32 $grid->column('id')->sortable(); 32 $grid->column('id')->sortable();
33 - $grid->column('title','标题'); 33 + $grid->column('type','类型')->using([1 => '视频', 2 => '音频']);
34 - $grid->column('content','有感'); 34 +
35 - $grid->column('url')->display(function ($url){ 35 + $grid->column('video_url')->display(function ($url){
36 - return "<a target='_blank' href='". $url ."'>查看</a>"; 36 + if ($url == '' || $url == null) return '';
37 + $path = Storage::disk('public')->url($url);
38 + return "<a target='_blank' href='". $path ."'>查看</a>";
37 }); 39 });
38 - $grid->column('type','类型')->using([1 => '音频', 2 => '视频']); 40 +
39 - $grid->column('duration'); 41 + $grid->column('images_url')->display(function ($url){
40 - $grid->column('size'); 42 + if ($url == '' || $url == null) return '';
43 + $path = Storage::disk('public')->url($url);
44 + return "<a target='_blank' href='". $path ."'>查看</a>";
45 + });
46 +
47 + $grid->column('feel','有感');
48 + $grid->column('weather','天气');
49 + $grid->column('huangli','黄历');
41 $grid->column('poem_id'); 50 $grid->column('poem_id');
42 $grid->column('temp_id'); 51 $grid->column('temp_id');
43 - $grid->column('thumbnail')->image(); 52 + $grid->column('thumbnail');
44 - $grid->column('bgm')->display(function ($url){ 53 + $grid->column('thumbnail_url')->image();
45 - if (Str::of($url)->contains('.mp3')) 54 +
46 - return "<a target='_blank' href='". $url ."'>查看</a>";
47 - else
48 - return "<a target='_blank' href='". $url ."'>下载</a>";
49 - });
50 $grid->column('created_at'); 55 $grid->column('created_at');
51 $grid->column('updated_at')->sortable(); 56 $grid->column('updated_at')->sortable();
52 -
53 $grid->filter(function (Grid\Filter $filter) { 57 $grid->filter(function (Grid\Filter $filter) {
54 $filter->equal('id'); 58 $filter->equal('id');
55 -
56 }); 59 });
57 }); 60 });
58 } 61 }
...@@ -93,9 +96,10 @@ class AdminMakeVideoController extends AdminController ...@@ -93,9 +96,10 @@ class AdminMakeVideoController extends AdminController
93 return Form::make(new AdminMakeVideo(), function (Form $form) { 96 return Form::make(new AdminMakeVideo(), function (Form $form) {
94 $form->display('id'); 97 $form->display('id');
95 98
96 - $form->selectTable('poem_id','选择一言') 99 + $form->selectTable('temp_id','选择模板')
97 - ->title('一言诗词库') 100 + ->title('模板选择')
98 - ->from(PoemTable::make()); 101 + ->from(TemplateTable::make())
102 + ->model(VideoTemp::class,'id','title');
99 103
100 $form->radio('type') 104 $form->radio('type')
101 ->options([1=>'视频', 2=>'图文音频']) 105 ->options([1=>'视频', 2=>'图文音频'])
...@@ -109,36 +113,25 @@ class AdminMakeVideoController extends AdminController ...@@ -109,36 +113,25 @@ class AdminMakeVideoController extends AdminController
109 ->addElementClass('video_url'); 113 ->addElementClass('video_url');
110 }) 114 })
111 ->when(2,function (Form $form){ 115 ->when(2,function (Form $form){
112 - $form->multipleImage('images_url','上传图片') 116 + $form->image('images_url','上传图片')
113 - ->limit(5)
114 ->uniqueName() 117 ->uniqueName()
115 ->addElementClass('images_url'); 118 ->addElementClass('images_url');
116 }) 119 })
117 ->default(1); 120 ->default(1);
118 - $form->radio('bg_music','背景音')
119 - ->options(['无', '有'])
120 - ->when(1,function (Form $form){
121 - $form->file('bgm_url','上传背景音')
122 - ->accept('mp3,aac,wav')
123 - ->autoUpload()
124 - ->uniqueName()
125 - ->addElementClass('bg_music');
126 - })
127 - ->default(0);
128 121
122 + $form->selectTable('poem_id','选择一言')
123 + ->title('一言诗词库')
124 + ->from(PoemTable::make())
125 + ->model(OnePoem::class,'id','title');
129 $form->textarea('feel','有感'); 126 $form->textarea('feel','有感');
130 - 127 + $form->text('weather','天气');
131 - $form->selectTable('temp_id','选择模板') 128 + $form->text('huangli','黄历')->default('宜');
132 - ->title('模板选择')
133 - ->from(TemplateTable::make());
134 129
135 $form->radio('thumbnail','封面') 130 $form->radio('thumbnail','封面')
136 ->options([1=>'手动上传', 2=>'自动截屏']) 131 ->options([1=>'手动上传', 2=>'自动截屏'])
137 ->when(1,function (Form $form){ 132 ->when(1,function (Form $form){
138 - $form->multipleImage('thumbnail_url','上传图片') 133 + $form->image('thumbnail_url','上传图片')
139 - ->limit(5)
140 ->uniqueName(); 134 ->uniqueName();
141 -// ->addElementClass('bg_img_url');
142 }) 135 })
143 ->when(2,function (Form $form){ 136 ->when(2,function (Form $form){
144 $form->html(''); 137 $form->html('');
...@@ -147,31 +140,12 @@ class AdminMakeVideoController extends AdminController ...@@ -147,31 +140,12 @@ class AdminMakeVideoController extends AdminController
147 140
148 $form->display('created_at'); 141 $form->display('created_at');
149 $form->display('updated_at'); 142 $form->display('updated_at');
150 - });
151 - }
152 143
153 - public function store() 144 + $form->saved(function (Form $form, $result) {
154 - { 145 + $model = $form->repository()->model();
155 - $all = request()->all(); 146 + AdminMakeImmerse::dispatch($model);
156 - 147 + });
157 - if (isset($all['upload_column'])) return $this->form()->store(); 148 + });
158 -
159 - try{
160 - $video = AdminMakeVideo::query()->create($all);
161 - if ($all['type'] == 1){
162 - // 添加至队列
163 - MakeVideo::dispatch($video);
164 - }elseif ($all['type'] == 2){ // 新增类型,不止视频,还有静态图。
165 - // MakeImages
166 - MakeImages::dispatch($video);
167 - }else{
168 - return $this->form()->response()->error('类型选择错误');
169 - }
170 - }catch (\Exception $exception){
171 - return $this->form()->response()->error($exception->getMessage());
172 - }
173 -
174 - return $this->form()->response()->refresh()->success(trans('admin.save_succeeded'));
175 } 149 }
176 150
177 public function destroy($id) 151 public function destroy($id)
......
1 +<?php
2 +
3 +namespace App\Admin\Controllers;
4 +
5 +use App\Admin\Renderable\PoemTable;
6 +use App\Admin\Renderable\TemplateTable;
7 +use App\Jobs\AdminMakeImmerse;
8 +use App\Jobs\MakeImages;
9 +use App\Jobs\MakeVideo;
10 +use App\Admin\Repositories\AdminMakeVideo;
11 +use App\Models\Immerse;
12 +use App\Models\OnePoem;
13 +use App\Models\VideoTemp;
14 +use Dcat\Admin\Form;
15 +use Dcat\Admin\Grid;
16 +use Dcat\Admin\Show;
17 +use Dcat\Admin\Http\Controllers\AdminController;
18 +use Illuminate\Support\Facades\Storage;
19 +use Illuminate\Support\Str;
20 +
21 +class ImmerseController extends AdminController
22 +{
23 + /**
24 + * Make a grid builder.
25 + *
26 + * @return Grid
27 + */
28 + protected function grid()
29 + {
30 + return Grid::make(new Immerse(), function (Grid $grid) {
31 + $grid->model()->where('user_id','=',1);
32 +
33 + // 设置自定义视图
34 + $grid->setActionClass(Grid\Displayers\Actions::class);
35 +
36 + $grid->column('id')->sortable();
37 + $grid->column('content','有感');
38 + $grid->column('url')->display(function ($url){
39 + return "<a target='_blank' href='". $url ."'>查看</a>";
40 + });
41 + $grid->column('type','类型')->using([1 => '音频', 2 => '视频']);
42 + $grid->column('duration','时长');
43 + $grid->column('size','大小');
44 + $grid->column('poem_id');
45 + $grid->column('temp_id');
46 + $grid->column('thumbnail')->image();
47 + $grid->column('bgm')->display(function ($url){
48 + if (Str::of($url)->contains('.mp3'))
49 + return "<a target='_blank' href='". $url ."'>查看</a>";
50 + else
51 + return "<a target='_blank' href='". $url ."'>下载</a>";
52 + });
53 + $grid->column('created_at');
54 + $grid->column('updated_at')->sortable();
55 +
56 + $grid->filter(function (Grid\Filter $filter) {
57 + $filter->equal('id');
58 +
59 + });
60 + });
61 + }
62 +
63 + public function destroy($id)
64 + {
65 + $immerse = Immerse::query()->find($id);
66 +
67 + Storage::disk('public')->delete($immerse->url);
68 + Storage::disk('public')->delete($immerse->thumbnail);
69 + Storage::disk('public')->delete($immerse->bgm);
70 + $immerse->delete();
71 +
72 + return $this->form()->response()->refresh()->success('删除成功');
73 + }
74 +}
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
2 2
3 namespace App\Admin\Controllers; 3 namespace App\Admin\Controllers;
4 4
5 +use App\Admin\Renderable\FontTable;
6 +use App\Models\Font;
5 use App\Models\VideoTemp; 7 use App\Models\VideoTemp;
6 use App\Models\Component; 8 use App\Models\Component;
7 use Dcat\Admin\Form; 9 use Dcat\Admin\Form;
...@@ -47,22 +49,9 @@ class VideoTempController extends AdminController ...@@ -47,22 +49,9 @@ class VideoTempController extends AdminController
47 $th = ['id','模板id','名称','位置','字号','字体颜色','背景色','背景厚度','透明度','避免剪切','创建时间','修改时间']; 49 $th = ['id','模板id','名称','位置','字号','字体颜色','背景色','背景厚度','透明度','避免剪切','创建时间','修改时间'];
48 return Table::make($th, $this->components->toArray())->withBorder(); 50 return Table::make($th, $this->components->toArray())->withBorder();
49 }); 51 });
50 -// $grid->column('type');
51 -// $grid->column('bg_type');
52 -// $grid->column('bg_url')->image('/storage/');
53 -// $grid->column('bg_music');
54 $grid->column('state')->switch(); 52 $grid->column('state')->switch();
55 -// $grid->column('sn');
56 -// $grid->column('top');
57 -// $grid->column('left');
58 -// $grid->column('font_size');
59 $grid->column('created_at'); 53 $grid->column('created_at');
60 $grid->column('updated_at')->sortable(); 54 $grid->column('updated_at')->sortable();
61 -//
62 -// $grid->filter(function (Grid\Filter $filter) {
63 -// $filter->equal('id');
64 -//
65 -// });
66 }); 55 });
67 } 56 }
68 57
...@@ -99,75 +88,7 @@ class VideoTempController extends AdminController ...@@ -99,75 +88,7 @@ class VideoTempController extends AdminController
99 */ 88 */
100 protected function form() 89 protected function form()
101 { 90 {
102 - return Form::make(new VideoTemp(), function (Form $form) {
103 - $form->display('id');
104 - $form->block(7, function (Form\BlockForm $form) {
105 - // 设置标题
106 - $form->title('基本设置');
107 - // 显示底部提交按钮
108 - $form->showFooter();
109 - // 设置字段宽度
110 - $form->width(8, 3);
111 -
112 - $form->text('title');
113 -
114 - $form->radio('bg_music')
115 - ->options(['无', '有'])
116 - ->when(1,function (Form\BlockForm $form){
117 - $form->file('bgm_url')
118 - ->accept('mp3,aac,wav')
119 - ->autoUpload()
120 - ->uniqueName()
121 - ->addElementClass('bgm_url');
122 - })
123 - ->default(0);
124 -
125 - $form->checkbox('components','组件')
126 - ->when('every_poem', $this->buildCheckBoxOption('every_poem',$form))
127 - ->when('one_poem', $this->buildCheckBoxOption('one_poem',$form))
128 - ->when('weather', $this->buildCheckBoxOption('weather',$form))
129 - ->when('date', $this->buildCheckBoxOption('date',$form))
130 - ->when('feel', $this->buildCheckBoxOption('feel',$form))
131 - ->default(['one_poem','weather','date'])
132 - ->options([
133 - 'every_poem' => '每日一言组件',
134 - 'one_poem' => '一言组件',
135 - 'weather' => '天气组件',
136 - 'date' => '日期组件',
137 - 'feel' => '临境有感组件',
138 - ]);
139 -
140 - $form->hidden('state')
141 - ->saving(function ($v) {
142 - return $v;
143 - });
144 - });
145 -
146 - $form->block(5, function (Form\BlockForm $form) {
147 - $form->html(view('admin.form.phone'));
148 - });
149 -
150 - $form->display('created_at');
151 - $form->display('updated_at');
152 - });
153 - }
154 -
155 -
156 - public function edit($id, Content $content)
157 - {
158 - return $content
159 - ->translation($this->translation())
160 - ->title($this->title())
161 - ->description($this->description()['edit'] ?? trans('admin.edit'))
162 - ->body($this->form2()->edit($id));
163 - }
164 -
165 - public function form2()
166 - {
167 return Form::make(VideoTemp::with('components'), function (Form $form) { 91 return Form::make(VideoTemp::with('components'), function (Form $form) {
168 -
169 -// dd($form->model()->toArray());
170 -
171 $form->display('id'); 92 $form->display('id');
172 $form->block(7, function (Form\BlockForm $form) { 93 $form->block(7, function (Form\BlockForm $form) {
173 // 设置标题 94 // 设置标题
...@@ -190,29 +111,33 @@ class VideoTempController extends AdminController ...@@ -190,29 +111,33 @@ class VideoTempController extends AdminController
190 }) 111 })
191 ->default(0); 112 ->default(0);
192 113
193 - $form->checkbox('components','组件') 114 +
194 -// ->when('every_poem', $this->buildCheckBoxOption('every_poem',$form)) 115 + $form->hasMany('components','组件', function (Form\NestedForm $form) {
195 -// ->when('one_poem', $this->buildCheckBoxOption('one_poem',$form)) 116 + $form->select('name','组件名称')->options([
196 -// ->when('weather', $this->buildCheckBoxOption('weather',$form))
197 -// ->when('date', $this->buildCheckBoxOption('date',$form))
198 -// ->when('feel', $this->buildCheckBoxOption('feel',$form))
199 - ->default(['one_poem','weather','date'])
200 - ->options([
201 'every_poem' => '每日一言组件', 117 'every_poem' => '每日一言组件',
202 'one_poem' => '一言组件', 118 'one_poem' => '一言组件',
203 'weather' => '天气组件', 119 'weather' => '天气组件',
204 'date' => '日期组件', 120 'date' => '日期组件',
205 'feel' => '临境有感组件', 121 'feel' => '临境有感组件',
206 - ]) 122 + ]);
207 - ->customFormat(function ($v) { 123 + $form->select('position','组件位置')->options(VideoTemp::POSITION_OPTIONS);
208 - if (! $v) { 124 + $form->number('text_bg_box', '背景厚度')->default(0)
209 - return []; 125 + ->addElementClass('text_bg_box')->help('设置背景块边缘厚度(用于在背景块边缘用背景色填充一圈),默认为0');
210 - } 126 + $form->color('text_bg_color', '背景色')->default('#5c6bc6')->addElementClass('text_bg_color');
127 + $form->selectTable('font_file','字体')
128 + ->title('字体选择')
129 + ->from(FontTable::make())
130 + ->model(Font::class,'file','name');
131 + $form->number('font_size', '字号')->default(12)->min(12);
132 + $form->color('text_color', '字体颜色')->default('#f5f5f5')->addElementClass('text_color');
133 + $form->number('opacity', '透明度')->min(0)->max(100)
134 + ->addElementClass('opacity')->default(100)
135 + ->help('范围为0-100,100表示不透明,0表示完全透明');
136 + $form->switch('fix_bounds', '避免剪切');
211 137
212 - return array_column($v, 'id'); 138 + });
213 - });;
214 139
215 - $form->hidden('state') 140 + $form->hidden('state')->default(1)
216 ->saving(function ($v) { 141 ->saving(function ($v) {
217 return $v; 142 return $v;
218 }); 143 });
...@@ -226,76 +151,4 @@ class VideoTempController extends AdminController ...@@ -226,76 +151,4 @@ class VideoTempController extends AdminController
226 $form->display('updated_at'); 151 $form->display('updated_at');
227 }); 152 });
228 } 153 }
229 -
230 -
231 - public function store()
232 - {
233 - $all = \request()->all();
234 -
235 - try{
236 - DB::transaction(function ()use ($all){
237 - $vide_temp = VideoTemp::query()->create([
238 - 'title' => $all['title'],
239 - 'state' => 1,
240 - ]);
241 - foreach ($all['components'] as $component) {
242 -
243 - if ($component !== null){
244 - Component::query()->create([
245 - 'temp_id' => $vide_temp->id,
246 - 'name' => $component,
247 - 'position' => $all['pos_' . $component],
248 - 'font_size' => $all['font_size_' . $component],
249 - 'text_color' => $all['text_color_' . $component],
250 - 'text_bg_color' => $all['text_bg_color_' . $component],
251 - 'text_bg_box' => $all['text_bg_box_' . $component],
252 - 'opacity' => $all['opacity_' . $component],
253 - 'fix_bounds' => $all['fix_bounds_' . $component],
254 - ]);
255 - }
256 - }
257 - });
258 -
259 - }catch (\Exception $exception){
260 - return $this->form()->response()->error($exception->getMessage());
261 - }
262 -
263 - return $this->form()->response()->refresh()->success(trans('admin.save_succeeded'));
264 - }
265 -
266 - public function buildCheckBoxOption($prefix, Form\BlockForm $form)
267 - {
268 - return function ()use ($prefix, $form) {
269 - switch ($prefix) {
270 - case 'every_poem':
271 - $label = '每日一言位置';
272 - break;
273 - case 'one_poem':
274 - $label = '一言位置';
275 - break;
276 - case 'weather':
277 - $label = '天气位置';
278 - break;
279 - case 'date':
280 - $label = '日期位置';
281 - break;
282 - case 'feel':
283 - $label = '有感位置';
284 - break;
285 - default:
286 - $label = '组件位置';
287 - }
288 - $form->divider();
289 - $form->select('pos_' . $prefix, $label)->options(VideoTemp::POSITION_OPTIONS);
290 - $form->number('text_bg_box_' . $prefix, '背景厚度')->default(0)
291 - ->addElementClass('text_bg_box_' . $prefix)->help('设置背景块边缘厚度(用于在背景块边缘用背景色填充一圈),默认为0');
292 - $form->color('text_bg_color_' . $prefix, '背景色')->default('#5c6bc6')->addElementClass('text_bg_color_' . $prefix);
293 - $form->number('font_size_' . $prefix, '字号')->min(12);
294 - $form->color('text_color_' . $prefix, '字体颜色')->default('#f5f5f5')->addElementClass('text_color_' . $prefix);
295 - $form->number('opacity_' . $prefix, '透明度')->min(0)->max(100)
296 - ->addElementClass('opacity_' . $prefix)->default(100)
297 - ->help('范围为0-100,100表示不透明,0表示完全透明');
298 - $form->switch('fix_bounds_' . $prefix, '避免剪切');
299 - };
300 - }
301 } 154 }
......
1 +<?php
2 +/**
3 + * Created by PhpStorm.
4 + * User: lishuai
5 + * Date: 2022/1/10
6 + * Time: 5:57 PM
7 + */
8 +
9 +namespace App\Admin\Renderable;
10 +
11 +use App\Admin\Repositories\OnePoem;
12 +use App\Models\Font;
13 +use Dcat\Admin\Grid;
14 +use Dcat\Admin\Grid\LazyRenderable;
15 +use Illuminate\Support\Facades\Storage;
16 +
17 +class FontTable extends LazyRenderable
18 +{
19 +
20 + public function grid(): Grid
21 + {
22 + return Grid::make(new Font(), function (Grid $grid) {
23 + $grid->paginate(10);
24 + $grid->disableActions();
25 + $grid->quickSearch(['name']);
26 + $grid->column('id')->sortable();
27 + $grid->column('name');
28 + $grid->column('file','字体')->display(function ($item){
29 + $url = Storage::disk('public')->url($item);
30 + return "<style>
31 +@font-face {
32 + font-family: 'ParlandoFont{$this->id}';
33 + src: url('{$url}') format('truetype');
34 + font-weight: normal;
35 + font-style: normal;
36 +}
37 +.mfont-{$this->id}{
38 + font-family: 'ParlandoFont{$this->id}';
39 + color: red;
40 +
41 +}
42 +</style><span class='mfont-{$this->id} fa-2x'>字体示例:这里是临境有感</span>";
43 +
44 + });
45 + $grid->column('created_at');
46 + $grid->column('updated_at')->sortable();
47 +
48 + $grid->filter(function (Grid\Filter $filter) {
49 + $filter->like('name','名称');
50 + });
51 + });
52 + }
53 +
54 +// public function grid(): Grid
55 +// {
56 +// return Grid::make(new OnePoem(), function (Grid $grid) {
57 +// $grid->column('id', 'ID')->sortable();
58 +// $grid->column('title');
59 +// $grid->column('author');
60 +// $grid->column('content');
61 +// $grid->column('annotate');
62 +//// $grid->column('spelling');
63 +//// $grid->column('en');
64 +//
65 +// $grid->quickSearch(['title', 'author', 'content', 'annotate']);
66 +//
67 +// $grid->paginate(10);
68 +// $grid->disableActions();
69 +//
70 +// $grid->filter(function (Grid\Filter $filter) {
71 +// $filter->like('title')->width(3);
72 +// $filter->like('author')->width(3);
73 +// $filter->like('content')->width(3);
74 +// });
75 +// });
76 +
77 +
78 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -28,7 +28,8 @@ Route::group([ ...@@ -28,7 +28,8 @@ Route::group([
28 $router->group(['prefix'=>'/linjing'],function (Router $router){ 28 $router->group(['prefix'=>'/linjing'],function (Router $router){
29 $router->resource('/font', 'FontController'); 29 $router->resource('/font', 'FontController');
30 $router->resource('/template', 'VideoTempController'); 30 $router->resource('/template', 'VideoTempController');
31 - $router->resource('/official', 'AdminMakeVideoController'); 31 + $router->resource('/make', 'AdminMakeVideoController');
32 + $router->resource('/official', 'ImmerseController');
32 }); 33 });
33 34
34 /** 订单*/ 35 /** 订单*/
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
2 2
3 namespace App\Console\Commands; 3 namespace App\Console\Commands;
4 4
5 +use App\Jobs\AdminMakeImmerse;
5 use App\Jobs\MakeImages; 6 use App\Jobs\MakeImages;
6 use App\Jobs\UserMakeImmerse; 7 use App\Jobs\UserMakeImmerse;
7 use App\Models\AdminMakeVideo; 8 use App\Models\AdminMakeVideo;
...@@ -65,6 +66,10 @@ class DevFFmpeg extends Command ...@@ -65,6 +66,10 @@ class DevFFmpeg extends Command
65 */ 66 */
66 public function handle() 67 public function handle()
67 { 68 {
69 + dd(AdminMakeVideo::query()->find(33)->temp->components->toArray());
70 + AdminMakeImmerse::dispatch(AdminMakeVideo::query()->find(33)->temp->components);
71 +
72 +
68 dd(1); 73 dd(1);
69 // 分情况 1.用户视频,2.用户录音 74 // 分情况 1.用户视频,2.用户录音
70 // 注意事项:1.考虑用户是否会员;非会员分辨率 720x1280,会员分辨率1440x2560 75 // 注意事项:1.考虑用户是否会员;非会员分辨率 720x1280,会员分辨率1440x2560
......
This diff is collapsed. Click to expand it.
...@@ -10,4 +10,9 @@ class Component extends Model ...@@ -10,4 +10,9 @@ class Component extends Model
10 use HasFactory; 10 use HasFactory;
11 11
12 protected $guarded = ['']; 12 protected $guarded = [''];
13 +
14 + public function video_temp()
15 + {
16 + return $this->belongsTo('App\Models\VideoTemp','temp_id');
17 + }
13 } 18 }
......
...@@ -10,5 +10,10 @@ class OnePoem extends Model ...@@ -10,5 +10,10 @@ class OnePoem extends Model
10 { 10 {
11 use HasDateTimeFormatter; 11 use HasDateTimeFormatter;
12 protected $table = 'one_poem'; 12 protected $table = 'one_poem';
13 - 13 +
14 +
15 + public function admin_make_video()
16 + {
17 + return $this->belongsTo(AdminMakeVideo::class,'poem_id');
18 + }
14 } 19 }
......
...@@ -11,15 +11,15 @@ class VideoTemp extends Model ...@@ -11,15 +11,15 @@ class VideoTemp extends Model
11 use HasDateTimeFormatter; 11 use HasDateTimeFormatter;
12 12
13 const POSITION_OPTIONS = [ 13 const POSITION_OPTIONS = [
14 - 'topLeft'=>'上左','topMiddle'=>'上中','topRight'=>'上右', 14 + 'topLeft'=>'顶部左对齐','topMiddle'=>'顶部居中','topRight'=>'顶部右对齐',
15 - 'midLeft'=>'中左','midMiddle'=>'中中','midRight'=>'中右', 15 + 'midLeft'=>'居中左对齐','midMiddle'=>'完全居中','midRight'=>'居中右对齐',
16 - 'botLeft'=>'下左','botMiddle'=>'下中','botRight'=>'下右', 16 + 'botLeft'=>'底部左对齐','botMiddle'=>'底部居中','botRight'=>'底部右对齐',
17 ]; 17 ];
18 18
19 const POSITION_FFMPEG = [ 19 const POSITION_FFMPEG = [
20 - 'topLeft' => ['0', 'text_h'], 'topMiddle' => ['(w-text_w)/2', 'text_h'], 'topRight' => ['w-text_w', 'text_h'], 20 + 'topLeft' => ['0', 'text_h+68'], 'topMiddle' => ['(w-text_w)/2', 'text_h+68'], 'topRight' => ['w-text_w', 'text_h+68'],
21 'midLeft' => ['0', '(h-text_h)/2'], 'midMiddle' => ['(w-text_w)/2', '(h-text_h)/2'], 'midRight' => ['w-text_w', '(h-text_h)/2'], 21 'midLeft' => ['0', '(h-text_h)/2'], 'midMiddle' => ['(w-text_w)/2', '(h-text_h)/2'], 'midRight' => ['w-text_w', '(h-text_h)/2'],
22 - 'botLeft' => ['0', 'h-text_h*2'], 'botMiddle' => ['(w-text_w)/2', 'h-text_h*2'], 'botRight' => ['w-text_w', 'h-text_h*2'], 22 + 'botLeft' => ['0', 'h-text_h*2-68'], 'botMiddle' => ['(w-text_w)/2', 'h-text_h*2-68'], 'botRight' => ['w-text_w', 'h-text_h*2-68'],
23 ]; 23 ];
24 24
25 protected $table = 'video_temp'; 25 protected $table = 'video_temp';
...@@ -36,4 +36,9 @@ class VideoTemp extends Model ...@@ -36,4 +36,9 @@ class VideoTemp extends Model
36 return $this->hasMany('App\Models\Component', 'temp_id') 36 return $this->hasMany('App\Models\Component', 'temp_id')
37 ->select(['id', 'temp_id', 'name', 'position', 'font_size', 'text_color', 'text_bg_color', 'text_bg_box','opacity','fix_bounds']); 37 ->select(['id', 'temp_id', 'name', 'position', 'font_size', 'text_color', 'text_bg_color', 'text_bg_box','opacity','fix_bounds']);
38 } 38 }
39 +
40 + public function admin_make_video()
41 + {
42 + return $this->belongsTo(AdminMakeVideo::class,'temp_id');
43 + }
39 } 44 }
......
...@@ -15,6 +15,7 @@ class AlterComponentsTable extends Migration ...@@ -15,6 +15,7 @@ class AlterComponentsTable extends Migration
15 { 15 {
16 16
17 Schema::table('components', function (Blueprint $table) { 17 Schema::table('components', function (Blueprint $table) {
18 + $table->string('font_file')->after('position')->comment('字体文件路径');
18 $table->string('text_bg_box')->after('text_bg_color')->comment('背景厚度'); 19 $table->string('text_bg_box')->after('text_bg_color')->comment('背景厚度');
19 $table->string('fix_bounds')->after('opacity')->comment('超出避免剪切'); 20 $table->string('fix_bounds')->after('opacity')->comment('超出避免剪切');
20 }); 21 });
...@@ -23,6 +24,13 @@ class AlterComponentsTable extends Migration ...@@ -23,6 +24,13 @@ class AlterComponentsTable extends Migration
23 $table->unsignedTinyInteger('bg_music')->after('title')->comment('0=没有,1=有'); 24 $table->unsignedTinyInteger('bg_music')->after('title')->comment('0=没有,1=有');
24 $table->string('bgm_url')->nullable()->after('bg_music')->comment('背景音乐地址'); 25 $table->string('bgm_url')->nullable()->after('bg_music')->comment('背景音乐地址');
25 }); 26 });
27 +
28 + Schema::table('admin_make_video', function (Blueprint $table) {
29 + $table->string('weather')->after('feel')->default('')->comment('天气');
30 + $table->string('huangli')->after('weather')->default('')->comment('黄历');
31 + });
32 +
33 + Schema::dropColumns('admin_make_video', ['bg_music', 'bgm_url']);
26 } 34 }
27 35
28 /** 36 /**
...@@ -33,7 +41,8 @@ class AlterComponentsTable extends Migration ...@@ -33,7 +41,8 @@ class AlterComponentsTable extends Migration
33 public function down() 41 public function down()
34 { 42 {
35 // 43 //
36 - Schema::dropColumns('components', ['text_bg_box', 'fix_bounds']); 44 + Schema::dropColumns('components', ['font_file','text_bg_box', 'fix_bounds']);
37 Schema::dropColumns('video_temp', ['bg_music', 'bgm_url']); 45 Schema::dropColumns('video_temp', ['bg_music', 'bgm_url']);
46 + Schema::dropColumns('admin_make_video', ['weather', 'huangli']);
38 } 47 }
39 } 48 }
......