index.blade.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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.officialAmount }}</span></td>
  46. <td class="td-warm text-muted"><span>@{{ item.officialHour.toFixed(2) }}</span></td>
  47. <td class="td-warm text-muted"><span>@{{ item.temporaryAmount }}</span></td>
  48. <td class="td-warm text-muted"><span>@{{ item.temporaryHour.toFixed(2) }}</span></td>
  49. <td class="td-warm text-muted"><span>@{{ item.workAmountTotal.toFixed(2) }}</span></td>
  50. <td class="td-warm text-muted"><span>@{{ item.hourWorkAmount.toFixed(2) }}</span></td>
  51. <td class="td-warm text-muted"><span>@{{ item.workCostTotal.toFixed(2) }}</span></td>
  52. <td class="td-warm text-muted"><span>@{{ item.workEfficiency.toFixed(2) }}</span></td>
  53. <td class="td-warm text-muted">
  54. <button @click="showDetail(item.id)" type="button"
  55. class="btn btn-primary" data-toggle="modal"
  56. data-target="#staticBackdrop">
  57. 查看明细
  58. </button>
  59. </td>
  60. </tr>
  61. </table>
  62. <nav aria-label="...">
  63. <ul class="pagination">
  64. <li class="page-item" :class="current===1?'disabled':''">
  65. <button class="page-link" @click="pagination('pre')">上一页</button>
  66. </li>
  67. <li class="page-item" :class="current===details.pages?'disabled':''">
  68. <button class="page-link" @click="pagination('next')">下一页</button>
  69. </li>
  70. </ul>
  71. </nav>
  72. <!-- Modal -->
  73. <div class="modal fade" id="staticBackdrop" tabindex="-1" aria-labelledby="staticBackdropLabel"
  74. aria-hidden="true">
  75. <div class="modal-dialog modal-lg">
  76. <div class="modal-content">
  77. <div class="modal-header">
  78. <h5 class="modal-title" id="staticBackdropLabel">明细</h5>
  79. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  80. <span aria-hidden="true">&times;</span>
  81. </button>
  82. </div>
  83. <div class="modal-body">
  84. <div class="modal-dialog-scrollable justify-content-center">
  85. <table class="table table-sm text-nowrap"
  86. style="background: #fff;" id="tableDetail">
  87. <tr v-for="(item,i) in resData.detail.data" :key="i">
  88. <td class="td-warm text-muted text-center"><span>@{{ i+1 }}</span></td>
  89. <td class="td-warm text-muted text-center"><span>@{{ item.date }}</span>
  90. </td>
  91. <td class="td-warm text-muted text-center"><span>@{{ item.ownerName }}</span></td>
  92. <td class="td-warm text-muted text-center"><span>@{{ item.type }}</span>
  93. </td>
  94. <td class="td-warm text-muted text-center"><span>@{{ item.coefficient }}</span></td>
  95. <td class="td-warm text-muted text-center"><span>@{{ item.typeDetail }}</span></td>
  96. <td class="td-warm text-muted text-center"><span>@{{ item.amount }}</span></td>
  97. <td class="td-warm text-muted text-center"><span>@{{ item.score }}</span></td>
  98. </tr>
  99. </table>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. @endsection
  107. @section('lastScript')
  108. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  109. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  110. <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
  111. <script>
  112. let vue = new Vue({
  113. el: "#list",
  114. data: {
  115. selectTr: '',
  116. userWorkgroups: [
  117. @foreach($userWorkgroups as $userWorkgroup)
  118. {
  119. name: '{{$userWorkgroup->name}}', id: '{{$userWorkgroup->id}}'
  120. },
  121. @endforeach
  122. ],
  123. resData: {
  124. detail: {
  125. data: [],
  126. total: 0,
  127. current: 1,
  128. pages: 0,
  129. size: 50,
  130. }
  131. },
  132. details: {
  133. data: [],
  134. total: null,
  135. current: null,
  136. pages: null,
  137. size: null
  138. },
  139. size: 50,
  140. current: 1,
  141. searchBody: {
  142. startDate: null,
  143. endDate: null,
  144. userWorkgroupIds: [],
  145. }
  146. },
  147. created() {
  148. let url = this.getBaseUrl();
  149. url += `/api/kpiDayWorkCoefficient/list?size=${this.size}&current=${this.current}`;
  150. axios.post(url, this.searchBody).then(res => {
  151. this.details.data = res.data.data.list;
  152. this.details.total = res.data.data.page.total;
  153. this.details.current = res.data.data.page.pageNum;
  154. this.details.pages = res.data.data.page.pages
  155. this.details.size = res.data.data.page.pageSize;
  156. });
  157. },
  158. mounted: function () {
  159. $('#list').removeClass('d-none');
  160. this.rendingHeader();
  161. this.rendingHeader2();
  162. },
  163. methods: {
  164. showDetail(id) {
  165. let url = this.getBaseUrl() + `/api/kpiDayWorkCoefficient/${id}`
  166. axios.get(url).then(res => {
  167. tempTip.showSuccess('查询成功!');
  168. if (res.data.code !== 200) {
  169. tempTip.show('接口异常!');
  170. this.resData.detail.data = [];
  171. this.resData.detail.total = 0;
  172. this.resData.detail.current = 1;
  173. this.resData.detail.pages = 0;
  174. this.resData.detail.size = 50;
  175. } else {
  176. this.resData.detail.data = res.data.data.list;
  177. this.resData.detail.total = res.data.data.page.total;
  178. this.resData.detail.current = res.data.data.page.pageNum;
  179. this.resData.detail.pages = res.data.data.page.pages
  180. this.resData.detail.size = res.data.data.page.pageSize;
  181. }
  182. });
  183. },
  184. resetSearch() {
  185. this.current = 1;
  186. this.size = 50;
  187. this.search = {
  188. startDate: '',
  189. endDate: '',
  190. customerCodeList: [],
  191. }
  192. },
  193. searchData() {
  194. this.current = 1;
  195. this.pagination();
  196. },
  197. //根据环境获取不同的url
  198. getBaseUrl() {
  199. let url = '';
  200. let env = "{{ config('app.env') }}";
  201. if (env === 'local') {
  202. url = 'http://127.0.0.1:8111'
  203. } else if (env === 'production') {
  204. url = 'https://stat.baoshi56.com'
  205. }
  206. return url;
  207. },
  208. pagination(flag) {
  209. if (flag === 'pre' && this.current > 1) {
  210. this.current--;
  211. } else if (flag === 'next' && this.current < this.details.pages) {
  212. this.current++;
  213. }
  214. let env = "{{ config('env') }}";
  215. console.log(env);
  216. let url = this.getBaseUrl();
  217. let parameters = {
  218. current: this.current,
  219. size: this.size,
  220. };
  221. url += `/api/kpiDayWorkCoefficient/list?size=${this.size}&current=${this.current}`;
  222. axios.post(url, this.searchBody).then(res => {
  223. this.details.data = res.data.data.list;
  224. this.details.total = res.data.data.page.total;
  225. this.details.current = res.data.data.page.pageNum;
  226. this.details.pages = res.data.data.page.pages
  227. this.details.size = res.data.data.page.pageSize;
  228. });
  229. },
  230. rendingHeader() {
  231. let column = [
  232. {name: 'department_name', value: '工作组', neglect: true, class: "td-cool"},
  233. {name: 'stat_time', value: '日期', neglect: true, class: "td-cool"},
  234. {name: 'attendance_num', value: '出勤人数', neglect: true, class: "td-cool"},
  235. {name: 'official_attendance_num', value: '正式工人数', neglect: true, class: "td-cool"},
  236. {name: 'official_work_times', value: '正式工工时', neglect: true, class: "td-cool"},
  237. {name: 'temporary_attendance_num', value: '临时工人数', class: "td-cool"},
  238. {name: 'temporary_work_times', value: '临时工工时', neglect: true, class: "td-cool"},
  239. {name: 'work_total', value: '工作总量', class: "td-warm"},
  240. {name: 'quaque_hour_work', value: '每人小时工作量', neglect: true, class: "td-warm"},
  241. {name: 'work_cost_total', value: '用工总成本', neglect: true, class: "td-warm"},
  242. {name: 'cost_efficiency', value: '能效系数', neglect: true, class: "td-warm"},
  243. {name: 'action', value: '操作', neglect: true, class: "td-warm"},
  244. ];
  245. new Header({
  246. el: "table",
  247. name: "details",
  248. column: column,
  249. data: this.details.data,
  250. restorationColumn: 'id',
  251. fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 2,
  252. before: [
  253. {colspan: '8', value: '工时', class: "table-header-layer-1"},
  254. {colspan: '5', value: '工作量', class: "table-header-layer-1"},
  255. ],
  256. }).init();
  257. },
  258. rendingHeader2() {
  259. let column = [
  260. {name: 'id', value: '序号'},
  261. {name: 'date', value: '日期'},
  262. {name: 'ownerName', value: '货主'},
  263. {name: 'type', value: '类型'},
  264. {name: 'coefficient', value: '计分'},
  265. {name: 'typeDetail', value: '单据类型'},
  266. {name: 'amount', value: '完成数量'},
  267. {name: 'score', value: '总分'},
  268. ];
  269. new Header({
  270. el: "tableDetail",
  271. name: "details",
  272. column: column,
  273. data: this.resData.detail.data,
  274. restorationColumn: 'addtime',
  275. isCheckAllBox: false,
  276. fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
  277. }).init();
  278. },
  279. },
  280. });
  281. </script>
  282. @endsection