WorkOrder.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <div class="container-fluid">
  3. <div class="row my-3">
  4. <div class="col-lg-6">
  5. <div class="card h-100">
  6. <div class="card-header text-right">
  7. <button type="button" class="btn btn-default xs-toggle" data-toggle="collapse" data-target="#assetTab">
  8. <span class="sr-only">Toggle Navigation</span>
  9. <span class="icon-bar"></span>
  10. <span class="icon-bar"></span>
  11. <span class="icon-bar"></span>
  12. </button>
  13. <ul class="nav nav-pills card-header-pills nav-justified xs-collapse collapse" id="assetTab" role="tablist">
  14. <li class="nav-item">
  15. <a class="nav-link active" id="assetinfo-tab" data-toggle="pill" href="#assetinfo" role="tab" aria-controls="assetinfo" aria-selected="true">Hardware</a>
  16. </li>
  17. <!-- @if($workOrder->asset->group !== null)
  18. <li class="nav-item">
  19. <a class="nav-link" id="group-tab" data-toggle="pill" href="#group" role="tab" aria-controls="group" aria-selected="false">Group</a>
  20. </li>
  21. @endif -->
  22. <li class="nav-item">
  23. <a class="nav-link" id="credentials-tab" data-toggle="pill" href="#credentials" role="tab" aria-controls="credentials" aria-selected="false">Credentials</a>
  24. </li>
  25. </ul>
  26. </div>
  27. <div class="card-body">
  28. <div class="tab-content">
  29. <div class="tab-pane active" id="assetinfo" role="tabpanel" aria-labelledby="assetinfo-tab">
  30. <asset-info v-if="!assetLoading" :asset="asset"></asset-info>
  31. <circle-spinner v-else :color="'#663399'"></circle-spinner>
  32. </div>
  33. <!-- @if($workOrder->asset->group !== null)
  34. <div class="tab-pane" id="group" role="tabpanel" aria-labelledby="group-tab">
  35. Name: {{$workOrder->asset->group->pcgroupname}}
  36. </div>
  37. @endif
  38. <div class="tab-pane" id="credentials" role="tabpanel" aria-labelledby="credentials-tab">
  39. <credential-list :credential-list="{{$workOrder->asset->credentials->sortByDesc('creddate')->values()}}" :descriptions="{{App\CredDesc::all()}}" :pcid="{{$workOrder->asset->pcid}}"></credential-list>
  40. </div> -->
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="col-lg-6">
  46. <div class="card h-100">
  47. <div class="card-header text-right">
  48. <button type="button" class="btn btn-default xs-toggle" data-toggle="collapse" data-target="#workorderTab">
  49. <span class="sr-only">Toggle Navigation</span>
  50. <span class="icon-bar"></span>
  51. <span class="icon-bar"></span>
  52. <span class="icon-bar"></span>
  53. </button>
  54. <ul class="nav nav-pills card-header-pills nav-justified xs-collapse collapse" id="workorderTab" role="tablist">
  55. <li class="nav-item">
  56. <a class="nav-link active" id="workordersumm-tab" data-toggle="pill" href="#workordersumm" role="tab" aria-controls="workordersumm" aria-selected="true">Summary</a>
  57. </li>
  58. <li class="nav-item">
  59. <a class="nav-link" id="attachments-tab" data-toggle="pill" href="#attachments" role="tab" aria-controls="attachments" aria-selected="false">Attachments</a>
  60. </li>
  61. </ul>
  62. </div>
  63. <div class='card-body'>
  64. <div class='tab-content'>
  65. <div class="tab-pane active" id="workordersumm" role="tabpanel" aria-labelledby="workordersumm-tab">
  66. <work-order-info v-if="!woLoading && !storesLoading" :work-order="workOrder" :stores="stores"></work-order-info>
  67. <circle-spinner v-else :color="'#663399'"></circle-spinner>
  68. </div>
  69. <div class="tab-pane" id="attachments" role="tabpanel" aria-labelledby="attachments-tab">
  70. TODO 2
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <!-- <div class="row my-3 no-gutters">
  78. <div class="col-12">
  79. <div class="card">
  80. <div class="card-body">
  81. <h5 class="card-title">Customer Notes</h5>
  82. <notes :initialnotes='{{ $workOrder->notes->where('notetype', '0')->values() }}' authusername="{{Auth::user()->username}}" :note-type="0" :woid="{{$workOrder->woid}}"></notes>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="row my-3 no-gutters">
  88. <div class="col-12">
  89. <div class="card">
  90. <div class="card-body">
  91. <h5 class="card-title">Private/Billing Notes</h5>
  92. <notes :initialnotes='{{ $workOrder->notes->where('notetype', '1')->values() }}' authusername="{{Auth::user()->username}}" :note-type="1" :woid="{{$workOrder->woid}}"></notes>
  93. </div>
  94. </div>
  95. </div>
  96. </div> -->
  97. </div>
  98. </template>
  99. <script>
  100. import WorkOrderInfo from '../components/WorkOrderInfo.vue'
  101. import AssetInfo from '../components/AssetInfo.vue'
  102. import CircleSpinner from '../components/CircleSpinner.vue'
  103. export default {
  104. components: {
  105. WorkOrderInfo,
  106. AssetInfo,
  107. CircleSpinner,
  108. },
  109. props: ['id'],
  110. data () {
  111. return {
  112. workOrder: {},
  113. asset: {},
  114. stores: {},
  115. woLoading: true,
  116. assetLoading: true,
  117. storesLoading: true,
  118. }
  119. },
  120. mounted () {
  121. // Get authentication info from current user from local storage
  122. let token = localStorage.getItem('jwt')
  123. let user = localStorage.getItem('user')
  124. // Set some axios config options for Content-Type and Authentication.
  125. axios.defaults.headers.common['Content-Type'] = 'application/json'
  126. axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
  127. // Get WorkOrder from API
  128. axios.get('/api/workorders/'+this.id).then(response => {
  129. this.workOrder = response.data
  130. this.woLoading = false
  131. }).catch(error => {
  132. console.log(error)
  133. })
  134. // Get Asset from API (will most likely be replaced with list of assets
  135. // in the future. Current each WO can only have one but that is likely
  136. // to change)
  137. axios.get(`/api/workorders/${this.id}/asset`).then(response => {
  138. this.asset = response.data
  139. this.assetLoading = false
  140. }).catch(error => {
  141. console.log(error)
  142. })
  143. // Get list of stores from API
  144. axios.get('/api/stores/').then(response => {
  145. this.stores = response.data
  146. this.storesLoading = false
  147. }).catch(error => {
  148. console.log(error)
  149. })
  150. Echo.channel('work-order.'+this.id)
  151. .listen('WorkOrderUpdated', (e) => {
  152. this.workOrder = e.data;
  153. });
  154. },
  155. }
  156. </script>