InputComponent.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <v-col
  3. cols="12"
  4. sm="6"
  5. >
  6. <v-text-field
  7. v-model="data[field]"
  8. @change="update()"
  9. color="purple darken-2"
  10. :rules="rules"
  11. required
  12. ></v-text-field>
  13. </v-col>
  14. </template>
  15. <script lang="ts">
  16. import {unref, defineComponent, ref, watch, onUnmounted} from '@vue/composition-api'
  17. import {Repository} from "@vuex-orm/core";
  18. import {cloneAndFlatten, cloneAndNest} from "~/services/objectProperties";
  19. export default defineComponent({
  20. props: {
  21. repository:{
  22. type: Object as () => Repository,
  23. required: true
  24. },
  25. field:{
  26. type: String,
  27. required: true
  28. },
  29. rules:{
  30. type: Array,
  31. required: false
  32. }
  33. },
  34. setup({repository, field}, {root}){
  35. const data = ref({})
  36. const update = () => {
  37. repository.update(cloneAndNest(unref(data)))
  38. }
  39. /* const unwatch = watch(
  40. () => root.$store.state.entities.people.data,
  41. (state, prevState) => {
  42. unref(data)[field] = state
  43. }
  44. )
  45. onUnmounted(() => {
  46. unwatch()
  47. }) */
  48. return {
  49. data,
  50. update
  51. }
  52. },
  53. async fetch() {
  54. const data = await this.repository.find(parseInt(this.$route.params.id));
  55. this.data = cloneAndFlatten(data);
  56. }
  57. })
  58. </script>
  59. <style scoped>
  60. </style>