Le composant PhoneInput permet aux utilisateurs de saisir un numéro de téléphone accompagné de son indicatif international. Il intègre un sélecteur de pays avec drapeau, détecte automatiquement le pays à partir du fuseau horaire de l'utilisateur, et retourne une valeur unique au format normalisé "+indicatif-numéro".
@framework/ui). Il est destiné aux développeurs qui créent des formulaires personnalisés ou des pages web dans Dodock/Frappe.+33, France)+33612345678, le composant identifie l'indicatif et affiche le drapeau correspondantv-model est une chaîne de caractères au format "+33-612345678" — indicatif et numéro séparés par un tiretlabel, description, error et required fonctionnent de manière identique au composant TextInput<script setup>
import { PhoneInput } from '@framework/ui'
import { ref } from 'vue'
const phone = ref('')
</script>
<template>
<PhoneInput v-model="phone" label="Téléphone du contact" />
</template>
La valeur liée dans phone sera automatiquement mise à jour sous la forme "+33-612345678" dès que l'utilisateur a sélectionné un pays et saisi un numéro.
Dans un formulaire de création de contact pour le client « Maison Verte SARL » :
<script setup>
import { PhoneInput, TextInput, Button } from '@framework/ui'
import { ref } from 'vue'
const contactPhone = ref('')
const contactName = ref('Sophie Martin')
async function saveContact() {
await frappe.call({
method: 'frappe.client.insert',
args: {
doc: {
doctype: 'Contact',
first_name: contactName.value,
phone: contactPhone.value, // ex. "+33-612345678"
}
}
})
}
</script>
<template>
<TextInput v-model="contactName" label="Nom" />
<PhoneInput
v-model="contactPhone"
label="Numéro de téléphone"
description="Inclure l'indicatif international"
/>
<Button @click="saveContact">Enregistrer</Button>
</template>
| Prop | Type | Défaut | Description |
|---|---|---|---|
v-model | string | '' | Valeur liée au format "+indicatif-numéro" |
size | 'sm' | 'md' | 'lg' | 'xl' | 'sm' | Taille du champ |
variant | 'subtle' | 'outline' | 'subtle' | Style visuel du champ |
placeholder | string | — | Texte d'indication dans le champ numéro |
disabled | boolean | false | Désactive la saisie et le sélecteur |
label | string | — | Étiquette affichée au-dessus du champ |
description | string | — | Texte d'aide affiché sous le champ |
error | string | — | Message d'erreur à afficher |
required | boolean | false | Marque le champ comme obligatoire |
| Slot | Description |
|---|---|
label | Remplace le rendu de l'étiquette |
description | Remplace le texte d'aide |
suffix | Ajoute un élément à droite du champ |
Le composant produit et consomme une valeur au format :
"+<indicatif>-<numéro local>"
Exemples :
| Pays | Saisie utilisateur | Valeur v-model |
|---|---|---|
| France | 06 12 34 56 78 | "+33-612345678" |
| Inde | 98765 43210 | "+91-9876543210" |
| États-Unis | 555 123 4567 | "+1-5551234567" |
Si l'utilisateur colle directement +33612345678 (sans tiret), le composant détecte automatiquement l'indicatif +33, sélectionne la France, et reconstruit la valeur normalisée.
Certains pays partagent le même indicatif téléphonique (ex. +1 pour les États-Unis et le Canada, +599 pour Bonaire et Curaçao). Dans ce cas, le composant applique la logique suivante :
+1242 pour les Bahamas plutôt que +1)Entrée, Échap)disabled sur les deux éléments (sélecteur et champ numéro)Les données de pays, indicatifs et fuseaux horaires sont centralisées dans frappe/geo/country_info.json. Ce fichier inclut également les alias pour les fuseaux horaires dépréciés afin d'assurer la compatibilité avec les navigateurs et systèmes d'exploitation plus anciens.
Il n'est pas nécessaire d'importer ou de configurer ce fichier manuellement : le composant PhoneInput l'utilise automatiquement via le framework.