InputComponent.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 {$objectProperties} from "~/services/utils/objectProperties";
  19. import {AnyJson} from "~/types/types";
  20. export default defineComponent({
  21. props: {
  22. query:{
  23. type: Object as () => Query,
  24. required: true
  25. },
  26. field:{
  27. type: String,
  28. required: true
  29. },
  30. rules:{
  31. type: Array,
  32. required: false
  33. }
  34. },
  35. setup({query, field}){
  36. const data = ref({})
  37. const {route} = useContext();
  38. const { fetch, fetchState } = useFetch(async () => {
  39. const entry = await query.find(parseInt(route.value.params.id));
  40. data.value = $objectProperties.cloneAndFlatten(entry as AnyJson);
  41. })
  42. const update = () => {
  43. query.update($objectProperties.cloneAndNest(unref(data)))
  44. }
  45. /* const unwatch = watch(
  46. () => root.$store.state.entities.people.data,
  47. (state, prevState) => {
  48. unref(data)[field] = state
  49. }
  50. )
  51. onUnmounted(() => {
  52. unwatch()
  53. }) */
  54. return {
  55. data,
  56. update
  57. }
  58. }
  59. })
  60. </script>
  61. <style scoped>
  62. </style>