InputComponent.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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, useFetch, watch, onUnmounted, useContext} from '@nuxtjs/composition-api'
  17. import {Query} from "@vuex-orm/core";
  18. import {cloneAndFlatten, cloneAndNest} from "~/services/utils/objectProperties";
  19. export default defineComponent({
  20. props: {
  21. query:{
  22. type: Object as () => Query,
  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({query, field}){
  35. const data = ref({})
  36. const {route} = useContext();
  37. const { fetch, fetchState } = useFetch(async () => {
  38. const entry = await query.find(parseInt(route.value.params.id));
  39. data.value = cloneAndFlatten(entry);
  40. })
  41. const update = () => {
  42. query.update(cloneAndNest(unref(data)))
  43. }
  44. /* const unwatch = watch(
  45. () => root.$store.state.entities.people.data,
  46. (state, prevState) => {
  47. unref(data)[field] = state
  48. }
  49. )
  50. onUnmounted(() => {
  51. unwatch()
  52. }) */
  53. return {
  54. data,
  55. update
  56. }
  57. }
  58. })
  59. </script>
  60. <style scoped>
  61. </style>