DatePickerComponent.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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, computed, toRef} from '@nuxtjs/composition-api'
  30. import {useRepositoryHelper} from "~/use/store/useRepository";
  31. import {Repository} from "@vuex-orm/core";
  32. import {Model} from "~/models/Model";
  33. export default defineComponent({
  34. props: {
  35. repository: {
  36. type: Object as () => Repository<Model>,
  37. required: true
  38. },
  39. entry:{
  40. type: Object,
  41. required: true
  42. },
  43. field: {
  44. type: String,
  45. required: true
  46. },
  47. label: {
  48. type: String,
  49. required: false
  50. }
  51. },
  52. setup(props){
  53. const {label, field, repository } = props
  54. const entry = toRef(props, 'entry')
  55. const {$moment} = useContext()
  56. const label_field = label ?? field;
  57. const data = computed(() => entry.value[field])
  58. const readOnly = computed(() => useRepositoryHelper.getReadOnly(repository))
  59. const dateFormatted = ref($moment(data.value).format('DD/MM/YYYY'))
  60. const dateParsed = ref($moment(data.value).format('YYYY-MM-DD'))
  61. const unwatch = watch(dateParsed, (newValue) => {
  62. dateFormatted.value = $moment(newValue).format('DD/MM/YYYY')
  63. useRepositoryHelper.updateStoreFromField(repository, entry.value, newValue, field)
  64. })
  65. onUnmounted(()=>{
  66. unwatch()
  67. })
  68. return {
  69. label_field,
  70. readOnly,
  71. dateParsed,
  72. dateFormatted,
  73. dateOpen: false
  74. }
  75. }
  76. })
  77. </script>
  78. <style scoped>
  79. </style>