sms.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <div>
  3. <h3>{{ $t('parameters_sms_page') }}</h3>
  4. <UiForm v-if="parameters" v-model="parameters">
  5. <v-row>
  6. <v-col cols="12">
  7. <UiInputText
  8. v-model="parameters.smsSenderName"
  9. readonly
  10. field="smsSenderName"
  11. :rules="rules()"
  12. class="readonly"
  13. />
  14. </v-col>
  15. <v-col cols="12">
  16. <UiInputText
  17. v-model="parameters.usernameSMS"
  18. field="usernameSMS"
  19. />
  20. </v-col>
  21. <v-col cols="12">
  22. <UiInputText
  23. v-model="parameters.passwordSMS"
  24. field="passwordSMS"
  25. class="password"
  26. />
  27. </v-col>
  28. </v-row>
  29. </UiForm>
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import type { AsyncData } from '#app'
  34. import Parameters from '~/models/Organization/Parameters'
  35. import { useEntityFetch } from '~/composables/data/useEntityFetch'
  36. import { useOrganizationProfileStore } from '~/stores/organizationProfile'
  37. definePageMeta({
  38. name: 'parameters_sms_page',
  39. })
  40. const i18n = useI18n()
  41. const { fetch } = useEntityFetch()
  42. const organizationProfile = useOrganizationProfileStore()
  43. if (organizationProfile.parametersId === null) {
  44. throw new Error('Missing organization parameters id')
  45. }
  46. const { data: parameters } = fetch(
  47. Parameters,
  48. organizationProfile.parametersId,
  49. ) as AsyncData<Parameters | null, Error | null>
  50. /**
  51. * Règles de validation
  52. */
  53. const rules = () => [
  54. (smsSenderName: string | null) =>
  55. (smsSenderName !== null && /^\w{3,11}$/.test(smsSenderName)) ||
  56. i18n.t('please_enter_a_value_for_the_sms_sender_name'),
  57. ]
  58. </script>
  59. <style scoped lang="scss">
  60. .readonly {
  61. color: rgb(var(--v-theme-on-surface));
  62. :deep(.v-field--disabled), :deep(.v-field__input) {
  63. opacity: 1;
  64. }
  65. }
  66. /**
  67. Simule une apparence de saisie de type mot de passe
  68. Sans ça, les navigateurs proposent la saisie semi auto et la mémorisation du mot de passe
  69. */
  70. @font-face {
  71. font-family: 'password';
  72. font-style: normal;
  73. font-weight: 400;
  74. font-display: block;
  75. src: url(https://jsbin-user-assets.s3.amazonaws.com/rafaelcastrocouto/password.ttf);
  76. }
  77. :deep(.password input) {
  78. font-family: 'password';
  79. }
  80. </style>