depandent field added in configuaration

This commit is contained in:
rahul shukla 2019-06-17 18:22:23 +05:30
parent 076f197de7
commit 0b5f50f1b0
1 changed files with 289 additions and 164 deletions

View File

@ -35,209 +35,263 @@
}
?>
<div class="control-group {{ $field['type'] }}" @if ($field['type'] == 'multiselect') :class="[errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]') ? 'has-error' : '']" @else :class="[errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]') ? 'has-error' : '']" @endif>
@if ($field['type'] == 'depands')
<label for="{{ $name }}" {{ !isset($field['validation']) || strpos('required', $field['validation']) === false ? '' : 'class=required' }}>
<?php
{{ trans($field['title']) }}
$depands = explode(":", $field['depand']);
$depandField = current($depands);
$depandValue = end($depands);
@if (count($channel_locale))
<span class="locale">[{{ implode(' - ', $channel_locale) }}]</span>
@endif
if (count($channel_locale)) {
$channel_locale = implode(' - ', $channel_locale);
} else {
$channel_locale = '';
}
</label>
if (isset($value) && $value) {
$i = 0;
foreach ($value as $key => $result) {
$data['title'] = $result;
$data['value'] = $key;
$options[$i] = $data;
$i++;
}
$field['options'] = $options;
}
@if ($field['type'] == 'text')
if (! isset($field['options'])) {
$field['options'] = [['title' => 'No', 'value' => 0],['title' => 'Yes', 'value' => 1]];
}
<input type="text" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;">
$selectedOption = core()->getConfigData($name) ?? '';
?>
@elseif ($field['type'] == 'password')
<depands
:options = '@json($field['options'])'
:name = "'{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]'"
:validations = "'{{ $validations }}'"
:depand = "'{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $depandField }}]'"
:value = "'{{ $depandValue }}'"
:field_name = "'{{ $field['title'] }}'"
:channel_loacle = "'{{ $channel_locale }}'"
:result = "'{{ $selectedOption }}'"
></depands>
<input type="password" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;">
@else
@elseif ($field['type'] == 'textarea')
<div class="control-group {{ $field['type'] }}" @if ($field['type'] == 'multiselect') :class="[errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]') ? 'has-error' : '']" @else :class="[errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]') ? 'has-error' : '']" @endif>
<textarea v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;">{{ old($name) ?: core()->getConfigData($name) }}</textarea>
<label for="{{ $name }}" {{ !isset($field['validation']) || strpos('required', $field['validation']) === false ? '' : 'class=required' }}>
@elseif ($field['type'] == 'select')
{{ trans($field['title']) }}
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;" >
<?php
$selectedOption = core()->getConfigData($name) ?? '';
?>
@if (isset($field['repository']))
@foreach ($value as $key => $option)
<option value="{{ $key }}" {{ $key == $selectedOption ? 'selected' : ''}}>
{{ trans($option) }}
</option>
@endforeach
@else
@foreach ($field['options'] as $option)
<?php
if ($option['value'] == false) {
$value = 0;
} else {
$value = $option['value'];
}
?>
<option value="{{ $value }}" {{ $value == $selectedOption ? 'selected' : ''}}>
{{ trans($option['title']) }}
</option>
@endforeach
@if (count($channel_locale))
<span class="locale">[{{ implode(' - ', $channel_locale) }}]</span>
@endif
</select>
</label>
@elseif ($field['type'] == 'multiselect')
@if ($field['type'] == 'text')
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]" data-vv-as="&quot;{{ $field['name'] }}&quot;" multiple>
<input type="text" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;">
@elseif ($field['type'] == 'password')
<input type="password" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;">
@elseif ($field['type'] == 'textarea')
<textarea v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;">{{ old($name) ?: core()->getConfigData($name) }}</textarea>
@elseif ($field['type'] == 'select')
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;" >
<?php
$selectedOption = core()->getConfigData($name) ?? '';
?>
@if (isset($field['repository']))
@foreach ($value as $key => $option)
<option value="{{ $key }}" {{ $key == $selectedOption ? 'selected' : ''}}>
{{ trans($option) }}
</option>
@endforeach
@else
@foreach ($field['options'] as $option)
<?php
if ($option['value'] == false) {
$value = 0;
} else {
$value = $option['value'];
}
?>
<option value="{{ $value }}" {{ $value == $selectedOption ? 'selected' : ''}}>
{{ trans($option['title']) }}
</option>
@endforeach
@endif
</select>
@elseif ($field['type'] == 'multiselect')
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]" data-vv-as="&quot;{{ $field['name'] }}&quot;" multiple>
<?php
$selectedOption = core()->getConfigData($name) ?? '';
?>
@if (isset($field['repository']))
@foreach ($value as $key => $option)
<option value="{{ $key }}" {{ in_array($key, explode(',', $selectedOption)) ? 'selected' : ''}}>
{{ trans($value[$key]) }}
</option>
@endforeach
@else
@foreach ($field['options'] as $option)
<?php
if ($option['value'] == false) {
$value = 0;
} else {
$value = $option['value'];
}
?>
<option value="{{ $value }}" {{ in_array($option['value'], explode(',', $selectedOption)) ? 'selected' : ''}}>
{{ $option['title'] }}
</option>
@endforeach
@endif
</select>
@elseif ($field['type'] == 'country')
<?php
$selectedOption = core()->getConfigData($name) ?? '';
$countryCode = core()->getConfigData($name) ?? '';
?>
@if (isset($field['repository']))
@foreach ($value as $key => $option)
<country
:country_code = "'{{ $countryCode }}'"
:validations = "'{{ $validations }}'"
:name = "'{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]'"
></country>
<option value="{{ $key }}" {{ in_array($key, explode(',', $selectedOption)) ? 'selected' : ''}}>
{{ trans($value[$key]) }}
</option>
@elseif ($field['type'] == 'state')
@endforeach
@else
@foreach ($field['options'] as $option)
<?php
if ($option['value'] == false) {
$value = 0;
} else {
$value = $option['value'];
}
?>
<?php
$stateCode = core()->getConfigData($name) ?? '';
?>
<option value="{{ $value }}" {{ in_array($option['value'], explode(',', $selectedOption)) ? 'selected' : ''}}>
{{ $option['title'] }}
</option>
@endforeach
<state
:state_code = "'{{ $stateCode }}'"
:validations = "'{{ $validations }}'"
:name = "'{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]'"
></state>
@elseif ($field['type'] == 'boolean')
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;">
<?php
$selectedOption = core()->getConfigData($name) ?? '';
?>
<option value="0" {{ $selectedOption ? '' : 'selected'}}>
{{ __('admin::app.configuration.no') }}
</option>
<option value="1" {{ $selectedOption ? 'selected' : ''}}>
{{ __('admin::app.configuration.yes') }}
</option>
</select>
@elseif ($field['type'] == 'image')
<?php
$src = Storage::url(core()->getConfigData($name));
$result = core()->getConfigData($name);
?>
@if ($result)
<a href="{{ $src }}" target="_blank">
<img src="{{ $src }}" class="configuration-image"/>
</a>
@endif
</select>
<input type="file" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;" style="padding-top: 5px;">
@elseif ($field['type'] == 'country')
@if ($result)
<div class="control-group" style="margin-top: 5px;">
<span class="checkbox">
<input type="checkbox" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" value="1">
<?php
$countryCode = core()->getConfigData($name) ?? '';
?>
<label class="checkbox-view" for="delete"></label>
{{ __('admin::app.configuration.delete') }}
</span>
</div>
@endif
<country code = {{ $countryCode }}></country>
@elseif ($field['type'] == 'state')
<?php
$stateCode = core()->getConfigData($name) ?? '';
?>
<state code = {{ $stateCode }}></state>
@elseif ($field['type'] == 'boolean')
<select v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ $field['name'] }}&quot;">
@elseif ($field['type'] == 'file')
<?php
$selectedOption = core()->getConfigData($name) ?? '';
$result = core()->getConfigData($name);
$src = explode("/", $result);
$path = end($src);
?>
<option value="0" {{ $selectedOption ? '' : 'selected'}}>
{{ __('admin::app.configuration.no') }}
</option>
@if ($result)
<a href="{{ route('admin.configuration.download', [request()->route('slug'), request()->route('slug2'), $path]) }}">
<i class="icon sort-down-icon download"></i>
</a>
@endif
<option value="1" {{ $selectedOption ? 'selected' : ''}}>
{{ __('admin::app.configuration.yes') }}
</option>
<input type="file" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;" style="padding-top: 5px;">
</select>
@if ($result)
<div class="control-group" style="margin-top: 5px;">
<span class="checkbox">
<input type="checkbox" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" value="1">
@elseif ($field['type'] == 'image')
<label class="checkbox-view" for="delete"></label>
{{ __('admin::app.configuration.delete') }}
</span>
</div>
@endif
<?php
$src = Storage::url(core()->getConfigData($name));
$result = core()->getConfigData($name);
?>
@if ($result)
<a href="{{ $src }}" target="_blank">
<img src="{{ $src }}" class="configuration-image"/>
</a>
@endif
<input type="file" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;" style="padding-top: 5px;">
@if ($result)
<div class="control-group" style="margin-top: 5px;">
<span class="checkbox">
<input type="checkbox" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" value="1">
<label class="checkbox-view" for="delete"></label>
{{ __('admin::app.configuration.delete') }}
</span>
</div>
@if (isset($field['info']))
<span class="control-info">{{ trans($field['info']) }}</span>
@endif
@elseif ($field['type'] == 'file')
<?php
$result = core()->getConfigData($name);
$src = explode("/", $result);
$path = end($src);
?>
@if ($result)
<a href="{{ route('admin.configuration.download', [request()->route('slug'), request()->route('slug2'), $path]) }}">
<i class="icon sort-down-icon download"></i>
</a>
<span class="control-error" @if ($field['type'] == 'multiselect') v-if="errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]')" @else v-if="errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]')" @endif
>
@if ($field['type'] == 'multiselect')
@{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}][]') }}
@else
@{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}]') }}
@endif
</span>
<input type="file" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ $field['name'] }}&quot;" style="padding-top: 5px;">
@if ($result)
<div class="control-group" style="margin-top: 5px;">
<span class="checkbox">
<input type="checkbox" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][delete]" value="1">
<label class="checkbox-view" for="delete"></label>
{{ __('admin::app.configuration.delete') }}
</span>
</div>
@endif
@endif
@if (isset($field['info']))
<span class="control-info">{{ trans($field['info']) }}</span>
@endif
<span class="control-error" @if ($field['type'] == 'multiselect') v-if="errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}][]')" @else v-if="errors.has('{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]')" @endif
>
@if ($field['type'] == 'multiselect')
@{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}][]') }}
@else
@{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $thirdField !!}][{!! $field['name'] !!}]') }}
@endif
</span>
</div>
</div>
@endif
@push('scripts')
<script type="text/x-template" id="country-template">
<div>
<select type="text" v-validate="'required'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][country]" v-model="country" data-vv-as="&quot;{{ __('admin::app.customers.customers.country') }}&quot;" @change="someHandler">
<select type="text" v-validate="validations" class="control" :id="name" :name="name" v-model="country" data-vv-as="&quot;{{ __('admin::app.customers.customers.country') }}&quot;" @change="sendCountryCode">
<option value=""></option>
@foreach (core()->countries() as $country)
@ -257,7 +311,7 @@
inject: ['$validator'],
props: ['code'],
props: ['country_code', 'name', 'validations'],
data: function () {
return {
@ -266,13 +320,13 @@
},
mounted: function () {
this.country = this.code;
this.someHandler()
this.country = this.country_code;
this.sendCountryCode()
},
methods: {
someHandler: function () {
this.$root.$emit('sendCountryCode', this.country)
sendCountryCode: function () {
this.$root.$emit('countryCode', this.country)
},
}
});
@ -281,9 +335,9 @@
<script type="text/x-template" id="state-template">
<div>
<input type="text" v-validate="'required'" v-if="!haveStates()" class="control" v-model="state" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][state]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][state]" data-vv-as="&quot;{{ __('admin::app.customers.customers.state') }}&quot;"/>
<input type="text" v-validate="'required'" v-if="!haveStates()" class="control" v-model="state" :id="name" :name="name" data-vv-as="&quot;{{ __('admin::app.customers.customers.state') }}&quot;"/>
<select v-validate="'required'" v-if="haveStates()" class="control" v-model="state" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][state]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][state]" data-vv-as="&quot;{{ __('admin::app.customers.customers.state') }}&quot;" >
<select v-validate="'required'" v-if="haveStates()" class="control" v-model="state" :id="name" :name="name" data-vv-as="&quot;{{ __('admin::app.customers.customers.state') }}&quot;" >
<option value="">{{ __('admin::app.customers.customers.select-state') }}</option>
@ -304,7 +358,7 @@
inject: ['$validator'],
props: ['code'],
props: ['state_code', 'name', 'validations'],
data: function () {
return {
@ -317,14 +371,14 @@
},
mounted: function () {
this.state = this.code
this.state = this.state_code
},
methods: {
haveStates: function () {
var this_this = this;
this_this.$root.$on('sendCountryCode', function (country) {
this_this.$root.$on('countryCode', function (country) {
this_this.country = country;
});
@ -337,4 +391,75 @@
});
</script>
<script type="text/x-template" id="depands-template">
<div class="control-group" :class="[errors.has(name) ? 'has-error' : '']" v-if="this.isVisible">
<label :for="name" :class="[ isRequire ? 'required' : '']">
@{{ field_name }}
<span class="locale"> [@{{ channel_loacle }}] </span>
</label>
<select v-validate= "validations" class="control" :id = "name" :name = "name" v-model="this.result"
:data-vv-as="field_name">
<option v-for='(option, index) in this.options' :value="option.value"> @{{ option.title }} </option>
</select>
<span class="control-error" v-if="errors.has(name)">
@{{ errors.first(name) }}
</span>
</div>
</script>
<script>
Vue.component('depands', {
template: '#depands-template',
inject: ['$validator'],
props: ['options', 'name', 'validations', 'depand', 'value', 'field_name', 'channel_loacle', 'repository', 'result'],
data: function() {
return {
isVisible: false,
isRequire: false,
}
},
created: function () {
var this_this = this;
if (this_this.validations || (this_this.validations.indexOf("required") != -1)) {
this_this.isRequire = true;
}
$(document).ready(function () {
var dependentElement = document.getElementById(this_this.depand);
var depandValue = this_this.value;
if (depandValue == 'true') {
depandValue = 1;
} else if (depandValue == 'false') {
depandValue = 0;
}
dependentElement.onchange = function() {
if (dependentElement.value == depandValue) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
}
if (dependentElement.value == depandValue) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
});
}
});
</script>
@endpush