FormComponent.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <v-form
  3. ref="form"
  4. v-model="properties.valid"
  5. lazy-validation
  6. >
  7. <slot name="form.input" v-bind="{entry}"></slot>
  8. <!--{{entry}}-->
  9. <v-btn v-if="!readOnly" class="mr-4 submitBtn ot_green ot_white--text" @click="submit">
  10. Enregistrer
  11. </v-btn>
  12. </v-form>
  13. </template>
  14. <script lang="ts">
  15. import {defineComponent, reactive, useContext, computed, toRefs} from '@nuxtjs/composition-api'
  16. import Vue from 'vue'
  17. import {useRepositoryHelper} from "~/use/store/useRepository";
  18. import {useQueryHelper} from "~/use/store/useQuery";
  19. import {Query, Repository} from "@vuex-orm/core";
  20. import {Model} from "~/models/Model";
  21. export type VForm = Vue & { validate: () => boolean }
  22. export default defineComponent({
  23. props: {
  24. repository: {
  25. type: Object as () => Repository<Model>,
  26. required: true
  27. },
  28. id:{
  29. type: Number,
  30. required: true
  31. },
  32. query:{
  33. type: Object as () => Query,
  34. required: true
  35. },
  36. },
  37. setup(props) {
  38. const {repository, id, query} = toRefs(props)
  39. const properties = reactive({
  40. valid: false,
  41. saveOk: false,
  42. saveKo: false
  43. })
  44. const {store} = useContext();
  45. const readOnly = computed(() => {
  46. useRepositoryHelper.getReadOnly(repository.value)
  47. })
  48. const entry = computed(() => {
  49. return useQueryHelper.getFlattenEntry(query.value, id.value)
  50. })
  51. const submit = () => {
  52. useRepositoryHelper.setReadOnly(repository.value, true)
  53. console.log(useQueryHelper.getJsonEntry(query.value, id.value))
  54. }
  55. return {
  56. submit,
  57. properties,
  58. readOnly,
  59. entry
  60. }
  61. },
  62. // methods:{
  63. // async submit(){
  64. //
  65. // console.log()
  66. //
  67. //
  68. // const form:VForm = this.$refs.form;
  69. // if(form.validate()){
  70. // const model = await this.repository.find(parseInt(this.$route.params.id));
  71. // if(model){
  72. // const playload = model.$toJson();
  73. //
  74. // this.$http.$put(`https://local.new.api.opentalent.fr/api/${model.$entity}/${this.$route.params.id}`, playload)
  75. // .then(()=>{
  76. // this.saveOk=true
  77. // }, () =>{
  78. // this.saveKo=true
  79. // })
  80. //
  81. // setTimeout(()=>{
  82. // this.saveOk=false
  83. // this.saveKo=false
  84. // },2000)
  85. // }
  86. // }
  87. // }
  88. // }
  89. })
  90. </script>
  91. <style scoped>
  92. .submitBtn {
  93. right: 0;
  94. margin-top: 20px;
  95. margin-bottom: 20px;
  96. }
  97. </style>