WoInfoEditModal.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <modal :id="id" tabindex="-1" role="dialog" :aria-labelledby="id+'Label'">
  3. <h5 slot="header" class="modal-title" :id="id+'Label'">
  4. Edit Work Order Information
  5. </h5>
  6. <div slot="body">
  7. <div class="form-group">
  8. <label for="probdesc">Problem Description</label>
  9. <textarea id="probdesc" name="probdesc" :class="{'form-control': true, 'is-invalid': errors.probdesc}" v-model="data.probdesc"></textarea>
  10. <error-list :errors="errors.probdesc"></error-list>
  11. </div>
  12. <div class="form-group">
  13. <label for="suggested">Suggested Solution</label>
  14. <textarea id="suggested" name="suggested" :class="{'form-control': true, 'is-invalid': errors.suggested}" v-model="data.suggested"></textarea>
  15. <error-list :errors="errors.suggested"></error-list>
  16. </div>
  17. <div class="form-group">
  18. <label for="storelist">Store</label>
  19. <autocomplete-custom-dropdown :options="storeList" :value="this.store" v-model="store"></autocomplete-custom-dropdown>
  20. <!-- <select name="storelist" id="storelist" class="form-control" v-if="storeList" v-model="data.storeid">
  21. <option v-for="store in storeList" v-bind:key="store.storeid" v-bind:value="store.storeid">
  22. {{ store.storesname }}
  23. </option>
  24. </select> -->
  25. </div>
  26. </div>
  27. <div slot="footer">
  28. <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
  29. <button type="button" class="btn btn-primary" @click="updateWorkOrder()">
  30. <div v-if="!woInfoSaving">Save</div>
  31. <circle-spinner v-else :size="2"></circle-spinner>
  32. </button>
  33. </div>
  34. </modal>
  35. </template>
  36. <script>
  37. import Modal from '../components/Modal.vue'
  38. import AutocompleteCustomDropdown from '../components/AutocompleteCustomDropdown.vue'
  39. import ErrorList from '../components/ErrorList.vue'
  40. export default {
  41. components: {
  42. Modal,
  43. AutocompleteCustomDropdown,
  44. ErrorList
  45. },
  46. props: {
  47. populateWith: {
  48. type: Object,
  49. required: true,
  50. },
  51. storeList: {
  52. type: Object,
  53. required: true,
  54. },
  55. modalId: {
  56. type: String,
  57. required: true,
  58. },
  59. },
  60. data () {
  61. return {
  62. // Copies object from prop, so it doesn't mutate the object
  63. // from the parent component. Parent component will be updated via
  64. // Websocket if updateWorkOrder is successful.
  65. data: JSON.parse(JSON.stringify(this.populateWith)),
  66. id: this.modalId,
  67. store: {},
  68. errors: [],
  69. woInfoSaving: false
  70. }
  71. },
  72. methods: {
  73. updateWorkOrder() {
  74. woInfoSaving: true
  75. this.data.storeid = this.store.id
  76. axios.put('/api/workorders/' + this.data.woid, this.data)
  77. .then((response) => {
  78. this.woInfoSaving = false
  79. $('#workordereditModal').modal('hide')
  80. })
  81. .catch((error) => {
  82. this.woInfoSaving = false
  83. this.errors = JSON.parse(error.response.request.response).errors
  84. });
  85. }
  86. },
  87. mounted () {
  88. this.store = {
  89. 'id': this.data.storeid,
  90. 'name': this.storeList[this.data.storeid]
  91. }
  92. },
  93. // This was originally here because the populateWith info would originally
  94. // not necessarily be loaded when this component was mounted. That is no
  95. // longer the case as I now don't render the parent component until the
  96. // ajax request is finised. The watch statements are still here to cover
  97. // the case where someone else updates the populateWith values while
  98. // someone is editing, although it probably should be edited so it doesn't
  99. // immediately overwrite the unsaved edits of the current user.
  100. watch: {
  101. populateWith: function (value) {
  102. this.data = JSON.parse(JSON.stringify(this.populateWith))
  103. this.store = {
  104. 'id': this.data.storeid,
  105. 'name': this.storeList[this.data.storeid]
  106. }
  107. },
  108. storeList: function (value) {
  109. this.store = {
  110. 'id': this.data.storeid,
  111. 'name': this.storeList[this.data.storeid]
  112. }
  113. }
  114. }
  115. }
  116. </script>