提交 ff475e4e 编写于 作者: E eddy8

add: 多选表单类型(selectMulti)选择 unsignedInteger 数据类型时多个选择值求和保存

上级 39131c7d
......@@ -125,7 +125,7 @@ class ContentController extends Controller
$content = ContentRepository::add($request->only(
EntityFieldRepository::getSaveFields($entity)
));
), $this->entity);
// 标签类型字段另外处理 多对多关联
$inputTagsField = EntityFieldRepository::getInputTagsField($entity);
......@@ -203,7 +203,7 @@ class ContentController extends Controller
try {
DB::beginTransaction();
ContentRepository::update($id, $data);
ContentRepository::update($id, $data, $this->entity);
// 标签类型字段另外处理 多对多关联
$inputTagsField = EntityFieldRepository::getInputTagsField($entity);
$tags = null;
......
......@@ -7,6 +7,8 @@ namespace App\Repository\Admin;
use App\Model\Admin\Content;
use App\Model\Admin\ContentTag;
use App\Model\Admin\Entity;
use App\Model\Admin\EntityField;
use App\Repository\Searchable;
/**
......@@ -46,15 +48,15 @@ class ContentRepository
];
}
public static function add($data)
public static function add($data, Entity $entity)
{
self::$model->setRawAttributes(self::processParams($data))->save();
self::$model->setRawAttributes(self::processParams($data, $entity))->save();
return self::$model;
}
public static function update($id, $data)
public static function update($id, $data, Entity $entity)
{
return self::$model->newQuery()->where('id', $id)->update(self::processParams($data));
return self::$model->newQuery()->where('id', $id)->update(self::processParams($data, $entity));
}
public static function find($id)
......@@ -83,15 +85,24 @@ class ContentRepository
return self::$model;
}
protected static function processParams($data)
protected static function processParams($data, Entity $entity)
{
return array_map(function ($item) {
return collect($data)->map(function ($item, $key) use ($entity) {
if (is_array($item)) {
return implode(',', $item);
} elseif (preg_match('/^\d+(,\d+)*/', $item)) {
// select多选类型表单,数据类型为 unsignedInteger 的求和保存,查询时可以利用 AND 运算查找对应值
$fieldType = EntityField::where('entity_id', $entity->id)
->where('form_type', 'selectMulti')
->where('name', $key)->value('type');
if ($fieldType == 'unsignedInteger') {
return array_sum(explode(',', $item));
}
return $item;
} else {
return $item;
}
}, $data);
})->toArray();
}
public static function adjacent($id)
......
......@@ -36,6 +36,11 @@ function isChecked($value, $options)
return in_array($value, explode(',', $options), true);
}
function isCheckedByAnd($value, $options)
{
return ($options & $value) == $value;
}
function xssFilter($data)
{
if (is_string($data)) {
......
......@@ -99,7 +99,11 @@
<div class="layui-input-inline" style="width: 380px;z-index: {{99999 - ($field->order + $field->id)}}">
<select xm-select-search xm-select="select-{{ $inlineField->name }}" name="{{ $inlineField->name }}" @if($inlineField->is_required == \App\Model\Admin\EntityField::REQUIRED_ENABLE) required lay-verify="required" @endif @if(isset($model) && $inlineField->is_edit == \App\Model\Admin\EntityField::EDIT_DISABLE) disabled @endif>
@foreach(parseEntityFieldParams($inlineField->form_params) as $v)
<option value="{{ $v[0] }}" @if((isset($model) && isChecked($v[0], $model->{$inlineField->name})) || (!isset($model) && isChecked($v[0], $inlineField->form_default_value))) selected @endif>{{ $v[1] }}</option>
@if ($inlineField->type == 'unsignedInteger')
<option value="{{ $v[0] }}" @if((isset($model) && isCheckedByAnd($v[0], $model->{$inlineField->name})) || (!isset($model) && isCheckedByAnd($v[0], $inlineField->form_default_value))) selected @endif>{{ $v[1] }}</option>
@else
<option value="{{ $v[0] }}" @if((isset($model) && isChecked($v[0], $model->{$inlineField->name})) || (!isset($model) && isChecked($v[0], $inlineField->form_default_value))) selected @endif>{{ $v[1] }}</option>
@endif
@endforeach
</select>
</div>
......@@ -427,7 +431,11 @@
<div class="layui-input-block" style="width: 600px;z-index: {{99999 - ($field->order + $field->id)}}">
<select xm-select-search xm-select="select-{{ $field->name }}" name="{{ $field->name }}" @if($field->is_required == \App\Model\Admin\EntityField::REQUIRED_ENABLE) required lay-verify="required" @endif @if(isset($model) && $field->is_edit == \App\Model\Admin\EntityField::EDIT_DISABLE) disabled @endif>
@foreach(parseEntityFieldParams($field->form_params) as $v)
<option value="{{ $v[0] }}" @if((isset($model) && isChecked($v[0], $model->{$field->name})) || (!isset($model) && isChecked($v[0], $field->form_default_value))) selected @endif>{{ $v[1] }}</option>
@if ($field->type == 'unsignedInteger')
<option value="{{ $v[0] }}" @if((isset($model) && isCheckedByAnd($v[0], $model->{$field->name})) || (!isset($model) && isCheckedByAnd($v[0], $field->form_default_value))) selected @endif>{{ $v[1] }}</option>
@else
<option value="{{ $v[0] }}" @if((isset($model) && isChecked($v[0], $model->{$field->name})) || (!isset($model) && isChecked($v[0], $field->form_default_value))) selected @endif>{{ $v[1] }}</option>
@endif
@endforeach
</select>
</div>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册