Notes.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <ul class="list-unstyled">
  3. <div class="row">
  4. <div class="col-md-2 d-flex justify-content-center justify-content-md-start">
  5. <button type="button" data-toggle="collapse" :data-target="'#note'+noteType+'add'" class="btn btn-primary m-2"><i class="fas fa-fw fa-plus"></i> Add New Note</button>
  6. </div>
  7. <div class="col-md-10">
  8. <div class="collapse" :id="'note'+noteType+'add'">
  9. <div class="d-flex flex-wrap flex-md-nowrap justify-content-center">
  10. <textarea :name="'newnote'+noteType" :id="'newnote'+noteType" class="form-control" v-model="newNote.thenote"></textarea>
  11. <button type="button" class="btn btn-secondary m-2" @click="createNote()">
  12. <div v-if="!noteSaving">Save</div>
  13. <circle-spinner v-else :size="2"></circle-spinner>
  14. </button>
  15. </div>
  16. </div>
  17. </div>
  18. </div>
  19. <li class="row no-gutters mb-2" v-bind:key="note.noteid" v-for="(note, index) in this.notes">
  20. <note-form-modal :modal-id="'note'+note.noteid+'editModal'" :populate-with="note"></note-form-modal>
  21. <note-delete-modal :modal-id="`note${note.noteid}deleteModal`" :note="note"></note-delete-modal>
  22. <note-form-modal :modal-id="`note${note.noteid}switchModal`" :populate-with="note" change-type></note-form-modal>
  23. <div class="col-md-1 d-flex flex-column mx-md-3" :class="noteOrders[index]">
  24. <div class="text-center p-0 m-0">{{note.noteuser}}</div>
  25. <div class="text-muted text-small text-center p-0 m-0">{{getHRDate(note.notetime)}}</div>
  26. <div class="btn-group justify-content-center p-0 m-0">
  27. <template v-if="authusername === note.noteuser || authusername === 'admin'">
  28. <button class="btn btn-sm btn-primary m-1" data-toggle="modal" :data-target="'#note'+note.noteid+'editModal'"><i class="fas fa-fw fa-edit"></i></button>
  29. <button class="btn btn-sm btn-danger m-1" data-toggle="modal" :data-target="`#note${note.noteid}deleteModal`"><i class="fas fa-fw fa-trash-alt"></i></button>
  30. <button class="btn btn-sm btn-primary m-1" data-toggle="modal" :data-target="`#note${note.noteid}switchModal`"><i class="fa fa-fw fa-random"></i></button>
  31. </template>
  32. </div>
  33. </div>
  34. <div class="col-md-10">
  35. <div class="card m-2">
  36. <div class="card-body p-2">
  37. {{ note.thenote }}
  38. </div>
  39. </div>
  40. </div>
  41. </li>
  42. </ul>
  43. </template>
  44. <script>
  45. import dateMixin from '../mixins/dateMixin'
  46. import NoteFormModal from './NoteFormModal.vue'
  47. import CircleSpinner from './CircleSpinner.vue'
  48. import NoteDeleteModal from './NoteDeleteModal.vue'
  49. export default {
  50. components: {
  51. NoteFormModal,
  52. CircleSpinner,
  53. NoteDeleteModal
  54. },
  55. mixins:[dateMixin],
  56. props: {
  57. notes: {
  58. type: Array,
  59. default: [],
  60. },
  61. authusername: {
  62. type: String,
  63. required: true,
  64. },
  65. noteType: {
  66. type: Number,
  67. required: true,
  68. },
  69. woid: {
  70. type: String,
  71. required: true,
  72. }
  73. },
  74. data () {
  75. return {
  76. newNote: {
  77. notetype: this.noteType,
  78. thenote: '',
  79. noteuser: this.authusername,
  80. woid: this.woid,
  81. },
  82. noteSaving: false
  83. }
  84. },
  85. computed: {
  86. noteOrders () {
  87. return this.getNoteOrders(this.notes)
  88. }
  89. },
  90. methods: {
  91. createNote () {
  92. this.noteSaving = true
  93. axios.post('/api/workorders/notes', this.newNote)
  94. .then((response) => {
  95. this.noteSaving = false
  96. $('#note'+this.noteType+'add').collapse('hide')
  97. this.newNote.thenote = ''
  98. }).catch(error => {
  99. this.noteSaving = false
  100. console.log(error)
  101. })
  102. },
  103. getNoteOrders(notes) {
  104. let noteOrders = []
  105. notes.forEach((note,index) =>{
  106. if (index === 0) {
  107. noteOrders[index] = 'order-first'
  108. } else if (note.noteuser !== notes[index-1].noteuser) {
  109. if (noteOrders[index-1] === 'order-first') {
  110. noteOrders[index] = 'order-last'
  111. } else {
  112. noteOrders[index] = 'order-first'
  113. }
  114. } else {
  115. noteOrders[index] = noteOrders[index-1]
  116. }
  117. })
  118. return noteOrders
  119. }
  120. }
  121. }
  122. </script>