sms.vue 2.3 KB

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