area.blade.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. @extends('layouts.app')
  2. @section('title')
  3. 用仓盘点-客户管理
  4. @endsection
  5. @section('content')
  6. @component('customer.project.menu')@endcomponent
  7. <div class="container-fluid d-none" id="container">
  8. @include("customer._selectedOwner")
  9. @include("customer.project._editArea")
  10. <div id="form_div"></div>
  11. <div>
  12. <button type="button" class="btn btn-outline-dark btn-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
  13. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
  14. 导出Excel
  15. </button>
  16. <div class="dropdown-menu">
  17. <a class="dropdown-item" @click="areaExport(false)" href="javascript:">导出勾选内容</a>
  18. <a class="dropdown-item" @click="areaExport(true)" href="javascript:">导出所有页</a>
  19. </div>
  20. <button class="ml-1 btn btn-sm btn-outline-primary" data-toggle="modal" data-target="#selectedOwner">新 增</button>
  21. </div>
  22. <div>
  23. <label for="all" id="cloneCheckAll" class="d-none">
  24. <input id="all" type="checkbox" @click="checkAll($event)">全选
  25. </label>
  26. <table class="d-none" id="headerRoll"></table>
  27. <table class="table table-sm table-striped table-hover" id="headerParent">
  28. <tr class="text-nowrap" id="header"></tr>
  29. <tr v-for="(area,i) in areas">
  30. <td>
  31. <label><input type="checkbox" :value="area.id" v-model="checkData"></label>
  32. </td>
  33. <td>@{{ i+1 }}</td>
  34. <td>
  35. <span v-if="area.status=='编辑中'">
  36. <button class="btn btn-sm btn-outline-info" @click="edit(area,i)">编辑</button>
  37. <button class="btn btn-sm btn-outline-success" v-if="area.accountingArea" @click="audit(i)">审核</button>
  38. </span>
  39. <span v-if="area.status=='已完成'" class="text-success font-weight-bold">@{{ area.status }}</span>
  40. <span v-if="area.status=='已审核'" class="text-primary font-weight-bold">@{{ area.status }}</span>
  41. </td>
  42. <td>@{{ area.userOwnerGroupName }}</td>
  43. <td>@{{ area.customerName }}</td>
  44. <td>@{{ area.ownerName }}</td>
  45. <td>@{{ area.countingMonth }}</td>
  46. <td>@{{ area.updatedAt }}</td>
  47. <td>@{{ area.ownerStoragePriceModel }}</td>
  48. <td>@{{ area.unitName }}</td>
  49. <td>@{{ area.areaOnTray }}</td>
  50. <td>@{{ area.areaOnHalfTray }}</td>
  51. <td>@{{ area.areaOnFlat }}</td>
  52. <td>@{{ area.accountingArea }}</td>
  53. </tr>
  54. </table>
  55. {{$areas->appends($params)->links()}}
  56. </div>
  57. </div>
  58. @stop
  59. @section('lastScript')
  60. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  61. <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
  62. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  63. <script>
  64. let vue = new Vue({
  65. el:"#container",
  66. data:{
  67. areas : [
  68. @foreach($areas as $area)
  69. {
  70. id : "{{$area->id}}",
  71. ownerGroupId : "{{$area->user_owner_group_id}}",
  72. userOwnerGroupName : "{{$area->userOwnerGroup->name ?? ''}}",
  73. ownerName : "{{$area->owner ? $area->owner->name : ''}}",
  74. customerName : "{{$area->owner ? ($area->owner->customer ? $area->owner->customer->name : '') : ''}}",
  75. countingMonth : "{{$area->counting_month}}",
  76. areaOnTray : "{{$area->area_on_tray}}",
  77. areaOnHalfTray : "{{$area->area_on_half_tray}}",
  78. areaOnFlat : "{{$area->area_on_flat}}",
  79. accountingArea : "{{$area->accounting_area}}",
  80. status : "{{$area->status}}",
  81. updatedAt : "{{$area->updated_at}}",
  82. ownerStoragePriceModel:"{{ $area->ownerStoragePriceModel ? $area->ownerStoragePriceModel->using_type : '' }}",
  83. unitName:"{{ $area->ownerStoragePriceModel->unit->name ?? '' }}",
  84. },
  85. @endforeach
  86. ],
  87. ownerGroups : [
  88. @foreach($ownerGroups as $ownerGroup)
  89. {name:"{{$ownerGroup->id}}",value:"{{$ownerGroup->name}}"},
  90. @endforeach
  91. ],
  92. customers : [
  93. @foreach($customers as $customer)
  94. {name:"{{$customer->id}}",value:"{{$customer->name}}"},
  95. @endforeach
  96. ],
  97. owners : [
  98. @foreach($owners as $owner)
  99. {name:"{{$owner->id}}",value:"{{$owner->name}}"},
  100. @endforeach
  101. ],
  102. status : [{name:"编辑中",value:"编辑中"},{name:"已审核",value:"已审核"},{name:"已完成",value:"已完成"}],
  103. checkData : [],
  104. sum : Number("{{ $areas->total() }}"),
  105. errors:[],
  106. area:{},
  107. index:"",
  108. },
  109. watch:{
  110. checkData:{
  111. handler(){
  112. if (this.checkData.length === this.areas.length){
  113. document.querySelector('#all').checked = true;
  114. document.querySelector('#all_temp').checked = true;
  115. }else {
  116. document.querySelector('#all').checked = false;
  117. document.querySelector('#all_temp').checked = false;
  118. }
  119. },
  120. deep:true
  121. }
  122. },
  123. mounted(){
  124. $('#container').removeClass('d-none');
  125. let data=[
  126. [
  127. {name:'owner_group_id',type:'select',tip:'项目小组',placeholder: '项目小组',data:this.ownerGroups},
  128. {name:'counting_month_start',type:'dateMonth',tip:'起始结算月'},
  129. {name:'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的项目'],
  130. placeholder:['项目','定位或多选项目'],data:this.owners},
  131. ],[
  132. {name:'customer_id',type:'select',tip:'客户',placeholder: '客户',data:this.customers},
  133. {name:'counting_month_end',type:'dateMonth',tip:'结束结算月'},
  134. {name:'status',type:'select',tip:'状态',placeholder: '状态',data:this.status},
  135. ],
  136. ];
  137. this.form = new query({
  138. el:"#form_div",
  139. condition:data,
  140. });
  141. this.form.init();
  142. let column = [
  143. {name:'cloneCheckAll',customization:true,type:'checkAll',column:'id',
  144. dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
  145. {name:'index',value: '序号', neglect: true},
  146. {name:'status',value: '状态'},
  147. {name:'userOwnerGroupName',value: '项目组'},
  148. {name:'customerName',value: '客户'},
  149. {name:'ownerName',value: '子项目'},
  150. {name:'countingMonth',value: '结算月'},
  151. {name:'createdAt',value: '录入时间'},
  152. {name:'ownerStoragePriceModel',value: '用仓类型'},
  153. {name:'unitName',value: '单位'},
  154. {name:'areaOnTray',value: '货物整托', neglect: true},
  155. {name:'areaOnHalfTray',value: '货物半托', neglect: true},
  156. {name:'areaOnFlat',value: '平面区', neglect: true},
  157. {name:'accountingArea',value: '结算', neglect: true},
  158. ];
  159. let _this=this;
  160. setTimeout(function () {
  161. let header = new Header({
  162. el: "#header",
  163. column: column,
  164. data: _this.reports,
  165. restorationColumn: 'id',
  166. fixedTop:($('#form_div').height())+2,
  167. offset:0.5,
  168. vue:vue
  169. });
  170. header.init();
  171. },0);
  172. },
  173. methods:{
  174. areaExport(isAll){
  175. let url = '{{url('customer/project/area/export')}}';
  176. let token='{{ csrf_token() }}';
  177. //excelExport 定义在 js/queryForm/export.js
  178. excelExport(isAll,this.checkData,url,this.sum,token);
  179. },
  180. //全选事件
  181. checkAll(e){
  182. if (e.target.checked){
  183. this.areas.forEach((el)=>{
  184. if (this.checkData.indexOf(el.id) === '-1'){
  185. this.checkData.push(el.id);
  186. }
  187. });
  188. }else {
  189. this.checkData = [];
  190. }
  191. },
  192. edit(area,index){
  193. $("#editArea").modal("show");
  194. this.area = Object.assign({},area);
  195. this.index = index;
  196. },
  197. submitArea(){
  198. let url = "{{url('customer/project/updateArea')}}";
  199. window.tempTip.postBasicRequest(url,this.area,res=>{
  200. if (this.areas[this.index].ownerGroupId !== res.user_owner_group_id){
  201. this.areas[this.index].ownerGroupId = res.user_owner_group_id;
  202. this.ownerGroups.some(group=>{
  203. if(group.name === res.user_owner_group_id){
  204. this.areas[this.index].userOwnerGroupName = group.value;
  205. return true;
  206. }
  207. });
  208. }
  209. this.areas[this.index].areaOnTray = res.area_on_tray;
  210. this.areas[this.index].areaOnHalfTray = res.area_on_half_tray;
  211. this.areas[this.index].areaOnFlat = res.area_on_flat;
  212. this.areas[this.index].accountingArea = res.accounting_area;
  213. $("#editArea").modal("hide");
  214. return "修改成功";
  215. },true);
  216. },
  217. createReport(isAll = false){
  218. let dom = $("#owners");
  219. let val = dom.selectpicker('val');
  220. if (isAll){
  221. val = [];
  222. this.owners.forEach(owner=>{
  223. val.push(owner.name);
  224. });
  225. }
  226. window.tempTip.setDuration(3000);
  227. window.tempTip.setIndex(1099);
  228. if (val.length<1){
  229. window.tempTip.show("未选择");
  230. return;
  231. }
  232. let url="{{url('customer/project/createAreaReport')}}";
  233. let params = {val:val};
  234. window.tempTip.postBasicRequest(url,params,res=>{
  235. res.forEach(data =>{
  236. if (this.areas.every(area=>{
  237. if (area.id == data.id)return false;
  238. else return true;
  239. }))this.areas.unshift(data);
  240. });
  241. dom.selectpicker('val',[]);
  242. return "已生成报表";
  243. },true)
  244. },
  245. audit(index){
  246. window.tempTip.confirm("确定要通过该盘点记录的审核吗?",()=>{
  247. let area = this.areas[index];
  248. let url = '{{url('customer/project/areaReportAudit')}}';
  249. window.tempTip.postBasicRequest(url,{id:area.id},()=>{
  250. this.areas[index].status = "已审核";
  251. return "审核通过";
  252. });
  253. })
  254. },
  255. },
  256. });
  257. </script>
  258. @stop