|
|
<?php
namespace App\Admin\Extensions\Form;use Dcat\Admin\Form\Field\Radio;use Dcat\Admin\Widgets\Radio as WidgetRadio;
/** * 由于信息收集表单中,hasMany中的radio存在多个时出现问题,故重写覆盖 * Class Radio2 * @package App\Admin\Extensions\Form */class Radio2 extends Radio{ protected $view = 'admin::form.radio';
/** * {@inheritdoc} */ public function render() { if ($this->options instanceof \Closure) { $this->options( $this->options->call($this->values(), $this->value(), $this) ); }
$this->addCascadeScript();
$radio = WidgetRadio::make($this->getElementName(), $this->options, $this->style);
if ($this->attributes['disabled'] ?? false) { $radio->disable(); }
$radio ->inline($this->inline) ->check($this->value()) ->class($this->getElementClassString()) ->size($this->size);
$this->addVariables([ 'radio' => $radio, ]);
return parent::render(); }
/** * Add cascade scripts to contents. * * @return string */ protected function getCascadeScript() { if (empty($this->conditions)) { return; }
$cascadeGroups = collect($this->conditions)->map(function ($condition) { return [ 'class' => $this->getCascadeClass($condition['value'], $condition['operator']), 'operator' => $condition['operator'], 'value' => $condition['value'], ]; })->toJson();
return <<<JS(function () { var compare = function (a, b, o) { if (! $.isArray(b)) { return operator_table[o](a, b) }
if (o === '!=') { var result = true; for (var i in b) { if (! operator_table[o](a, b[i])) { result = false;
break; } } return result; }
for (var i in b) { if (operator_table[o](a, b[i])) { return true; } } };
var operator_table = { '=': function(a, b) { if ($.isArray(a) && $.isArray(b)) { return $(a).not(b).length === 0 && $(b).not(a).length === 0; }
return String(a) === String(b); }, '>': function(a, b) { return a > b; }, '<': function(a, b) { return a < b; }, '>=': function(a, b) { return a >= b; }, '<=': function(a, b) { return a <= b; }, '!=': function(a, b) { return ! operator_table['='](a, b); }, 'in': function(a, b) { return Dcat.helpers.inObject(a, String(b), true); }, 'notIn': function(a, b) { return ! Dcat.helpers.inObject(a, String(b), true); }, 'has': function(a, b) { return Dcat.helpers.inObject(b, String(b), true); }, }; var cascade_groups = {$cascadeGroups}, event = '{$this->cascadeEvent}';
\$this.on(event, function (e) { {$this->getFormFrontValue()}
cascade_groups.forEach(function (event) { var group = $(e.target).closest('.form-group.form-field').next('div.cascade-group.'+event.class); if (compare(checked, event.value, event.operator)) { group.removeClass('d-none'); } else { group.addClass('d-none'); } }); }).trigger(event);})();JS; }
/** * @return string */ protected function getFormFrontValue() { return <<<JSvar checked = $('{$this->getElementClassSelector()}:checked').val();JS; }}
|