mirror of
https://github.com/cjango/dcat-vue.git
synced 2025-12-06 22:40:03 +08:00
新增组件
This commit is contained in:
14
README.md
14
README.md
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 已有表单组件
|
### 已有表单组件(采用的是Naive UI)
|
||||||
```php
|
```php
|
||||||
$form->vFile('file') // 关联文件系统配置-直传
|
$form->vFile('file') // 关联文件系统配置-直传
|
||||||
->accept('mime types');
|
->accept('mime types');
|
||||||
@@ -59,7 +59,17 @@
|
|||||||
->jpeg(0.8) // 裁剪为jpeg格式, 参数为图片质量0-1
|
->jpeg(0.8) // 裁剪为jpeg格式, 参数为图片质量0-1
|
||||||
->accept('mime types');
|
->accept('mime types');
|
||||||
|
|
||||||
$form->vTags('tags');
|
$form->vTags('tags'); // 标签
|
||||||
|
|
||||||
|
$form->vList('list')
|
||||||
|
->sortable() // 开启排序
|
||||||
|
->max(8); // 限制最大添加数量
|
||||||
|
|
||||||
|
$form->vKeyValue('kvs')
|
||||||
|
->sortable() // 开启排序
|
||||||
|
->serial() // 开启固定有序索引 默认为字母A-Z
|
||||||
|
->keys(['一', '二', '三', '四']) // serial后自定义索引
|
||||||
|
->list(); // serial后只提交值,保存为一维数组(索引仅作为显示)
|
||||||
```
|
```
|
||||||
|
|
||||||
[comment]: <> (### Donate)
|
[comment]: <> (### Donate)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Event;
|
|||||||
use Weiwait\DcatVue\Field\DateRange;
|
use Weiwait\DcatVue\Field\DateRange;
|
||||||
use Weiwait\DcatVue\Field\File;
|
use Weiwait\DcatVue\Field\File;
|
||||||
use Weiwait\DcatVue\Field\Image;
|
use Weiwait\DcatVue\Field\Image;
|
||||||
|
use Weiwait\DcatVue\Field\KeyValue;
|
||||||
|
use Weiwait\DcatVue\Field\ListField;
|
||||||
use Weiwait\DcatVue\Field\MultipleFile;
|
use Weiwait\DcatVue\Field\MultipleFile;
|
||||||
use Weiwait\DcatVue\Field\MultipleImage;
|
use Weiwait\DcatVue\Field\MultipleImage;
|
||||||
use Weiwait\DcatVue\Field\Tag;
|
use Weiwait\DcatVue\Field\Tag;
|
||||||
@@ -41,6 +43,8 @@ class DcatVueServiceProvider extends ServiceProvider
|
|||||||
Form::extend('vImage', Image::class);
|
Form::extend('vImage', Image::class);
|
||||||
Form::extend('vMultipleImage', MultipleImage::class);
|
Form::extend('vMultipleImage', MultipleImage::class);
|
||||||
Form::extend('vTags', Tag::class);
|
Form::extend('vTags', Tag::class);
|
||||||
|
Form::extend('vList', ListField::class);
|
||||||
|
Form::extend('vKeyValue', KeyValue::class);
|
||||||
// Form::extend('dateRange', DateRange::class);
|
// Form::extend('dateRange', DateRange::class);
|
||||||
|
|
||||||
Admin::asset()->css(Admin::asset()->getAlias('@weiwait.dcat-vue')['css']);
|
Admin::asset()->css(Admin::asset()->getAlias('@weiwait.dcat-vue')['css']);
|
||||||
|
|||||||
177
src/Field/KeyValue.php
Normal file
177
src/Field/KeyValue.php
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Weiwait\DcatVue\Field;
|
||||||
|
|
||||||
|
use Dcat\Admin\Form\Field;
|
||||||
|
use Dcat\Admin\Support\Helper;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\MessageBag;
|
||||||
|
use function Swoole\Coroutine\map;
|
||||||
|
|
||||||
|
class KeyValue extends Field\KeyValue
|
||||||
|
{
|
||||||
|
protected $view = 'weiwait.dcat-vue::common';
|
||||||
|
private bool $is_list = false;
|
||||||
|
private bool $is_serial = false;
|
||||||
|
private bool $is_sortable = false;
|
||||||
|
private array $keys = [];
|
||||||
|
|
||||||
|
public function getValidator(array $input)
|
||||||
|
{
|
||||||
|
if ($this->is_list) {
|
||||||
|
if ($this->validator) {
|
||||||
|
return $this->validator->call($this, $input);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! is_string($this->column)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rules = $attributes = [];
|
||||||
|
|
||||||
|
if (! Arr::has($input, $this->column)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($fieldRules = $this->getRules()) {
|
||||||
|
$rules["{$this->column}.values.*"] = $fieldRules;
|
||||||
|
}
|
||||||
|
$attributes["{$this->column}.values.*"] = __('Value');
|
||||||
|
$rules["{$this->column}.values"][] = 'array';
|
||||||
|
|
||||||
|
$attributes["{$this->column}.values"] = $this->label;
|
||||||
|
|
||||||
|
$input = $this->prepareValidatorInput($input);
|
||||||
|
|
||||||
|
return validator($input, $rules, $this->getValidationMessages(), $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::getValidator($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formatValidatorMessages($messageBag): MessageBag
|
||||||
|
{
|
||||||
|
if ($this->is_list) {
|
||||||
|
$messages = new MessageBag();
|
||||||
|
|
||||||
|
foreach ($messageBag->toArray() as $column => $message) {
|
||||||
|
$messages->add($this->column, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::formatValidatorMessages($messageBag);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareValidatorInput(array $input): array
|
||||||
|
{
|
||||||
|
if ($this->is_list) {
|
||||||
|
Arr::forget($input, "{$this->column}.values.".static::DEFAULT_FLAG_NAME);
|
||||||
|
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::prepareValidatorInput($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareInputValue($value)
|
||||||
|
{
|
||||||
|
if ($this->is_list) {
|
||||||
|
unset($value['values'][self::DEFAULT_FLAG_NAME]);
|
||||||
|
|
||||||
|
if (empty($value['values'])) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_values($value['values']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::prepareInputValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
/****************************** parent ************************************/
|
||||||
|
|
||||||
|
$value = $this->value();
|
||||||
|
|
||||||
|
$this->value(collect($value)->map(fn($value, $key) => ['key' => $key, 'value' => $value])->values());
|
||||||
|
|
||||||
|
$this->addVariables([
|
||||||
|
'count' => $value ? count($value) : 0,
|
||||||
|
'keyLabel' => $this->getKeyLabel(),
|
||||||
|
'valueLabel' => $this->getValueLabel(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
/****************************** field ************************************/
|
||||||
|
|
||||||
|
if (!$this->shouldRender()) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setDefaultClass();
|
||||||
|
|
||||||
|
$this->callComposing();
|
||||||
|
|
||||||
|
$this->withScript();
|
||||||
|
|
||||||
|
/****************************** custom ************************************/
|
||||||
|
|
||||||
|
$this->addVariables([
|
||||||
|
'is_list' => $this->is_list,
|
||||||
|
'is_serial' => $this->is_serial,
|
||||||
|
'is_sortable' => $this->is_sortable,
|
||||||
|
'keys' => $this->keys,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->withProvides();
|
||||||
|
|
||||||
|
$this->addVariables([
|
||||||
|
'provides' => $this->variables(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return view($this->view(), $this->variables());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function formatAttributes()
|
||||||
|
{
|
||||||
|
return $this->attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function withProvides()
|
||||||
|
{
|
||||||
|
$this->addVariables([
|
||||||
|
'component' => 'KeyValue',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sortable(bool $sortable = true): self
|
||||||
|
{
|
||||||
|
$this->is_sortable = $sortable;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function serial(bool $serial = true): self
|
||||||
|
{
|
||||||
|
$this->is_serial = $serial;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function keys(array $keys): self
|
||||||
|
{
|
||||||
|
$this->keys = $keys;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list(bool $list = true): self
|
||||||
|
{
|
||||||
|
$this->is_list = $list;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
68
src/Field/ListField.php
Normal file
68
src/Field/ListField.php
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Weiwait\DcatVue\Field;
|
||||||
|
|
||||||
|
use Dcat\Admin\Form\Field;
|
||||||
|
use Dcat\Admin\Support\Helper;
|
||||||
|
|
||||||
|
class ListField extends Field\ListField
|
||||||
|
{
|
||||||
|
protected $view = 'weiwait.dcat-vue::common';
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
/****************************** parent ************************************/
|
||||||
|
|
||||||
|
$value = $this->value();
|
||||||
|
|
||||||
|
$this->addVariables(['count' => $value ? count($value) : 0]);
|
||||||
|
|
||||||
|
/****************************** field ************************************/
|
||||||
|
|
||||||
|
if (!$this->shouldRender()) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setDefaultClass();
|
||||||
|
|
||||||
|
$this->callComposing();
|
||||||
|
|
||||||
|
$this->withScript();
|
||||||
|
|
||||||
|
/****************************** custom ************************************/
|
||||||
|
|
||||||
|
$this->withProvides();
|
||||||
|
|
||||||
|
$this->addVariables([
|
||||||
|
'max' => $this->max ?? 999,
|
||||||
|
'min' => $this->min,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->addVariables([
|
||||||
|
'provides' => $this->variables(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return view($this->view(), $this->variables());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function formatAttributes()
|
||||||
|
{
|
||||||
|
return $this->attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function withProvides()
|
||||||
|
{
|
||||||
|
$this->addVariables([
|
||||||
|
'component' => 'List',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sortable(bool $sortable = true): self
|
||||||
|
{
|
||||||
|
$this->addVariables([
|
||||||
|
'sortable' => $sortable,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,4 +33,8 @@ return [
|
|||||||
'2.0.1' => [
|
'2.0.1' => [
|
||||||
'修复文件删除',
|
'修复文件删除',
|
||||||
],
|
],
|
||||||
|
'2.1.0' => [
|
||||||
|
'新增list表单组件',
|
||||||
|
'新增keyValue表单组件',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user