wyyl/plugins/Social/Views/admin/config_form.blade.php

188 lines
7.3 KiB
PHP

@section('page-title-right')
<button type="button" class="btn btn-primary save-btn" onclick="app.submit('form')">{{ __('common.save') }}</button>
@endsection
<div class="mb-5" id="app">
{{-- <div class="d-flex justify-content-between align-items-center border-bottom pb-3 mb-4">
<h6 class="mb-0">{{ $plugin->name }}</h6>
<button type="button" @click="addRow()" class="btn btn-sm btn-outline-primary">{{ __('common.add') }}</button>
</div> --}}
{{-- <button type="button" @click="addRow()" class="btn btn-sm btn-outline-primary">{{ __('common.add') }}</button> --}}
<el-form ref="form" :model="form" class="form-wrap" :inline-message="true">
<table class="table table-bordered">
<thead>
<tr>
<th style="width: 150px">{{ __('Social::setting.entry_provider') }}</th>
<th>{{ __('Social::setting.entry_status') }}</th>
<th>{{ __('Social::setting.entry_key') }}</th>
<th>{{ __('Social::setting.entry_secret') }}</th>
<th>{{ __('Social::setting.entry_callback') }}</th>
<th style="width: 100px">{{ __('Social::setting.entry_sort_order') }}</th>
<th class="text-end"></th>
</tr>
</thead>
<tbody v-if="form.social.length">
<tr v-for="(item, index) in form.social" :key="index">
<td>
<el-form-item prop="provider" class="mb-0">
<el-select size="small" v-model="item.provider" @change="(e) => {providerChange(e, index)}" placeholder="{{ __('Social::setting.provider') }}">
<el-option
v-for="item in providers"
:key="item.code"
:label="item.label"
:disabled="item.disabled"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</td>
<td>
<el-form-item label="" prop="entry_status" class="mb-0">
<el-switch v-model="item.status" :active-value="1" :inactive-value="0"></el-switch>
</el-form-item>
</td>
<td>
<el-form-item
label="" :prop="`social[${index}].key`" class="mb-0"
:rules="[
{ required: true, message: '{{ __('common.error_required', ['name' => __('Social::setting.entry_key')]) }}', trigger: ['blur', 'change'] },]"
>
<el-input size="small" v-model="item.key" placeholder="{{ __('Social::setting.entry_key') }}"></el-input>
</el-form-item>
</td>
<td>
<el-form-item
label="" :prop="`social[${index}].secret`" class="mb-0"
:rules="[
{ required: true, message: '{{ __('common.error_required', ['name' => __('Social::setting.entry_secret')]) }}', trigger: ['blur', 'change'] },]"
>
<el-input size="small" v-model="item.secret" placeholder="{{ __('Social::setting.entry_secret') }}"></el-input>
</el-form-item>
</td>
<td>
<el-form-item label="" class="mb-0">
<div class="input-group">
<input size="small" class="form-control" :value="item.callback" placeholder="{{ __('Social::setting.entry_callback') }}"></input>
<a href="javascript:void(0)" class="btn btn-outline-secondary opacity-75 copy-code" :data-clipboard-text="item.callback" @click="copyCode"><i class="bi bi-front"></i></a>
</div>
</el-form-item>
</td>
<td>
<el-form-item label="" prop="sort_order" class="mb-0">
<el-input size="small" v-model="item.sort_order" placeholder="{{ __('Social::setting.entry_sort_order') }}"></el-input>
</el-form-item>
</td>
<td class="text-end">
<button type="button" @click="form.social.splice(index, 1)" class="btn btn-outline-danger btn-sm ml-1"><i class="bi bi-x-lg"></i></button>
</td>
</tr>
<tr>
<td colspan="6"></td>
<td class="text-end"><button type="button" @click="addRow()" class="btn btn-sm btn-outline-primary">{{ __('common.add') }}</button></td>
</tr>
</tbody>
<tbody v-else>
<td colspan="7">
<div class="d-flex align-items-center justify-content-center p-4">
<div class="text-secondary fs-5 me-2">{{ __('common.no_data') }}</div>
<button type="button" @click="addRow()" class="btn btn-sm btn-outline-primary">{{ __('common.add') }}</button>
</div>
</td>
</tbody>
</table>
</el-form>
</div>
<h6 class="border-bottom pb-3 mb-4">{{ __('Social::setting.text_help_msg') }}</h6>
<ol class="list-group list-group-numbered lh-lg text-secondary">
<li>{{ __('Social::setting.text_omni_explain') }}</li>
<li>{{ __('Social::setting.text_omni_explain_2') }}</li>
<li>{{ __('Social::setting.text_facebook_title') }}
<a target="_blank" href="https://developers.facebook.com/">Facebook</a>
</li>
<li>{{ __('Social::setting.text_twitter_title') }}
<a target="_blank" href="https://developer.twitter.com/">Twitter</a>
</li>
<li>{{ __('Social::setting.text_google_title') }}
<a target="_blank" href="https://console.developers.google.com/">Google</a>
</li>
.......
</ol>
<style>
.el-form-item__error--inline {
margin-left: 0;
}
.el-form-item__content {
line-height: 1;
}
</style>
<script src="{{ asset('vendor/clipboard/clipboard.min.js') }}"></script>
<script>
new ClipboardJS('.copy-code')
let app = new Vue({
el: '#app',
data: {
form: {
social: @json($plugin->getSetting('setting') ?? []),
},
source: {
providers: @json(Plugin\Social\Repositories\CustomerRepo::allProviders())
},
rules: {
}
},
computed: {
providers() {
let providers = @json(Plugin\Social\Repositories\CustomerRepo::allProviders());
providers.forEach(e => {
if (this.form.social.some(s => s.provider == e.code)) {
e.disabled = true;
}
})
return providers;
}
},
methods: {
submit(form) {
this.$refs[form].validate((valid) => {
if (!valid) {
this.$message.error('{{ __('common.error_form') }}');
return;
}
$http.post("{{ admin_route('plugin.social.setting') }}", this.form.social).then((res) => {
layer.msg(res.message)
})
});
},
providerChange(e, index) {
this.form.social[index].callback = `{{ shop_route('home.index') }}/social/callbacks/${e}`
},
addRow() {
let providers = this.source.providers.filter(e => !this.form.social.some(s => s.provider == e.code))
if (providers.length) {
this.form.social.push({provider: providers[0].code, status: 1, key: '', secret: '', callback: `{{ shop_route('home.index') }}/social/callbacks/${this.source.providers[0].code}`, sort_order: this.form.social.length})
}
},
copyCode() {
layer.msg('{{ __('Social::setting.copy_success') }}');
}
}
})
</script>