index.blade.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. @extends('layouts.app')
  2. @section('title')KPI-日报表(工作量)@endsection
  3. @section('content')
  4. <div class="d-none" id="list">
  5. <div class="row m-3" style="background-color: #fff;">
  6. <div class="form-group m-2">
  7. <select class="form-control selectpicker" title="分页大小" v-model="size">
  8. <option value="50">50</option>
  9. <option value="100">100</option>
  10. <option value="200">200</option>
  11. <option value="500">500</option>
  12. <option value="1000">1000</option>
  13. </select>
  14. </div>
  15. <div class="form-group m-2" style="max-width: 200px !important;">
  16. <select v-model="searchBody.userWorkgroupIds" class="selectpicker form-control" multiple title="选择工作组"
  17. data-actions-box="true"
  18. data-live-search="true"
  19. data-live-search-placeholder="搜索"
  20. >
  21. <option v-for="(v,k) of userWorkgroups" :value="v.id" :key="v.id">@{{ v.name }}</option>
  22. </select>
  23. </div>
  24. <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="起始日期">
  25. <input v-model="searchBody.startDate" class="form-control" type="date">
  26. </div>
  27. <div class="form-group m-2" data-toggle="tooltip" data-placement="top" title="截止日期">
  28. <input v-model="searchBody.endDate" class="form-control" type="date">
  29. </div>
  30. <div class="form-group m-2">
  31. <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
  32. </div>
  33. <div class="form-group m-2">
  34. <button class="form-control btn btn-sm btn-success" @click="resetSearch()">重置</button>
  35. </div>
  36. </div>
  37. <!-- 表格-->
  38. <table class="table table-striped table-bordered table-hover text-nowrap waybill-table td-min-width-80"
  39. style="background: #fff;" id="table">
  40. <tr v-for="(item,i) in details.data" :key="i">
  41. <td><input class="checkItem" type="checkbox" :value="item.id"></td>
  42. <td class="td-warm text-muted"><span>@{{ item.userWorkgroupName }}</span></td>
  43. <td class="td-warm text-muted"><span>@{{ item.statDate.slice(0,10) }}</span></td>
  44. <td class="td-warm text-muted"><span>@{{ item.attendanceAmount }}</span></td>
  45. <td class="td-warm text-muted"><span>@{{ item.officialHour.toFixed(2) }}</span></td>
  46. <td class="td-warm text-muted"><span>@{{ item.temporaryAmount }}</span></td>
  47. <td class="td-warm text-muted"><span>@{{ item.temporaryHour.toFixed(2) }}</span></td>
  48. <td class="td-warm text-muted"><span>@{{ item.workAmountTotal.toFixed(2) }}</span></td>
  49. <td class="td-warm text-muted"><span>@{{ item.hourWorkAmount.toFixed(2) }}</span></td>
  50. <td class="td-warm text-muted"><span>@{{ item.workCostTotal.toFixed(2) }}</span></td>
  51. <td class="td-warm text-muted"><span>@{{ item.workEfficiency.toFixed(2) }}</span></td>
  52. </tr>
  53. </table>
  54. <nav aria-label="...">
  55. <ul class="pagination">
  56. <li class="page-item" :class="current===1?'disabled':''">
  57. <button class="page-link" @click="pagination('pre')">上一页</button>
  58. </li>
  59. <li class="page-item" :class="current===details.pages?'disabled':''">
  60. <button class="page-link" @click="pagination('next')">下一页</button>
  61. </li>
  62. </ul>
  63. </nav>
  64. </div>
  65. @endsection
  66. @section('lastScript')
  67. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  68. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  69. <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
  70. <script>
  71. let vue = new Vue({
  72. el: "#list",
  73. data: {
  74. selectTr: '',
  75. userWorkgroups: [
  76. @foreach($userWorkgroups as $userWorkgroup)
  77. {
  78. name: '{{$userWorkgroup->name}}', id: '{{$userWorkgroup->id}}'
  79. },
  80. @endforeach
  81. ],
  82. details: {
  83. data: [],
  84. total: null,
  85. current: null,
  86. pages: null,
  87. size: null
  88. },
  89. size: 50,
  90. current: 1,
  91. searchBody: {
  92. startDate: null,
  93. endDate: null,
  94. userWorkgroupIds: [],
  95. }
  96. },
  97. created() {
  98. let url = this.getBaseUrl();
  99. url += `/api/kpiDayWorkCoefficient/listPage?size=${this.size}&current=${this.current}`;
  100. let parameters = {
  101. current: this.current,
  102. size: this.size,
  103. };
  104. axios.post(url, this.searchBody).then(res => {
  105. this.details.data = res.data.data.list;
  106. this.details.total = res.data.data.page.total;
  107. this.details.current = res.data.data.page.pageNum;
  108. this.details.pages = res.data.data.page.pages
  109. this.details.size = res.data.data.page.pageSize;
  110. });
  111. },
  112. mounted: function () {
  113. $('#list').removeClass('d-none');
  114. this.rendingHeader();
  115. },
  116. methods: {
  117. resetSearch() {
  118. this.current = 1;
  119. this.size = 50;
  120. this.search = {
  121. startDate: '',
  122. endDate: '',
  123. customerCodeList: [],
  124. }
  125. },
  126. searchData() {
  127. this.current = 1;
  128. this.pagination();
  129. },
  130. //根据环境获取不同的url
  131. getBaseUrl() {
  132. let url = '';
  133. let env = "{{ config('app.env') }}";
  134. if (env === 'local') {
  135. url = 'http://127.0.0.1:8111'
  136. } else if (env === 'production') {
  137. url = 'https://stat.baoshi56.com'
  138. }
  139. return url;
  140. },
  141. pagination(flag) {
  142. if (flag === 'pre' && this.current > 1) {
  143. this.current--;
  144. } else if (flag === 'next' && this.current < this.details.pages) {
  145. this.current++;
  146. }
  147. let env = "{{ config('env') }}";
  148. console.log(env);
  149. let url = this.getBaseUrl();
  150. let parameters = {
  151. current: this.current,
  152. size: this.size,
  153. };
  154. url += `/api/kpiDayWorkCoefficient/listPage?size=${this.size}&current=${this.current}`;
  155. axios.post(url, this.searchBody).then(res => {
  156. this.details.data = res.data.data.list;
  157. this.details.total = res.data.data.page.total;
  158. this.details.current = res.data.data.page.pageNum;
  159. this.details.pages = res.data.data.page.pages
  160. this.details.size = res.data.data.page.pageSize;
  161. });
  162. },
  163. rendingHeader() {
  164. let column = [
  165. {name: 'department_name', value: '工作组', neglect: true, class: "td-cool"},
  166. {name: 'stat_time', value: '日期', neglect: true, class: "td-cool"},
  167. {name: 'attendance_num', value: '出勤人数', neglect: true, class: "td-cool"},
  168. {name: 'official_attendance_num', value: '正式工工时', neglect: true, class: "td-cool"},
  169. {name: 'temporary_attendance_num', value: '临时工人数', class: "td-cool"},
  170. {name: 'temporary_work_times', value: '临时工工时', neglect: true, class: "td-cool"},
  171. {name: 'work_total', value: '工作总量', class: "td-warm"},
  172. {name: 'quaque_hour_work', value: '每人小时工作量', neglect: true, class: "td-warm"},
  173. {name: 'work_cost_total', value: '用工总成本', neglect: true, class: "td-warm"},
  174. {name: 'cost_efficiency', value: '能效系数', neglect: true, class: "td-warm"},
  175. ];
  176. new Header({
  177. el: "table",
  178. name: "details",
  179. column: column,
  180. data: this.details.data,
  181. restorationColumn: 'id',
  182. fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 2,
  183. before: [
  184. {colspan: '7', value: '工时', class: "table-header-layer-1"},
  185. {colspan: '4', value: '工作量', class: "table-header-layer-1"},
  186. ],
  187. }).init();
  188. },
  189. },
  190. });
  191. </script>
  192. @endsection