sms.vue 2.3 KB

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