mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 05:31:10 -04:00 
			
		
		
		
	Merge branch 'master' of https://gitlab.com/mohit.panjvani/crater-web into fix-view-status-action
This commit is contained in:
		| @ -1,9 +1,29 @@ | ||||
| <template> | ||||
|   <button :type="type" :class="btnClass" :disabled="disabled" @click="handleClick"> | ||||
|     <font-awesome-icon v-if="icon && !loading && !rightIcon" :class="iconClass" :icon="icon" class="vue-icon icon-left" /> | ||||
|     <font-awesome-icon v-if="loading" :class="iconClass" icon="spinner" class="fa-spin"/> | ||||
|   <button | ||||
|     :type="type" | ||||
|     :class="btnClass" | ||||
|     :disabled="disabled || loading" | ||||
|     @click="handleClick" | ||||
|   > | ||||
|     <font-awesome-icon | ||||
|       v-if="icon && !loading && !rightIcon" | ||||
|       :class="iconClass" | ||||
|       :icon="icon" | ||||
|       class="vue-icon icon-left" | ||||
|     /> | ||||
|     <font-awesome-icon | ||||
|       v-if="loading" | ||||
|       :class="iconClass" | ||||
|       icon="spinner" | ||||
|       class="fa-spin" | ||||
|     /> | ||||
|     <slot /> | ||||
|     <font-awesome-icon v-if="icon && !loading && rightIcon" :class="iconClass" :icon="icon" class="vue-icon icon-right" /> | ||||
|     <font-awesome-icon | ||||
|       v-if="icon && !loading && rightIcon" | ||||
|       :class="iconClass" | ||||
|       :icon="icon" | ||||
|       class="vue-icon icon-right" | ||||
|     /> | ||||
|   </button> | ||||
| </template> | ||||
|  | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|     <input | ||||
|       ref="baseInput" | ||||
|       v-model="inputValue" | ||||
|       :type="type" | ||||
|       :type="toggleType" | ||||
|       :disabled="disabled" | ||||
|       :readonly="readOnly" | ||||
|       :name="name" | ||||
| @ -19,6 +19,9 @@ | ||||
|       @keydown="handleKeyDownEnter" | ||||
|       @blur="handleFocusOut" | ||||
|     > | ||||
|     <div v-if="showPassword && isAlignLeftIcon" style="cursor: pointer" @click="showPass = !showPass" > | ||||
|       <font-awesome-icon :icon="!showPass ?'eye-slash': 'eye'" class="right-icon" /> | ||||
|     </div> | ||||
|     <font-awesome-icon v-if="icon && !isAlignLeftIcon" :icon="icon" class="right-icon" /> | ||||
|   </div> | ||||
| </template> | ||||
| @ -77,12 +80,17 @@ export default { | ||||
|     autocomplete: { | ||||
|       type: String, | ||||
|       default: 'on' | ||||
|     }, | ||||
|     showPassword: { | ||||
|       type: Boolean, | ||||
|       default: false | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       inputValue: this.value, | ||||
|       focus: false | ||||
|       focus: false, | ||||
|       showPass: false | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
| @ -94,6 +102,12 @@ export default { | ||||
|         return true | ||||
|       } | ||||
|       return false | ||||
|     }, | ||||
|     toggleType () { | ||||
|       if (this.showPass) { | ||||
|         return 'text' | ||||
|       } | ||||
|       return this.type | ||||
|     } | ||||
|   }, | ||||
|   watch: { | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|     <form action="" @submit.prevent="submitCategoryData"> | ||||
|       <div class="card-body"> | ||||
|         <div class="form-group row"> | ||||
|           <label class="col-sm-4 col-form-label">{{ $t('expenses.category') }}<span class="required text-danger">*</span></label> | ||||
|           <label class="col-sm-4 col-form-label input-label">{{ $t('expenses.category') }}<span class="required text-danger">*</span></label> | ||||
|           <div class="col-sm-7"> | ||||
|             <base-input | ||||
|               ref="name" | ||||
|  | ||||
| @ -7,7 +7,7 @@ | ||||
|           <tab id="basic-home" :name="$t('customers.basic_info')"> | ||||
|             <div class="basic-info"> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.display_name') }} <span class="required">*</span></label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.display_name') }} <span class="required">*</span></label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     ref="name" | ||||
| @ -25,7 +25,7 @@ | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.primary_display_name') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.primary_display_name') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="formData.contact_name" | ||||
| @ -34,7 +34,7 @@ | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('login.email') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('login.email') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     :invalid="$v.formData.email.$error" | ||||
| @ -49,7 +49,7 @@ | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $tc('settings.currencies.currency') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $tc('settings.currencies.currency') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="currency" | ||||
| @ -64,7 +64,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.phone') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.phone') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     :invalid="$v.formData.phone.$error" | ||||
| @ -79,7 +79,7 @@ | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.website') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.website') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="formData.website" | ||||
| @ -100,7 +100,7 @@ | ||||
|           <tab id="basic-profile" :name="$t('customers.billing_address')"> | ||||
|             <div class="basic-info"> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.name') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.name') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="billing.name" | ||||
| @ -110,7 +110,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.phone') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.phone') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     :invalid="$v.billing.phone.$error" | ||||
| @ -126,7 +126,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.address') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.address') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-text-area | ||||
|                     v-model="billing.address_street_1" | ||||
| @ -155,7 +155,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.country') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.country') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="billingCountry" | ||||
| @ -171,7 +171,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.state') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.state') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="billingState" | ||||
| @ -187,7 +187,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.city') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.city') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="billingCity" | ||||
| @ -213,7 +213,7 @@ | ||||
|               </div> --> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.zip_code') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.zip_code') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="billing.zip" | ||||
| @ -236,7 +236,7 @@ | ||||
|                 </div> | ||||
|               </div> | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.name') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.name') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="shipping.name" | ||||
| @ -246,7 +246,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.phone') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.phone') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     :invalid="$v.shipping.phone.$error" | ||||
| @ -262,7 +262,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.address') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.address') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-text-area | ||||
|                     v-model="shipping.address_street_1" | ||||
| @ -291,7 +291,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.country') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.country') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="shippingCountry" | ||||
| @ -307,7 +307,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.state') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.state') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="shippingState" | ||||
| @ -323,7 +323,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.city') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.city') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="shippingCity" | ||||
| @ -339,7 +339,7 @@ | ||||
|               </div> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">{{ $t('customers.zip_code') }}</label> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.zip_code') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="shipping.zip" | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|     <form action="" @submit.prevent="submitItemData"> | ||||
|       <div class="card-body"> | ||||
|         <div class="form-group row"> | ||||
|           <label class="col-sm-4 col-form-label"> | ||||
|           <label class="col-sm-4 col-form-label input-label"> | ||||
|             {{ $t('items.name') }}<span class="required">*</span> | ||||
|           </label> | ||||
|           <div class="col-sm-7"> | ||||
| @ -22,7 +22,7 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group row"> | ||||
|           <label class="col-sm-4 col-form-label">{{ $t('items.price') }}<span class="required">*</span></label> | ||||
|           <label class="col-sm-4 col-form-label input-label">{{ $t('items.price') }}<span class="required">*</span></label> | ||||
|           <div class="col-sm-7"> | ||||
|             <div class="base-input"> | ||||
|               <money | ||||
| @ -41,7 +41,7 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group row"> | ||||
|           <label class="col-sm-4 col-form-label">{{ $t('items.unit') }}</label> | ||||
|           <label class="col-sm-4 col-form-label input-label">{{ $t('items.unit') }}</label> | ||||
|           <div class="col-sm-7"> | ||||
|             <base-select | ||||
|               v-model="formData.unit" | ||||
| @ -54,7 +54,7 @@ | ||||
|         </div> | ||||
|  | ||||
|         <div class="form-group row"> | ||||
|           <label class="col-sm-4 col-form-label">{{ $t('items.description') }}</label> | ||||
|           <label class="col-sm-4 col-form-label input-label">{{ $t('items.description') }}</label> | ||||
|           <div class="col-sm-7"> | ||||
|             <base-text-area | ||||
|               v-model="formData.description" | ||||
| @ -121,7 +121,8 @@ export default { | ||||
|         { name: 'kg', value: 'kg' }, | ||||
|         { name: 'km', value: 'km' }, | ||||
|         { name: 'lb', value: 'lb' }, | ||||
|         { name: 'mg', value: 'mg' } | ||||
|         { name: 'mg', value: 'mg' }, | ||||
|         { name: 'pc', value: 'pc' } | ||||
|       ], | ||||
|       formData: { | ||||
|         name: null, | ||||
|  | ||||
| @ -529,7 +529,8 @@ export default { | ||||
|       preferences: 'Preferences', | ||||
|       notifications: 'Notifications', | ||||
|       tax_types: 'Tax Types', | ||||
|       expense_category: 'Expense Categories' | ||||
|       expense_category: 'Expense Categories', | ||||
|       update_app: 'Update App' | ||||
|     }, | ||||
|     title: 'Settings', | ||||
|     setting: 'Settings | Settings', | ||||
| @ -611,8 +612,6 @@ export default { | ||||
|       estimate_viewed_desc: 'When your customer views the estimate sent via crater dashboard.', | ||||
|       save: 'Save', | ||||
|       email_save_message: 'Email saved successfully', | ||||
|       // invoice_viewed_message: 'Invoice viewed updated successfully', | ||||
|       // estimate_viewed_message: 'Estimate viewed updated successfully', | ||||
|       please_enter_email: 'Please Enter Email' | ||||
|     }, | ||||
|     tax_types: { | ||||
| @ -622,7 +621,6 @@ export default { | ||||
|       add_new_tax: 'Add New Tax', | ||||
|       tax_settings: 'Tax Settings', | ||||
|       tax_per_item: 'Tax Per Item', | ||||
|       // tax_per_item_switch: 'Tax Per Item updated successfully', | ||||
|       tax_name: 'Tax Name', | ||||
|       compound_tax: 'Compound Tax', | ||||
|       percent: 'Percent', | ||||
| @ -660,11 +658,15 @@ export default { | ||||
|       preference: 'Preference | Preferences', | ||||
|       general_settings: 'Default preferences for the system.', | ||||
|       updated_message: 'Preferences updated successfully', | ||||
|       // set_discount_per_item_message: 'Discount set per item updated successfully', | ||||
|       select_language: 'select language', | ||||
|       select_time_zone: 'select Time Zone', | ||||
|       select_date_formate: 'select Date Formate', | ||||
|       select_financial_year: 'select financial year' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: 'Update App', | ||||
|       description: 'update app description', | ||||
|       update: 'Update' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
| @ -735,7 +737,8 @@ export default { | ||||
|       migrate_failed: 'Migrate Failed', | ||||
|       database_variables_save_error: 'Unable to connect to the DB with Provided Values.', | ||||
|       mail_variables_save_error: 'Email configuration failed.', | ||||
|       connection_failed: 'Database Connection Failed' | ||||
|       connection_failed: 'Database connection failed', | ||||
|       database_should_be_empty: 'Database should be empty' | ||||
|     }, | ||||
|     success: { | ||||
|       mail_variables_save_successfully: 'Email configured successfully', | ||||
|  | ||||
| @ -529,7 +529,8 @@ export default { | ||||
|       preferences: 'Preferencias', | ||||
|       notifications: 'Notificaciones', | ||||
|       tax_types: 'Tipos de impuestos', | ||||
|       expense_category: 'Categorías de gastos' | ||||
|       expense_category: 'Categorías de gastos', | ||||
|       update_app: 'Actualizar aplicación' | ||||
|     }, | ||||
|     title: 'Configuraciones', | ||||
|     setting: 'Configuraciones | Configuraciones', | ||||
| @ -556,6 +557,16 @@ export default { | ||||
|       action: 'Acción', | ||||
|       add_currency: 'Agregar moneda' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Host de correo', | ||||
|       port: 'Puerto de correo', | ||||
|       driver: 'Conductor de correo', | ||||
|       password: 'Contraseña de correo', | ||||
|       username: 'Nombre de usuario de correo', | ||||
|       mail_config: 'Configuración de correo', | ||||
|       encryption: 'Cifrado de correo', | ||||
|       mail_config_desc: 'Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión.' | ||||
|     }, | ||||
|     pdf: { | ||||
|       title: 'Configuración de PDF', | ||||
|       footer_text: 'Texto de pie de página', | ||||
| @ -651,6 +662,11 @@ export default { | ||||
|       select_time_zone: 'selecciona la zona horaria', | ||||
|       select_date_formate: 'seleccione formato de fecha', | ||||
|       select_financial_year: 'seleccione año financiero' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: 'Actualizar aplicación', | ||||
|       description: 'actualizar la descripción de la aplicación', | ||||
|       update: 'Actualizar' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
| @ -749,7 +765,7 @@ export default { | ||||
|     numbers_only: 'Solo numeros.', | ||||
|     characters_only: 'Solo personajes.', | ||||
|     password_incorrect: 'Las contraseñas deben ser idénticas', | ||||
|     password_length: 'La contraseña debe tener 6 caracteres de longitud.', | ||||
|     password_length: 'La contraseña debe tener 5 caracteres de longitud.', | ||||
|     qty_must_greater_than_zero: 'La cantidad debe ser mayor que cero.', | ||||
|     price_greater_than_zero: 'El precio debe ser mayor que cero.', | ||||
|     payment_greater_than_zero: 'El pago debe ser mayor que cero.', | ||||
|  | ||||
| @ -529,7 +529,8 @@ export default { | ||||
|       preferences: 'Préférences', | ||||
|       notifications: 'Les notifications', | ||||
|       tax_types: 'Types de taxe', | ||||
|       expense_category: 'Catégories de dépenses' | ||||
|       expense_category: 'Catégories de dépenses', | ||||
|       update_app: "Mise à jour de l'application" | ||||
|     }, | ||||
|     title: 'Paramètres', | ||||
|     setting: 'Paramètres | Paramètres', | ||||
| @ -554,7 +555,17 @@ export default { | ||||
|       right: 'Droite', | ||||
|       left: 'La gauche', | ||||
|       action: 'action', | ||||
|       add_currency: 'Ajouter une devise', | ||||
|       add_currency: 'Ajouter une devise' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Mail Host', | ||||
|       port: 'Port mail', | ||||
|       driver: 'Pilote de courrier', | ||||
|       password: 'Mot de passe mail', | ||||
|       username: "Mail Nom d'utilisateur", | ||||
|       mail_config: 'Configuration du courrier', | ||||
|       encryption: 'Chiffrement du courrier', | ||||
|       mail_config_desc: "Les détails ci-dessous seront utilisés pour mettre à jour l'environnement de messagerie. Aussi, vous pouvez modifier les détails à tout moment après la connexion." | ||||
|     }, | ||||
|     pdf: { | ||||
|       title: 'Paramètre PDF', | ||||
| @ -654,6 +665,11 @@ export default { | ||||
|       select_time_zone: 'sélectionnez le fuseau horaire', | ||||
|       select_date_formate: 'sélectionnez Date Formate', | ||||
|       select_financial_year: 'sélectionner lexercice' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: "Mise à jour de l'application", | ||||
|       description: "mettre à jour la description de l'application", | ||||
|       update: 'Mise à jour' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
| @ -752,7 +768,7 @@ export default { | ||||
|     numbers_only: 'Chiffres uniquement.', | ||||
|     characters_only: 'Caractères seulement.', | ||||
|     password_incorrect: 'Les mots de passe doivent être identiques', | ||||
|     password_length: 'Le mot de passe doit comporter 6 caractères.', | ||||
|     password_length: 'Le mot de passe doit comporter 5 caractères.', | ||||
|     qty_must_greater_than_zero: 'La quantité doit être supérieure à zéro.', | ||||
|     price_greater_than_zero: 'Le prix doit être supérieur à zéro.', | ||||
|     payment_greater_than_zero: 'Le paiement doit être supérieur à zéro.', | ||||
|  | ||||
| @ -72,6 +72,7 @@ import UserProfile from './views/settings/UserProfile.vue' | ||||
| import TaxTypes from './views/settings/TaxTypes.vue' | ||||
| import ExpenseCategory from './views/settings/ExpenseCategory.vue' | ||||
| import MailConfig from './views/settings/MailConfig.vue' | ||||
| import UpdateApp from './views/settings/UpdateApp.vue' | ||||
|  | ||||
| import Wizard from './views/wizard/Index.vue' | ||||
|  | ||||
| @ -337,6 +338,11 @@ const routes = [ | ||||
|             path: 'notifications', | ||||
|             name: 'notifications', | ||||
|             component: Notifications | ||||
|           }, | ||||
|           { | ||||
|             path: 'update-app', | ||||
|             name: 'updateapp', | ||||
|             component: UpdateApp | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|  | ||||
| @ -98,7 +98,7 @@ export default { | ||||
|       }, | ||||
|       password: { | ||||
|         required, | ||||
|         minLength: minLength(8) | ||||
|         minLength: minLength(5) | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @ -168,7 +168,7 @@ | ||||
|           > | ||||
|             <table-column :label="$t('dashboard.recent_invoices_card.due_on')" show="formattedDueDate" /> | ||||
|             <table-column :label="$t('dashboard.recent_invoices_card.customer')" show="user.name" /> | ||||
|             <table-column :label="$t('dashboard.recent_invoices_card.amount_due')" sort-as="due_amount"> | ||||
|             <table-column :label="$t('dashboard.recent_invoices_card.amount_due')" show="due_amount" sort-as="due_amount"> | ||||
|               <template slot-scope="row"> | ||||
|                 <span>{{ $t('dashboard.recent_invoices_card.amount_due') }}</span> | ||||
|                 <div v-html="$utils.formatMoney(row.due_amount, row.user.currency)"/> | ||||
| @ -242,7 +242,7 @@ | ||||
|           > | ||||
|             <table-column :label="$t('dashboard.recent_estimate_card.date')" show="formattedExpiryDate" /> | ||||
|             <table-column :label="$t('dashboard.recent_estimate_card.customer')" show="user.name" /> | ||||
|             <table-column :label="$t('dashboard.recent_estimate_card.amount_due')" sort-as="total"> | ||||
|             <table-column :label="$t('dashboard.recent_estimate_card.amount_due')" show="total" sort-as="total"> | ||||
|               <template slot-scope="row"> | ||||
|                 <span>{{ $t('dashboard.recent_estimate_card.amount_due') }}</span> | ||||
|                 <div v-html="$utils.formatMoney(row.total, row.user.currency)"/> | ||||
|  | ||||
| @ -553,6 +553,8 @@ export default { | ||||
|         if (response.data) { | ||||
|           this.selectCustomer(response.data.estimate.user_id) | ||||
|           this.newEstimate = response.data.estimate | ||||
|           this.newEstimate.estimate_date = moment(response.data.estimate.estimate_date, 'YYYY-MM-DD').toString() | ||||
|           this.newEstimate.expiry_date = moment(response.data.estimate.expiry_date, 'YYYY-MM-DD').toString() | ||||
|           this.discountPerItem = response.data.discount_per_item | ||||
|           this.taxPerItem = response.data.tax_per_item | ||||
|           this.selectedCurrency = this.defaultCurrency | ||||
|  | ||||
| @ -261,13 +261,13 @@ | ||||
|                   {{ $t('estimates.send_estimate') }} | ||||
|                 </a> | ||||
|               </v-dropdown-item> | ||||
|               <v-dropdown-item v-if="row.status === 'DRAFT' || row.status === 'REJECTED'"> | ||||
|               <v-dropdown-item v-if="row.status !== 'ACCEPTED'"> | ||||
|                 <a class="dropdown-item" href="#" @click.self="onMarkAsAccepted(row.id)"> | ||||
|                   <font-awesome-icon icon="check-circle" class="dropdown-item-icon" /> | ||||
|                   {{ $t('estimates.mark_as_accepted') }} | ||||
|                 </a> | ||||
|               </v-dropdown-item> | ||||
|               <v-dropdown-item v-if="row.status === 'ACCEPTED' || row.status === 'DRAFT'"> | ||||
|               <v-dropdown-item v-if="row.status !== 'REJECTED'"> | ||||
|                 <a class="dropdown-item" href="#" @click.self="onMarkAsRejected(row.id)"> | ||||
|                   <font-awesome-icon icon="times-circle" class="dropdown-item-icon" /> | ||||
|                   {{ $t('estimates.mark_as_rejected') }} | ||||
| @ -514,8 +514,8 @@ export default { | ||||
|         icon: '/assets/icon/envelope-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (willDelete) => { | ||||
|         if (willDelete) { | ||||
|       }).then(async (willConvertInToinvoice) => { | ||||
|         if (willConvertInToinvoice) { | ||||
|           let res = await this.convertToInvoice(id) | ||||
|           if (res.data) { | ||||
|             window.toastr['success'](this.$t('estimates.conversion_message')) | ||||
| @ -562,8 +562,8 @@ export default { | ||||
|         icon: '/assets/icon/check-circle-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (willDelete) => { | ||||
|         if (willDelete) { | ||||
|       }).then(async (willMarkAsSent) => { | ||||
|         if (willMarkAsSent) { | ||||
|           const data = { | ||||
|             id: id | ||||
|           } | ||||
| @ -582,8 +582,8 @@ export default { | ||||
|         icon: '/assets/icon/paper-plane-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (sendEstimate) => { | ||||
|         if (sendEstimate) { | ||||
|       }).then(async (willSendEstimate) => { | ||||
|         if (willSendEstimate) { | ||||
|           const data = { | ||||
|             id: id | ||||
|           } | ||||
|  | ||||
| @ -222,12 +222,22 @@ export default { | ||||
|       return true | ||||
|     }, | ||||
|     async onMarkAsSent () { | ||||
|       this.isRequestOnGoing = true | ||||
|       let response = await this.markAsSent({id: this.estimate.id}) | ||||
|       this.isRequestOnGoing = false | ||||
|       if (response.data) { | ||||
|         window.toastr['success'](this.$tc('estimates.mark_as_sent')) | ||||
|       } | ||||
|       swal({ | ||||
|         title: this.$t('general.are_you_sure'), | ||||
|         text: this.$t('estimates.confirm_mark_as_sent'), | ||||
|         icon: '/assets/icon/check-circle-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (willMarkAsSent) => { | ||||
|         if (willMarkAsSent) { | ||||
|           this.isRequestOnGoing = true | ||||
|           let response = await this.markAsSent({id: this.estimate.id}) | ||||
|           this.isRequestOnGoing = false | ||||
|           if (response.data) { | ||||
|             window.toastr['success'](this.$tc('estimates.mark_as_sent')) | ||||
|           } | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     async removeEstimate (id) { | ||||
|       this.selectEstimate([parseInt(id)]) | ||||
| @ -235,7 +245,7 @@ export default { | ||||
|       swal({ | ||||
|         title: 'Deleted', | ||||
|         text: 'you will not be able to recover this estimate!', | ||||
|         icon: 'error', | ||||
|         icon: '/assets/icon/trash-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (willDelete) => { | ||||
|  | ||||
| @ -554,6 +554,8 @@ export default { | ||||
|         if (response.data) { | ||||
|           this.selectCustomer(response.data.invoice.user_id) | ||||
|           this.newInvoice = response.data.invoice | ||||
|           this.newInvoice.invoice_date = moment(response.data.invoice.invoice_date, 'YYYY-MM-DD').toString() | ||||
|           this.newInvoice.due_date = moment(response.data.invoice.due_date, 'YYYY-MM-DD').toString() | ||||
|           this.discountPerItem = response.data.discount_per_item | ||||
|           this.taxPerItem = response.data.tax_per_item | ||||
|           this.selectedCurrency = this.defaultCurrency | ||||
|  | ||||
| @ -286,7 +286,7 @@ export default { | ||||
|       swal({ | ||||
|         title: 'Deleted', | ||||
|         text: 'you will not be able to recover this invoice!', | ||||
|         icon: 'error', | ||||
|         icon: '/assets/icon/trash-solid.svg', | ||||
|         buttons: true, | ||||
|         dangerMode: true | ||||
|       }).then(async (willDelete) => { | ||||
|  | ||||
| @ -112,7 +112,8 @@ export default { | ||||
|         { name: 'kg', value: 'kg' }, | ||||
|         { name: 'km', value: 'km' }, | ||||
|         { name: 'lb', value: 'lb' }, | ||||
|         { name: 'mg', value: 'mg' } | ||||
|         { name: 'mg', value: 'mg' }, | ||||
|         { name: 'pc', value: 'pc' } | ||||
|       ], | ||||
|       formData: { | ||||
|         name: '', | ||||
|  | ||||
| @ -245,7 +245,8 @@ export default { | ||||
|         { name: 'kg', value: 'kg' }, | ||||
|         { name: 'km', value: 'km' }, | ||||
|         { name: 'lb', value: 'lb' }, | ||||
|         { name: 'mg', value: 'mg' } | ||||
|         { name: 'mg', value: 'mg' }, | ||||
|         { name: 'pc', value: 'pc' } | ||||
|       ], | ||||
|       isRequestOngoing: true, | ||||
|       filtersApplied: false, | ||||
|  | ||||
| @ -196,7 +196,14 @@ export default { | ||||
|       return true | ||||
|     }, | ||||
|     downloadReport () { | ||||
|       this.url += '&download=true' | ||||
|       if (!this.getReports()) { | ||||
|         return false | ||||
|       } | ||||
|       if (navigator.appVersion.indexOf('Mac') !== -1) { | ||||
|         this.url += '&download=true' | ||||
|       } else { | ||||
|         window.open(this.getReportUrl + '&download=true') | ||||
|       } | ||||
|       setTimeout(() => { | ||||
|         this.url = `${this.siteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}` | ||||
|       }, 200) | ||||
|  | ||||
| @ -200,7 +200,14 @@ export default { | ||||
|       return true | ||||
|     }, | ||||
|     downloadReport () { | ||||
|       this.url += '&download=true' | ||||
|       if (!this.getReports()) { | ||||
|         return false | ||||
|       } | ||||
|       if (navigator.appVersion.indexOf('Mac') !== -1) { | ||||
|         this.url += '&download=true' | ||||
|       } else { | ||||
|         window.open(this.getReportUrl + '&download=true') | ||||
|       } | ||||
|       setTimeout(() => { | ||||
|         this.url = `${this.siteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}` | ||||
|       }, 200) | ||||
|  | ||||
| @ -238,7 +238,14 @@ export default { | ||||
|       return true | ||||
|     }, | ||||
|     downloadReport () { | ||||
|       this.url += '&download=true' | ||||
|       if (!this.getReports()) { | ||||
|         return false | ||||
|       } | ||||
|       if (navigator.appVersion.indexOf('Mac') !== -1) { | ||||
|         this.url += '&download=true' | ||||
|       } else { | ||||
|         window.open(this.getReportUrl + '&download=true') | ||||
|       } | ||||
|       setTimeout(() => { | ||||
|         if (this.selectedType === 'By Customer') { | ||||
|           this.url = `${this.customerSiteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}` | ||||
|  | ||||
| @ -189,14 +189,21 @@ export default { | ||||
|       this.$v.formData.$touch() | ||||
|  | ||||
|       if (this.$v.$invalid) { | ||||
|         return true | ||||
|         return false | ||||
|       } | ||||
|  | ||||
|       this.url = `${this.siteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}` | ||||
|       return true | ||||
|     }, | ||||
|     downloadReport () { | ||||
|       this.url += '&download=true' | ||||
|       if (!this.getReports()) { | ||||
|         return false | ||||
|       } | ||||
|       if (navigator.appVersion.indexOf('Mac') !== -1) { | ||||
|         this.url += '&download=true' | ||||
|       } else { | ||||
|         window.open(this.url + '&download=true') | ||||
|       } | ||||
|       setTimeout(() => { | ||||
|         this.url = `${this.siteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}` | ||||
|       }, 200) | ||||
|  | ||||
| @ -66,8 +66,9 @@ | ||||
|             <base-input | ||||
|               :invalid="$v.mailConfigData.mail_password.$error" | ||||
|               v-model.trim="mailConfigData.mail_password" | ||||
|               type="mail_password" | ||||
|               type="password" | ||||
|               name="name" | ||||
|               show-password | ||||
|               @input="$v.mailConfigData.mail_password.$touch()" | ||||
|             /> | ||||
|             <div v-if="$v.mailConfigData.mail_password.$error"> | ||||
| @ -141,12 +142,12 @@ export default { | ||||
|   data () { | ||||
|     return { | ||||
|       mailConfigData: { | ||||
|         mail_driver: 'smtp', | ||||
|         mail_host: 'mailtrap.io', | ||||
|         mail_port: 2525, | ||||
|         mail_username: 'cc3c64516febd4', | ||||
|         mail_password: 'e6a0176301f587', | ||||
|         mail_encryption: 'tls' | ||||
|         mail_driver: '', | ||||
|         mail_host: '', | ||||
|         mail_port: null, | ||||
|         mail_username: '', | ||||
|         mail_password: '', | ||||
|         mail_encryption: '' | ||||
|       }, | ||||
|       loading: false, | ||||
|       mail_drivers: [] | ||||
| @ -176,18 +177,22 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     // this.getMailDrivers() | ||||
|     this.loadData() | ||||
|   }, | ||||
|   methods: { | ||||
|     async getMailDrivers () { | ||||
|     async loadData () { | ||||
|       this.loading = true | ||||
|  | ||||
|       let response = await window.axios.get('/api/admin/onboarding/environment/mail') | ||||
|       let mailDrivers = await window.axios.get('/api/settings/environment/mail') | ||||
|       let mailData = await window.axios.get('/api/settings/environment/mail-env') | ||||
|  | ||||
|       if (response.data) { | ||||
|         this.mail_drivers = response.data | ||||
|         this.loading = false | ||||
|       if (mailDrivers.data) { | ||||
|         this.mail_drivers = mailDrivers.data | ||||
|       } | ||||
|       if (mailData.data) { | ||||
|         this.mailConfigData = mailData.data | ||||
|       } | ||||
|       this.loading = false | ||||
|     }, | ||||
|     async saveEmailConfig () { | ||||
|       this.$v.mailConfigData.$touch() | ||||
| @ -196,7 +201,7 @@ export default { | ||||
|       } | ||||
|       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', this.mailConfigData) | ||||
|         if (response.data.success) { | ||||
|           window.toastr['success'](this.$t('wizard.success.' + response.data.success)) | ||||
|         } else { | ||||
|  | ||||
| @ -29,16 +29,9 @@ | ||||
|       > | ||||
|         <table-column | ||||
|           :sortable="true" | ||||
|           :filterable="true" | ||||
|           :label="$t('settings.tax_types.tax_name')" | ||||
|         > | ||||
|           <template slot-scope="row"> | ||||
|             <span>{{ $t('settings.tax_types.tax_name') }}</span> | ||||
|             <span class="tax-name mt-3"> | ||||
|               {{ row.name }} | ||||
|             </span> | ||||
|           </template> | ||||
|         </table-column> | ||||
|           show="name" | ||||
|         /> | ||||
|         <table-column | ||||
|           :sortable="true" | ||||
|           :filterable="true" | ||||
|  | ||||
							
								
								
									
										55
									
								
								resources/assets/js/views/settings/UpdateApp.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								resources/assets/js/views/settings/UpdateApp.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| <template> | ||||
|   <div class="setting-main-container"> | ||||
|     <div class="card setting-card"> | ||||
|       <div class="page-header"> | ||||
|         <h3 class="page-title">{{ $t('settings.update_app.title') }}</h3> | ||||
|         <p class="page-sub-title"> | ||||
|           {{ $t('settings.update_app.description') }} | ||||
|         </p> | ||||
|         <base-button size="large" icon="sync-alt" color="theme" @click="onUpdateApp"> | ||||
|           {{ $t('settings.update_app.update') }} | ||||
|         </base-button> | ||||
|         <div v-if="isShowProgressBar" class="progress mt-4"> | ||||
|           <div | ||||
|             :style="[{'width': progress+'%'}]" | ||||
|             class="progress-bar progress-bar-striped progress-bar-animated" | ||||
|             role="progressbar" | ||||
|             aria-valuenow="0" | ||||
|             aria-valuemin="0" | ||||
|             aria-valuemax="100" | ||||
|           /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
|  | ||||
| export default { | ||||
|   data () { | ||||
|     return { | ||||
|       isShowProgressBar: false, | ||||
|       progress: 10, | ||||
|       interval: null | ||||
|     } | ||||
|   }, | ||||
|   watch: { | ||||
|   }, | ||||
|   mounted () { | ||||
|   }, | ||||
|   methods: { | ||||
|     onUpdateApp () { | ||||
|       this.isShowProgressBar = true | ||||
|       this.interval = setInterval(() => { | ||||
|         if (this.progress >= 100) { | ||||
|           clearInterval(this.interval) | ||||
|           setTimeout(() => { | ||||
|             this.isShowProgressBar = false | ||||
|           }, 1000) | ||||
|         } | ||||
|         this.progress += 10 | ||||
|       }, 250) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -106,7 +106,7 @@ export default { | ||||
|         email | ||||
|       }, | ||||
|       password: { | ||||
|         minLength: minLength(8) | ||||
|         minLength: minLength(5) | ||||
|       }, | ||||
|       confirm_password: { | ||||
|         required: requiredIf('isRequired'), | ||||
|  | ||||
| @ -74,6 +74,12 @@ export default { | ||||
|           title: 'settings.menu_title.notifications', | ||||
|           icon: 'bell', | ||||
|           iconType: 'far' | ||||
|         }, | ||||
|         { | ||||
|           link: '/admin/settings/update-app', | ||||
|           title: 'settings.menu_title.update_app', | ||||
|           icon: 'sync-alt', | ||||
|           iconType: 'fas' | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|  | ||||
| @ -94,17 +94,27 @@ | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $t('wizard.address') }}</label> | ||||
|           <base-text-area | ||||
|             :invalid="$v.companyData.address_street_1.$error" | ||||
|             v-model.trim="companyData.address_street_1" | ||||
|             :placeholder="$t('general.street_1')" | ||||
|             name="billing_street1" | ||||
|             rows="2" | ||||
|             @input="$v.companyData.address_street_1.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.companyData.address_street_1.$error"> | ||||
|             <span v-if="!$v.companyData.address_street_1.maxLength" class="text-danger">{{ $t('validation.description_maxlength') }}</span> | ||||
|           </div> | ||||
|           <base-text-area | ||||
|             :invalid="$v.companyData.address_street_2.$error" | ||||
|             v-model="companyData.address_street_2" | ||||
|             :placeholder="$t('general.street_2')" | ||||
|             name="billing_street2" | ||||
|             rows="2" | ||||
|             @input="$v.companyData.address_street_2.$touch()" | ||||
|           /> | ||||
|           <div v-if="$v.companyData.address_street_2.$error"> | ||||
|             <span v-if="!$v.companyData.address_street_2.maxLength" class="text-danger">{{ $t('validation.description_maxlength') }}</span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col-md-6"> | ||||
|           <div class="row"> | ||||
| @ -146,7 +156,7 @@ import MultiSelect from 'vue-multiselect' | ||||
| import AvatarCropper from 'vue-avatar-cropper' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import Ls from '../../services/ls' | ||||
| const { required, minLength, email } = require('vuelidate/lib/validators') | ||||
| const { required, minLength, email, maxLength } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
| @ -197,6 +207,12 @@ export default { | ||||
|       }, | ||||
|       country_id: { | ||||
|         required | ||||
|       }, | ||||
|       address_street_1: { | ||||
|         maxLength: maxLength(255) | ||||
|       }, | ||||
|       address_street_2: { | ||||
|         maxLength: maxLength(255) | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @ -97,7 +97,6 @@ | ||||
|         </div> | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $t('wizard.database.password') }}</label> | ||||
|           <span class="text-danger"> *</span> | ||||
|           <base-input | ||||
|             v-model.trim="databaseData.database_password" | ||||
|             type="password" | ||||
| @ -154,7 +153,7 @@ export default { | ||||
|         database_name: null, | ||||
|         database_username: null, | ||||
|         database_password: null, | ||||
|         app_url: null | ||||
|         app_url: window.location.origin | ||||
|       }, | ||||
|       loading: false, | ||||
|       connections: [ | ||||
| @ -207,8 +206,8 @@ export default { | ||||
|         } | ||||
|         this.loading = false | ||||
|       } catch (e) { | ||||
|         console.log(e) | ||||
|         window.toastr['error']('Something went wrong') | ||||
|         console.log(e.response) | ||||
|         window.toastr['error'](e.response.data.message) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -61,7 +61,8 @@ | ||||
|           <base-input | ||||
|             :invalid="$v.mailConfigData.mail_password.$error" | ||||
|             v-model.trim="mailConfigData.mail_password" | ||||
|             type="mail_password" | ||||
|             type="password" | ||||
|             show-password | ||||
|             name="name" | ||||
|             @input="$v.mailConfigData.mail_password.$touch()" | ||||
|           /> | ||||
|  | ||||
| @ -67,8 +67,8 @@ export default { | ||||
|   data () { | ||||
|     return { | ||||
|       loading: false, | ||||
|       tab: 'step_1', | ||||
|       step: 1 | ||||
|       tab: 'step_3', | ||||
|       step: 3 | ||||
|     } | ||||
|   }, | ||||
|   created () { | ||||
|  | ||||
| @ -35,7 +35,7 @@ | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       v-if="requirements" | ||||
|       v-if="hasNext" | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       icon="arrow-right" | ||||
| @ -46,7 +46,7 @@ | ||||
|       {{ $t('wizard.continue') }} | ||||
|     </base-button> | ||||
|     <base-button | ||||
|       v-else | ||||
|       v-if="!requirements" | ||||
|       :loading="loading" | ||||
|       class="pull-right mt-4" | ||||
|       color="theme" | ||||
| @ -74,6 +74,20 @@ export default { | ||||
|       isShow: true | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|     hasNext () { | ||||
|       if (this.requirements) { | ||||
|         let isRequired = true | ||||
|         for (const key in this.requirements) { | ||||
|           if (!this.requirements[key]) { | ||||
|             isRequired = false | ||||
|           } | ||||
|         } | ||||
|         return this.requirements && this.phpSupportInfo.supported && isRequired | ||||
|       } | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     listToggle  () { | ||||
|       this.isShow = !this.isShow | ||||
|  | ||||
| @ -108,7 +108,7 @@ export default { | ||||
|       }, | ||||
|       password: { | ||||
|         required, | ||||
|         minLength: minLength(8) | ||||
|         minLength: minLength(5) | ||||
|       }, | ||||
|       confirm_password: { | ||||
|         required: requiredIf('isRequired'), | ||||
|  | ||||
		Reference in New Issue
	
	Block a user