CheckboxComponent.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <v-container
  3. class="px-0"
  4. fluid
  5. >
  6. <v-checkbox
  7. :value="data"
  8. :label="$t(label_field)"
  9. @change="update"
  10. :disabled="readOnly"
  11. ></v-checkbox>
  12. </v-container>
  13. </template>
  14. <script lang="ts">
  15. import {computed, defineComponent, toRef} from '@nuxtjs/composition-api'
  16. import {useRepositoryHelper} from "~/use/store/useRepository";
  17. import {Repository} from "@vuex-orm/core";
  18. import {Model} from "~/models/Model";
  19. export default defineComponent({
  20. props: {
  21. repository: {
  22. type: Object as () => Repository<Model>,
  23. required: true
  24. },
  25. entry:{
  26. type: Object,
  27. required: true
  28. },
  29. field: {
  30. type: String,
  31. required: true
  32. },
  33. label: {
  34. type: String,
  35. required: false
  36. }
  37. },
  38. setup(props){
  39. const {label, field, repository } = props
  40. const entry = toRef(props, 'entry')
  41. const label_field = label ?? field;
  42. const data = computed(() => entry.value[field])
  43. const update = (newValue:string) => useRepositoryHelper.updateStoreFromField(repository, entry.value, newValue, field)
  44. const readOnly = computed(() => useRepositoryHelper.getReadOnly(repository))
  45. return {
  46. label_field,
  47. readOnly,
  48. data,
  49. update
  50. }
  51. }
  52. })
  53. </script>
  54. <style scoped>
  55. </style>