Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.01 KB | None | 0 0
  1. <template>
  2. <div class="items-table-component">
  3. <table-fixed-header
  4. :itemsType="'invoice-items'"
  5. :headers="tableHeaders"
  6. :filters="filtersItems">
  7. <template slot="main">
  8. <tr v-for="(item, key) in invoiceItems"
  9. :key="key"
  10. :class="showItemRowClass(item)"
  11. @click="editRow(key)">
  12. <td class="column-invoice-item-id show-value" v-if="!item.edit">{{ item.id }}</td>
  13. <td class="column-product-name show-value" v-if="!item.edit">{{ item.product }}</td>
  14. <td class="column-quantity show-value" v-if="!item.edit">{{ item.quantity }}</td>
  15. <td class="column-grade show-value" v-if="!item.edit">{{ item.grade }}</td>
  16. <td class="column-price show-value" v-if="!item.edit">{{ item.price }} &euro;</td>
  17. <td class="column-sum show-value" v-if="!item.edit">{{ item.sum }} &euro;</td>
  18. <td class="column-rename-model show-value" v-if="!item.edit">{{ item.rename_model }}</td>
  19. <td class="column-memory show-value" v-if="!item.edit">{{ item.speicher }}</td>
  20. <td class="column-color show-value" v-if="!item.edit">{{ item.farbe }}</td>
  21. <td class="column-item-id show-value" v-if="!item.edit">{{ item.item_id }}</td>
  22. <td class="column-actions show-value" v-if="!item.edit && canDeleteItem">
  23. <button class="btn btn-danger" type="button" @click="$emit('removeRow', key)">
  24. <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
  25. </button>
  26. </td>
  27.  
  28. <td class="column-invoice-item-id edit-value" v-if="item.edit">{{ item.id }}</td>
  29. <td class="column-product-name edit-value" v-if="item.edit">
  30. <input class="form-control"
  31. type="text"
  32. v-model="item.product">
  33. </td>
  34. <td class="column-quantity edit-value" v-if="item.edit">
  35. <input class="form-control"
  36. type="text"
  37. v-model="item.quantity"
  38. @keyup="recalc(key)"
  39. v-filter_number="'[0-9.]'">
  40. </td>
  41. <td class="column-grade edit-value" v-if="item.edit">
  42. <input class="form-control"
  43. type="text"
  44. v-model="item.grade"></td>
  45. <td class="column-price edit-value" v-if="item.edit">
  46. <input class="form-control"
  47. type="text"
  48. v-model="item.price"
  49. @keyup="recalc(key)"
  50. v-filter_number="'[0-9.]'">
  51. </td>
  52. <td class="column-sum edit-value" v-if="item.edit">{{ item.sum }} &euro;</td>
  53. <td class="column-rename-model edit-value" v-if="item.edit">
  54. <input class="form-control"
  55. type="text"
  56. v-model="item.rename_model">
  57. </td>
  58. <td class="column-memory edit-value" v-if="item.edit">
  59. <input class="form-control"
  60. type="text"
  61. v-model="item.speicher">
  62. </td>
  63. <td class="column-color edit-value" v-if="item.edit">
  64. <input class="form-control"
  65. type="text"
  66. v-model="item.farbe">
  67. </td>
  68. <td class="column-item-id edit-value" v-if="item.edit">
  69. <input class="form-control"
  70. type="text"
  71. v-model="item.item_id">
  72. </td>
  73. <td class="column-actions edit-value" v-if="item.edit">
  74. <button class="btn btn-danger" type="button" @click="$emit('removeRow', key)">
  75. <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
  76. </button>
  77. </td>
  78. </tr>
  79. </template>
  80. </table-fixed-header>
  81. </div>
  82. </template>
  83.  
  84. <script>
  85.  
  86. Vue.component('table-fixed-header', require('../../_templates/TableComponent.vue'));
  87.  
  88. export default {
  89. name: "ItemsTableComponent",
  90. props: [
  91. 'dataInvoiceItems', 'user', 'filtersItemsUrl', 'invoiceItemsIndexUrl'
  92. ],
  93. data() {
  94. return {
  95. filtersItems: {},
  96. selectedFilters: [],
  97. filter: {},
  98. invoiceItems: this.dataInvoiceItems,
  99.  
  100. tableHeaders: {
  101. 'invoice-item-id': 'ID',
  102. 'product-name': 'Product Name',
  103. 'quantity': 'Qty',
  104. 'grade': 'Grade',
  105. 'price': 'Price',
  106. 'sum': 'Sum',
  107. 'rename-model': 'Rename Model',
  108. 'memory': 'Speicher',
  109. 'color': 'Color',
  110. 'item-id': 'Item ID',
  111. 'actions': ''
  112. },
  113. }
  114. },
  115. computed: {
  116. canDeleteItem() {
  117. return !(this.user.role === 'superviser');
  118. },
  119. },
  120. created() {
  121. this.getFiltersItems();
  122. },
  123. methods: {
  124. getFiltersItems() {
  125. axios.get(this.filtersItemsUrl, {
  126. params: {
  127. 'items': this.invoiceItems,
  128. },
  129. })
  130. .then(response => {
  131. let data = response.data;
  132.  
  133. this.filtersItems = {
  134. 'grade': {
  135. 'on-change': this.changeFilter,
  136. 'data': data.grade,
  137. 'selected': this.filter.grade ? this.filter.grade : [],
  138. },
  139. 'rename_model': {
  140. 'on-change': this.changeFilter,
  141. 'data': data.rename_model,
  142. 'selected': this.filter.rename_model ? this.filter.rename_model : [],
  143. },
  144. 'speicher': {
  145. 'on-change': this.changeFilter,
  146. 'data': data.speicher,
  147. 'selected': this.filter.speicher ? this.filter.speicher : [],
  148. },
  149. 'farbe': {
  150. 'on-change': this.changeFilter,
  151. 'data': data.farbe,
  152. 'selected': this.filter.farbe ? this.filter.farbe : [],
  153. },
  154. 'item_id': {
  155. 'on-change': this.changeFilter,
  156. 'data': data.item_id,
  157. 'selected': this.filter.item_id ? this.filter.item_id : [],
  158. },
  159. };
  160. });
  161. },
  162. changeFilter(data, type) {
  163. this.filter[type] = data;
  164. this.getItems();
  165. },
  166. getItems() {
  167. axios.get(this.invoiceItemsIndexUrl, {
  168. params: {
  169. 'filter': this.filter,
  170. },
  171. }).then(response => {
  172. this.invoiceItems = response.data;
  173. this.getFiltersItems();
  174. });
  175. },
  176. showItemRowClass(el) {
  177. return this.isValidItemData(el) ? (this.hasSpeicher(el) || this.hasFarbe(el)) : "alert alert-danger";
  178. },
  179. isValidItemData(el) {
  180. return el.product && el.quantity > 0 && el.price > 0 && el.sum > 0 && el.item_id > 0;
  181. },
  182. hasSpeicher(el) {
  183. return el.speicher ? '' : "alert alert-warning";
  184. },
  185. hasFarbe(el) {
  186. return el.farbe ? '' : "alert alert-warning";
  187. },
  188. editRow(key) {
  189. if (this.canDeleteItem) {
  190. this.$emit('editItem', key)
  191. }
  192. },
  193. recalc(key) {
  194. this.$emit('recalc', key)
  195. },
  196. }
  197. }
  198. </script>
  199.  
  200. <style scoped>
  201. .click-filter {
  202. cursor: pointer;
  203. }
  204. </style>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement