DatePicker.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <v-menu
  3. v-model="dateOpen"
  4. :close-on-content-click="false"
  5. :nudge-right="40"
  6. transition="scale-transition"
  7. offset-y
  8. min-width="auto"
  9. >
  10. <template v-slot:activator="{ on, attrs }">
  11. <v-text-field
  12. v-model="dateFormatted"
  13. :label="$t(label_field)"
  14. prepend-icon="mdi-calendar"
  15. :disabled="readOnly"
  16. v-bind="attrs"
  17. v-on="on"
  18. ></v-text-field>
  19. </template>
  20. <v-date-picker
  21. v-model="dateParsed"
  22. @input="dateOpen = false"
  23. locale="fr"
  24. color="ot_green lighten-1"
  25. ></v-date-picker>
  26. </v-menu>
  27. </template>
  28. <script lang="ts">
  29. import {defineComponent, watch, ref, useContext, onUnmounted} from '@nuxtjs/composition-api'
  30. export default defineComponent({
  31. props: {
  32. field: {
  33. type: String,
  34. required: false
  35. },
  36. label: {
  37. type: String,
  38. required: false
  39. },
  40. data: {
  41. type: String,
  42. required: false
  43. },
  44. readOnly: {
  45. type: Boolean,
  46. required: false
  47. },
  48. },
  49. setup(props, {emit}){
  50. const {data, field} = props
  51. const {$moment} = useContext()
  52. const dateFormatted = ref($moment(data).format('DD/MM/YYYY'))
  53. const dateParsed = ref($moment(data).format('YYYY-MM-DD'))
  54. const unwatch = watch(dateParsed, (newValue) => {
  55. dateFormatted.value = $moment(newValue).format('DD/MM/YYYY')
  56. emit('update', newValue, field)
  57. })
  58. onUnmounted(()=>{
  59. unwatch()
  60. })
  61. return {
  62. label_field : props.label ?? props.field,
  63. dateParsed,
  64. dateFormatted,
  65. dateOpen: false
  66. }
  67. }
  68. })
  69. </script>
  70. <style scoped>
  71. </style>