1
0
mirror of https://github.com/cjango/dcat-vue.git synced 2025-12-07 06:50:03 +08:00

直传版图片裁剪

This commit is contained in:
weiwait
2022-07-04 17:24:11 +08:00
parent 0c205303cb
commit 00f96f29a3
7 changed files with 833 additions and 301 deletions

View File

@@ -7,7 +7,9 @@ use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Illuminate\Support\Facades\Event;
use Weiwait\DcatVue\Field\File;
use Weiwait\DcatVue\Field\Image;
use Weiwait\DcatVue\Field\MultipleFile;
use Weiwait\DcatVue\Field\MultipleImage;
use Weiwait\DcatVue\Field\Vue;
use Weiwait\DcatVue\Models\FilesystemConfig;
@@ -34,6 +36,8 @@ class DcatVueServiceProvider extends ServiceProvider
// Form::extend('vue', Vue::class);
Form::extend('file', File::class);
Form::extend('multipleFile', MultipleFile::class);
Form::extend('image', Image::class);
Form::extend('multipleImage', MultipleImage::class);
Admin::asset()->css(Admin::asset()->getAlias('@weiwait.dcat-vue')['css']);

124
src/Field/Image.php Normal file
View File

@@ -0,0 +1,124 @@
<?php
namespace Weiwait\DcatVue\Field;
use Dcat\Admin\Form\Field;
use Weiwait\DcatVue\Models\WeiwaitUpload;
class Image extends Field\Image
{
protected $view = 'weiwait.dcat-vue::file';
protected string $disk;
protected function prepareInputValue($file)
{
WeiwaitUpload::query()->whereIn('name', (array) $file)->delete();
return parent::prepareInputValue($file);
}
public function render()
{
if (!$this->shouldRender()) {
return '';
}
$this->setDefaultClass();
$this->callComposing();
$this->withScript();
$this->withProvides();
$this->addVariables([
'provides' => $this->variables(),
]);
return view($this->view(), $this->variables());
}
protected function formatAttributes()
{
return $this->attributes;
}
protected function withProvides()
{
$disk = config('admin.upload.disk', config('filesystems.default'));
$this->addVariables([
'component' => 'Image',
'multiple' => false,
'disk' => $this->disk ?? $disk,
'dir' => $this->getDirectory(),
'uploaded_url' => route('dcat.admin.weiwait.file.uploaded'),
'obs_config_url' => route('dcat.admin.weiwait.file.obs-config'),
]);
}
public function disk($disk): self
{
$this->disk = $disk;
return parent::disk($disk);
}
/**
* @param float|array $ratio
* @return self
*/
public function ratio($ratio): self
{
if (empty($ratio)) return $this;
if (is_numeric($ratio)) {
return parent::ratio($ratio);
}
if (is_array($ratio)) {
$this->mergeOptions(['dimensions' => ['ratio' => $ratio]]);
}
return $this;
}
/**
* @param int | array $width
* @param null $height
* @return $this
*/
public function resolution($width, $height = null): self
{
if (!is_array($width)) {
$width = [
'default' => [$width, $height ?: $width]
];
}
$this->mergeOptions(['resolution' => $width]);
return $this;
}
/**
* @throws \Exception
*/
public function jpeg(float $quality = 1): self
{
if ($quality > 1 || $quality < 0) {
throw new \Exception('图片质量区间[0~1]');
}
$this->mergeOptions(['quality' => $quality]);
return $this;
}
public function large(): self
{
$this->mergeOptions(['large' => 'large']);
return $this;
}
}

124
src/Field/MultipleImage.php Normal file
View File

@@ -0,0 +1,124 @@
<?php
namespace Weiwait\DcatVue\Field;
use Dcat\Admin\Form\Field;
use Weiwait\DcatVue\Models\WeiwaitUpload;
class MultipleImage extends Field\MultipleImage
{
protected $view = 'weiwait.dcat-vue::file';
protected string $disk;
protected function prepareInputValue($file)
{
WeiwaitUpload::query()->whereIn('name', (array) $file)->delete();
return parent::prepareInputValue($file);
}
public function render()
{
if (!$this->shouldRender()) {
return '';
}
$this->setDefaultClass();
$this->callComposing();
$this->withScript();
$this->withProvides();
$this->addVariables([
'provides' => $this->variables(),
]);
return view($this->view(), $this->variables());
}
protected function formatAttributes()
{
return $this->attributes;
}
protected function withProvides()
{
$disk = config('admin.upload.disk', config('filesystems.default'));
$this->addVariables([
'component' => 'Image',
'multiple' => true,
'disk' => $this->disk ?? $disk,
'dir' => $this->getDirectory(),
'uploaded_url' => route('dcat.admin.weiwait.file.uploaded'),
'obs_config_url' => route('dcat.admin.weiwait.file.obs-config'),
]);
}
public function disk($disk): self
{
$this->disk = $disk;
return parent::disk($disk);
}
/**
* @param float|array $ratio
* @return self
*/
public function ratio($ratio): self
{
if (empty($ratio)) return $this;
if (is_numeric($ratio)) {
return parent::ratio($ratio);
}
if (is_array($ratio)) {
$this->mergeOptions(['dimensions' => ['ratio' => $ratio]]);
}
return $this;
}
/**
* @param int | array $width
* @param null $height
* @return $this
*/
public function resolution($width, $height = null): self
{
if (!is_array($width)) {
$width = [
'default' => [$width, $height ?: $width]
];
}
$this->mergeOptions(['resolution' => $width]);
return $this;
}
/**
* @throws \Exception
*/
public function jpeg(float $quality = 1): self
{
if ($quality > 1 || $quality < 0) {
throw new \Exception('图片质量区间[0~1]');
}
$this->mergeOptions(['quality' => $quality]);
return $this;
}
public function large(): self
{
$this->mergeOptions(['large' => 'large']);
return $this;
}
}

View File

@@ -29,6 +29,8 @@ class DcatVueController extends Controller
->insert(array_map(fn($item) => ['name' => $item, 'created_at' => now(), 'disk' => $request['disk']],
(array)$request['files']
));
return Storage::disk($request['disk'])->url($request['files']);
}
public function obsConfig(Request $request)
@@ -36,7 +38,7 @@ class DcatVueController extends Controller
switch ($request['disk']) {
case 'oss':
return json_decode(
Storage::disk('oss')->getAdapter()->signatureConfig(prefix: config('admin.upload.directory.file'), expire: 3600),
Storage::disk('oss')->getAdapter()->signatureConfig(prefix: dirname($request['filename']), expire: 3600),
true
);