WorkOrder.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 v-if="!credentialsLoading && !credentialDescriptionsLoading" :credentials="credentials" :descriptions="credentialDescriptions" :pcid="asset.pcid"></credential-list>
  40. <circle-spinner v-else color="#663399"></circle-spinner>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <div class="col-lg-6">
  47. <div class="card h-100">
  48. <div class="card-header text-right">
  49. <button type="button" class="btn btn-default xs-toggle" data-toggle="collapse" data-target="#workorderTab">
  50. <span class="sr-only">Toggle Navigation</span>
  51. <span class="icon-bar"></span>
  52. <span class="icon-bar"></span>
  53. <span class="icon-bar"></span>
  54. </button>
  55. <ul class="nav nav-pills card-header-pills nav-justified xs-collapse collapse" id="workorderTab" role="tablist">
  56. <li class="nav-item">
  57. <a class="nav-link active" id="workordersumm-tab" data-toggle="pill" href="#workordersumm" role="tab" aria-controls="workordersumm" aria-selected="true">Summary</a>
  58. </li>
  59. <li class="nav-item">
  60. <a class="nav-link" id="attachments-tab" data-toggle="pill" href="#attachments" role="tab" aria-controls="attachments" aria-selected="false">Attachments</a>
  61. </li>
  62. </ul>
  63. </div>
  64. <div class='card-body'>
  65. <div class='tab-content'>
  66. <div class="tab-pane active" id="workordersumm" role="tabpanel" aria-labelledby="workordersumm-tab">
  67. <work-order-info v-if="!woLoading && !storesLoading" :work-order="workOrder" :stores="stores"></work-order-info>
  68. <circle-spinner v-else :color="'#663399'"></circle-spinner>
  69. </div>
  70. <div class="tab-pane" id="attachments" role="tabpanel" aria-labelledby="attachments-tab">
  71. TODO 2
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. <!-- <div class="row my-3 no-gutters">
  79. <div class="col-12">
  80. <div class="card">
  81. <div class="card-body">
  82. <h5 class="card-title">Customer Notes</h5>
  83. <notes :initialnotes='{{ $workOrder->notes->where('notetype', '0')->values() }}' authusername="{{Auth::user()->username}}" :note-type="0" :woid="{{$workOrder->woid}}"></notes>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. <div class="row my-3 no-gutters">
  89. <div class="col-12">
  90. <div class="card">
  91. <div class="card-body">
  92. <h5 class="card-title">Private/Billing Notes</h5>
  93. <notes :initialnotes='{{ $workOrder->notes->where('notetype', '1')->values() }}' authusername="{{Auth::user()->username}}" :note-type="1" :woid="{{$workOrder->woid}}"></notes>
  94. </div>
  95. </div>
  96. </div>
  97. </div> -->
  98. </div>
  99. </template>
  100. <script>
  101. import WorkOrderInfo from '../components/WorkOrderInfo.vue'
  102. import AssetInfo from '../components/AssetInfo.vue'
  103. import CircleSpinner from '../components/CircleSpinner.vue'
  104. import CredentialList from '../components/CredentialList.vue'
  105. export default {
  106. components: {
  107. WorkOrderInfo,
  108. AssetInfo,
  109. CircleSpinner,
  110. CredentialList,
  111. },
  112. props: {
  113. id: {
  114. type: Number,
  115. required: true,
  116. }
  117. },
  118. data () {
  119. return {
  120. workOrder: {},
  121. asset: {},
  122. stores: {},
  123. credentials: {},
  124. credentialDescriptions: {},
  125. woLoading: true,
  126. assetLoading: true,
  127. storesLoading: true,
  128. credentialsLoading: true,
  129. credentialDescriptionsLoading: true,
  130. }
  131. },
  132. mounted () {
  133. // Get authentication info from current user from local storage
  134. let token = localStorage.getItem('jwt')
  135. let user = localStorage.getItem('user')
  136. // Set some axios config options for Content-Type and Authentication.
  137. axios.defaults.headers.common['Content-Type'] = 'application/json'
  138. axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
  139. // Get WorkOrder from API
  140. axios.get('/api/workorders/'+this.id).then(response => {
  141. this.workOrder = response.data
  142. this.woLoading = false
  143. }).catch(error => {
  144. console.log(error)
  145. })
  146. // Get list of stores from API
  147. axios.get('/api/stores/').then(response => {
  148. this.stores = response.data
  149. this.storesLoading = false
  150. }).catch(error => {
  151. console.log(error)
  152. })
  153. // Get Asset from API (will most likely be replaced with list of assets
  154. // in the future. Current each WO can only have one but that is likely
  155. // to change)
  156. axios.get(`/api/workorders/${this.id}/asset`).then(response => {
  157. this.asset = response.data
  158. this.assetLoading = false
  159. // Get Credentials for this asset. May be relocated to be part of asset
  160. // Component when WOs can have more than one asset.
  161. axios.get(`/api/assets/${this.asset.pcid}/credentials`).then (response => {
  162. this.credentials = response.data
  163. this.credentialsLoading = false
  164. }).catch(error => {
  165. console.log(error)
  166. })
  167. // Get default list of Credential Descriptions. May be relocated along with
  168. // the above.
  169. axios.get('/api/credentials/descriptions').then(response => {
  170. this.credentialDescriptions = response.data
  171. this.credentialDescriptionsLoading = false
  172. }).catch(error => {
  173. console.log(error)
  174. })
  175. }).catch(error => {
  176. console.log(error)
  177. })
  178. Echo.channel('work-order.'+this.id)
  179. .listen('WorkOrderUpdated', (e) => {
  180. this.workOrder = e.data;
  181. });
  182. },
  183. }
  184. </script>