mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 05:31:10 -04:00 
			
		
		
		
	merge dev
This commit is contained in:
		| @ -7,175 +7,49 @@ | ||||
|           {{ $t('settings.mail.mail_config_desc') }} | ||||
|         </p> | ||||
|       </div> | ||||
|       <form action="" @submit.prevent="saveEmailConfig()"> | ||||
|         <div class="row"> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.driver') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-select | ||||
|               v-model="mailConfigData.mail_driver" | ||||
|               :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|               :options="mail_drivers" | ||||
|               :searchable="true" | ||||
|               :show-labels="false" | ||||
|               @change="$v.mailConfigData.mail_driver.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.host') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_host.$error" | ||||
|               v-model.trim="mailConfigData.mail_host" | ||||
|               type="text" | ||||
|               name="mail_host" | ||||
|               @input="$v.mailConfigData.mail_host.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="row my-2"> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.username') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_username.$error" | ||||
|               v-model.trim="mailConfigData.mail_username" | ||||
|               type="text" | ||||
|               name="db_name" | ||||
|               @input="$v.mailConfigData.mail_username.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_username.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_username.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.password') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_password.$error" | ||||
|               v-model.trim="mailConfigData.mail_password" | ||||
|               type="password" | ||||
|               name="name" | ||||
|               show-password | ||||
|               @input="$v.mailConfigData.mail_password.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_password.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_password.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="row my-2"> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.port') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_port.$error" | ||||
|               v-model.trim="mailConfigData.mail_port" | ||||
|               type="text" | ||||
|               name="mail_port" | ||||
|               @input="$v.mailConfigData.mail_port.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|               <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|                 {{ $tc('validation.numbers_only') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="col-md-6 my-2"> | ||||
|             <label class="form-label">{{ $t('settings.mail.encryption') }}</label> | ||||
|             <span class="text-danger"> *</span> | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|               v-model.trim="mailConfigData.mail_encryption" | ||||
|               type="text" | ||||
|               name="name" | ||||
|               @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|               <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|                 {{ $tc('validation.required') }} | ||||
|               </span> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <base-button | ||||
|       <div v-if="mailConfigData"> | ||||
|         <component | ||||
|           :is="mail_driver" | ||||
|           :config-data="mailConfigData" | ||||
|           :loading="loading" | ||||
|           class="pull-right mt-4" | ||||
|           icon="save" | ||||
|           color="theme" | ||||
|           type="submit" | ||||
|         > | ||||
|           {{ $t('general.save') }} | ||||
|         </base-button> | ||||
|       </form> | ||||
|           :mail-drivers="mail_drivers" | ||||
|           @on-change-driver="(val) => mail_driver = mailConfigData.mail_driver = val" | ||||
|           @submit-data="saveEmailConfig" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import Ls from '../../services/ls' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
| import Smtp from './mailDriver/Smtp' | ||||
| import Mailgun from './mailDriver/Mailgun' | ||||
| import Sparkpost from './mailDriver/Sparkpost' | ||||
| import Ses from './mailDriver/Ses' | ||||
| import Basic from './mailDriver/Basic' | ||||
| import Mandrill from './mailDriver/Mandrill' | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|     MultiSelect, | ||||
|     Smtp, | ||||
|     Mailgun, | ||||
|     Sparkpost, | ||||
|     Ses, | ||||
|     sendmail: Basic, | ||||
|     mail: Basic, | ||||
|     Mandrill | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: 'smtp', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_username: '', | ||||
|         mail_password: '', | ||||
|         mail_encryption: '' | ||||
|       }, | ||||
|       mailConfigData: null, | ||||
|       mail_driver: 'smtp', | ||||
|       loading: false, | ||||
|       mail_drivers: [] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_username: { | ||||
|         required | ||||
|       }, | ||||
|       mail_password: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     this.loadData() | ||||
|   }, | ||||
| @ -191,17 +65,14 @@ export default { | ||||
|       } | ||||
|       if (mailData.data) { | ||||
|         this.mailConfigData = mailData.data | ||||
|         this.mail_driver = mailData.data.mail_driver | ||||
|       } | ||||
|       this.loading = false | ||||
|     }, | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (this.$v.mailConfigData.$invalid) { | ||||
|         return true | ||||
|       } | ||||
|     async saveEmailConfig (mailConfigData) { | ||||
|       this.loading = true | ||||
|       try { | ||||
|         let response = await window.axios.post('/api/settings/environment/mail', this.mailConfigData) | ||||
|         let response = await window.axios.post('/api/settings/environment/mail', mailConfigData) | ||||
|         if (response.data.success) { | ||||
|           window.toastr['success'](this.$t('wizard.success.' + response.data.success)) | ||||
|         } else { | ||||
|  | ||||
							
								
								
									
										156
									
								
								resources/assets/js/views/settings/mailDriver/Basic.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								resources/assets/js/views/settings/mailDriver/Basic.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,156 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <!-- <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> --> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										278
									
								
								resources/assets/js/views/settings/mailDriver/Mailgun.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										278
									
								
								resources/assets/js/views/settings/mailDriver/Mailgun.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,278 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.domain') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_domain.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_domain" | ||||
|           type="text" | ||||
|           name="db_name" | ||||
|           @input="$v.mailConfigData.mail_mailgun_domain.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_domain.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_domain.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.mailgin_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_mailgun_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.endpoint') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_endpoint.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_endpoint" | ||||
|           type="text" | ||||
|           name="mail_mailgun_endpoint" | ||||
|           @input="$v.mailConfigData.mail_mailgun_endpoint.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_endpoint.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_endpoint.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_endpoint.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_mailgun_domain: '', | ||||
|         mail_mailgun_secret: '', | ||||
|         mail_mailgun_endpoint: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_mailgun_domain: { | ||||
|         required | ||||
|       }, | ||||
|       mail_mailgun_endpoint: { | ||||
|         required | ||||
|       }, | ||||
|       mail_mailgun_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										230
									
								
								resources/assets/js/views/settings/mailDriver/Mandrill.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								resources/assets/js/views/settings/mailDriver/Mandrill.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,230 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.mandrill_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mandrill_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_mandrill_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_mandrill_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mandrill_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mandrill_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_mandrill_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_mandrill_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										253
									
								
								resources/assets/js/views/settings/mailDriver/Ses.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								resources/assets/js/views/settings/mailDriver/Ses.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,253 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.ses_key') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_ses_key.$error" | ||||
|           v-model.trim="mailConfigData.mail_ses_key" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.mail_ses_key.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_ses_key.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_ses_key.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.ses_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_ses_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_ses_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_ses_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_ses_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_ses_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_ses_key: '', | ||||
|         mail_ses_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_ses_key: { | ||||
|         required | ||||
|       }, | ||||
|       mail_ses_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										253
									
								
								resources/assets/js/views/settings/mailDriver/Smtp.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								resources/assets/js/views/settings/mailDriver/Smtp.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,253 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.username') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_username.$error" | ||||
|           v-model.trim="mailConfigData.mail_username" | ||||
|           type="text" | ||||
|           name="db_name" | ||||
|           @input="$v.mailConfigData.mail_username.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_username.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_username.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.password') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_password.$error" | ||||
|           v-model.trim="mailConfigData.mail_password" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_password.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_password.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_password.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_username: '', | ||||
|         mail_password: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_username: { | ||||
|         required | ||||
|       }, | ||||
|       mail_password: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										233
									
								
								resources/assets/js/views/settings/mailDriver/Sparkpost.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								resources/assets/js/views/settings/mailDriver/Sparkpost.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,233 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.sparkpost_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_sparkpost_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_sparkpost_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_sparkpost_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_sparkpost_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_sparkpost_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_sparkpost_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_sparkpost_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -3,184 +3,49 @@ | ||||
|     <form action="" @submit.prevent="next()"> | ||||
|       <p class="form-title">{{ $t('wizard.mail.mail_config') }}</p> | ||||
|       <p class="form-desc">{{ $t('wizard.mail.mail_config_desc') }}</p> | ||||
|       <div class="row my-2 mt-5"> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-select | ||||
|             v-model="mailConfigData.mail_driver" | ||||
|             :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|             :options="mail_drivers" | ||||
|             :searchable="true" | ||||
|             :show-labels="false" | ||||
|             @change="$v.mailConfigData.mail_driver.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_host.$error" | ||||
|             v-model.trim="mailConfigData.mail_host" | ||||
|             type="text" | ||||
|             name="mail_host" | ||||
|             @input="$v.mailConfigData.mail_host.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="row my-2"> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.username') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_username.$error" | ||||
|             v-model.trim="mailConfigData.mail_username" | ||||
|             type="text" | ||||
|             name="db_name" | ||||
|             @input="$v.mailConfigData.mail_username.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_username.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_username.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.password') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_password.$error" | ||||
|             v-model.trim="mailConfigData.mail_password" | ||||
|             type="password" | ||||
|             show-password | ||||
|             name="name" | ||||
|             @input="$v.mailConfigData.mail_password.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_password.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_password.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="row my-2"> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_port.$error" | ||||
|             v-model.trim="mailConfigData.mail_port" | ||||
|             type="text" | ||||
|             name="mail_port" | ||||
|             @input="$v.mailConfigData.mail_port.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|             <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|               {{ $tc('validation.numbers_only') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col-md-6 my-2"> | ||||
|           <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|             v-model.trim="mailConfigData.mail_encryption" | ||||
|             type="text" | ||||
|             name="name" | ||||
|             @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|             <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="row mt-5"> | ||||
|         <base-button | ||||
|           :loading="loading" | ||||
|           class="pull-right" | ||||
|           icon="save" | ||||
|           color="theme" | ||||
|           type="submit" | ||||
|         > | ||||
|           {{ $t('wizard.save_cont') }} | ||||
|         </base-button> | ||||
|         <base-button | ||||
|           :loading="loading" | ||||
|           class="pull-right ml-4" | ||||
|           outline | ||||
|           color="theme" | ||||
|           @click="$emit('next')" | ||||
|         > | ||||
|           {{ $t('wizard.skip') }} | ||||
|         </base-button> | ||||
|       </div> | ||||
|       <component | ||||
|         :is="mail_driver" | ||||
|         :config-data="mailConfigData" | ||||
|         :loading="loading" | ||||
|         :mail-drivers="mail_drivers" | ||||
|         @on-change-driver="(val) => mail_driver = mailConfigData.mail_driver = val" | ||||
|         @submit-data="next" | ||||
|       /> | ||||
|     </form> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import Ls from '../../services/ls' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
| import Smtp from './mailDriver/Smtp' | ||||
| import Mailgun from './mailDriver/Mailgun' | ||||
| import Sparkpost from './mailDriver/Sparkpost' | ||||
| import Ses from './mailDriver/Ses' | ||||
| import Basic from './mailDriver/Basic' | ||||
| import Mandrill from './mailDriver/Mandrill' | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|     MultiSelect, | ||||
|     Smtp, | ||||
|     Mailgun, | ||||
|     Sparkpost, | ||||
|     Ses, | ||||
|     sendmail: Basic, | ||||
|     mail: Basic, | ||||
|     Mandrill | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: 'smtp', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_username: null, | ||||
|         mail_password: null, | ||||
|         mail_encryption: null | ||||
|         mail_driver: 'smtp' | ||||
|       }, | ||||
|       mail_driver: 'smtp', | ||||
|       loading: false, | ||||
|       mail_drivers: [] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_username: { | ||||
|         required | ||||
|       }, | ||||
|       mail_password: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   created () { | ||||
|     this.getMailDrivers() | ||||
|   }, | ||||
| @ -195,14 +60,10 @@ export default { | ||||
|         this.loading = false | ||||
|       } | ||||
|     }, | ||||
|     async next () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (this.$v.mailConfigData.$invalid) { | ||||
|         return true | ||||
|       } | ||||
|     async next (mailConfigData) { | ||||
|       this.loading = true | ||||
|       try { | ||||
|         let response = await window.axios.post('/api/admin/onboarding/environment/mail', this.mailConfigData) | ||||
|         let response = await window.axios.post('/api/settings/environment/mail', mailConfigData) | ||||
|         if (response.data.success) { | ||||
|           this.$emit('next') | ||||
|           window.toastr['success'](this.$t('wizard.success.' + response.data.success)) | ||||
|  | ||||
							
								
								
									
										156
									
								
								resources/assets/js/views/wizard/mailDriver/Basic.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								resources/assets/js/views/wizard/mailDriver/Basic.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,156 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <!-- <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> --> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										278
									
								
								resources/assets/js/views/wizard/mailDriver/Mailgun.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										278
									
								
								resources/assets/js/views/wizard/mailDriver/Mailgun.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,278 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.domain') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_domain.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_domain" | ||||
|           type="text" | ||||
|           name="db_name" | ||||
|           @input="$v.mailConfigData.mail_mailgun_domain.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_domain.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_domain.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.mailgin_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_mailgun_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.endpoint') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mailgun_endpoint.$error" | ||||
|           v-model.trim="mailConfigData.mail_mailgun_endpoint" | ||||
|           type="text" | ||||
|           name="mail_mailgun_endpoint" | ||||
|           @input="$v.mailConfigData.mail_mailgun_endpoint.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mailgun_endpoint.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_endpoint.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_mailgun_endpoint.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_mailgun_domain: '', | ||||
|         mail_mailgun_secret: '', | ||||
|         mail_mailgun_endpoint: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_mailgun_domain: { | ||||
|         required | ||||
|       }, | ||||
|       mail_mailgun_endpoint: { | ||||
|         required | ||||
|       }, | ||||
|       mail_mailgun_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										230
									
								
								resources/assets/js/views/wizard/mailDriver/Mandrill.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								resources/assets/js/views/wizard/mailDriver/Mandrill.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,230 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.mandrill_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_mandrill_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_mandrill_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_mandrill_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_mandrill_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_mandrill_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_mandrill_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_mandrill_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										253
									
								
								resources/assets/js/views/wizard/mailDriver/Ses.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								resources/assets/js/views/wizard/mailDriver/Ses.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,253 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.ses_key') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_ses_key.$error" | ||||
|           v-model.trim="mailConfigData.mail_ses_key" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.mail_ses_key.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_ses_key.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_ses_key.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.ses_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_ses_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_ses_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_ses_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_ses_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_ses_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_ses_key: '', | ||||
|         mail_ses_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_ses_key: { | ||||
|         required | ||||
|       }, | ||||
|       mail_ses_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										253
									
								
								resources/assets/js/views/wizard/mailDriver/Smtp.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								resources/assets/js/views/wizard/mailDriver/Smtp.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,253 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.username') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_username.$error" | ||||
|           v-model.trim="mailConfigData.mail_username" | ||||
|           type="text" | ||||
|           name="db_name" | ||||
|           @input="$v.mailConfigData.mail_username.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_username.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_username.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.password') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_password.$error" | ||||
|           v-model.trim="mailConfigData.mail_password" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_password.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_password.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_password.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_username: '', | ||||
|         mail_password: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_username: { | ||||
|         required | ||||
|       }, | ||||
|       mail_password: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										233
									
								
								resources/assets/js/views/wizard/mailDriver/Sparkpost.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								resources/assets/js/views/wizard/mailDriver/Sparkpost.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,233 @@ | ||||
| <template> | ||||
|   <form @submit.prevent="saveEmailConfig()"> | ||||
|     <div class="row"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.driver') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model="mailConfigData.mail_driver" | ||||
|           :invalid="$v.mailConfigData.mail_driver.$error" | ||||
|           :options="mailDrivers" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="onChangeDriver" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_driver.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.host') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_host.$error" | ||||
|           v-model.trim="mailConfigData.mail_host" | ||||
|           type="text" | ||||
|           name="mail_host" | ||||
|           @input="$v.mailConfigData.mail_host.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_host.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_host.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.port') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_port.$error" | ||||
|           v-model.trim="mailConfigData.mail_port" | ||||
|           type="text" | ||||
|           name="mail_port" | ||||
|           @input="$v.mailConfigData.mail_port.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_port.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.encryption') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-select | ||||
|           v-model.trim="mailConfigData.mail_encryption" | ||||
|           :invalid="$v.mailConfigData.mail_encryption.$error" | ||||
|           :options="encryptions" | ||||
|           :searchable="true" | ||||
|           :show-labels="false" | ||||
|           @input="$v.mailConfigData.mail_encryption.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_encryption.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_mail') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_mail.$error" | ||||
|           v-model.trim="mailConfigData.from_mail" | ||||
|           type="text" | ||||
|           name="from_mail" | ||||
|           @input="$v.mailConfigData.from_mail.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_mail.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|           <span v-if="!$v.mailConfigData.from_mail.numeric" class="text-danger"> | ||||
|             {{ $tc('validation.numbers_only') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.from_name') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.from_name.$error" | ||||
|           v-model.trim="mailConfigData.from_name" | ||||
|           type="text" | ||||
|           name="name" | ||||
|           @input="$v.mailConfigData.from_name.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.from_name.$error"> | ||||
|           <span v-if="!$v.mailConfigData.from_name.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="row my-2"> | ||||
|       <div class="col-md-6 my-2"> | ||||
|         <label class="form-label">{{ $t('wizard.mail.sparkpost_secret') }}</label> | ||||
|         <span class="text-danger"> *</span> | ||||
|         <base-input | ||||
|           :invalid="$v.mailConfigData.mail_sparkpost_secret.$error" | ||||
|           v-model.trim="mailConfigData.mail_sparkpost_secret" | ||||
|           type="password" | ||||
|           name="name" | ||||
|           show-password | ||||
|           @input="$v.mailConfigData.mail_sparkpost_secret.$touch()" | ||||
|         /> | ||||
|         <div v-if="$v.mailConfigData.mail_sparkpost_secret.$error"> | ||||
|           <span v-if="!$v.mailConfigData.mail_sparkpost_secret.required" class="text-danger"> | ||||
|             {{ $tc('validation.required') }} | ||||
|           </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="save" | ||||
|       color="theme" | ||||
|       type="submit" | ||||
|     > | ||||
|       {{ $t('general.save') }} | ||||
|     </base-button> | ||||
|   </form> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| const { required, email, numeric } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   props: { | ||||
|     configData: { | ||||
|       type: Object, | ||||
|       require: true, | ||||
|       default: Object | ||||
|     }, | ||||
|     loading: { | ||||
|       type: Boolean, | ||||
|       require: true, | ||||
|       default: false | ||||
|     }, | ||||
|     mailDrivers: { | ||||
|       type: Array, | ||||
|       require: true, | ||||
|       default: Array | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_sparkpost_secret: '', | ||||
|         mail_encryption: 'tls', | ||||
|         from_mail: '', | ||||
|         from_name: '' | ||||
|       }, | ||||
|       encryptions: ['tls', 'ssl', 'starttls'] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
|     mailConfigData: { | ||||
|       mail_driver: { | ||||
|         required | ||||
|       }, | ||||
|       mail_host: { | ||||
|         required | ||||
|       }, | ||||
|       mail_port: { | ||||
|         required, | ||||
|         numeric | ||||
|       }, | ||||
|       mail_sparkpost_secret: { | ||||
|         required | ||||
|       }, | ||||
|       mail_encryption: { | ||||
|         required | ||||
|       }, | ||||
|       from_mail: { | ||||
|         required, | ||||
|         email | ||||
|       }, | ||||
|       from_name: { | ||||
|         required | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     for (const key in this.mailConfigData) { | ||||
|       if (this.configData.hasOwnProperty(key)) { | ||||
|         this.mailConfigData[key] = this.configData[key] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
|       if (!this.$v.mailConfigData.$invalid) { | ||||
|         this.$emit('submit-data', this.mailConfigData) | ||||
|       } | ||||
|  | ||||
|       return false | ||||
|     }, | ||||
|     onChangeDriver () { | ||||
|       this.$v.mailConfigData.mail_driver.$touch() | ||||
|       this.$emit('on-change-driver', this.mailConfigData.mail_driver) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
		Reference in New Issue
	
	Block a user