sms.vue 2.3 KB

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