area.blade.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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. <!-- pc >544 -->
  11. <div class="d-none d-sm-block">
  12. <div id="form_div"></div>
  13. <div>
  14. <button type="button" class="btn btn-outline-dark btn-sm dropdown-toggle tooltipTarget"
  15. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">
  16. 导出Excel
  17. </button>
  18. <div class="dropdown-menu">
  19. <a class="dropdown-item" @click="areaExport(false)" href="javascript:">导出勾选内容</a>
  20. <a class="dropdown-item" @click="areaExport(true)" href="javascript:">导出所有页</a>
  21. </div>
  22. <button class="ml-1 btn btn-sm btn-outline-primary" data-toggle="modal" data-target="#selectedOwner">新 增</button>
  23. </div>
  24. <table class="table table-sm table-striped table-hover table-bordered" id="table">
  25. <tr v-for="(area,i) in areas">
  26. <td>
  27. <label><input type="checkbox" :value="area.id"></label>
  28. </td>
  29. <td>@{{ i+1 }}</td>
  30. <td>
  31. <span v-if="area.status=='编辑中'">
  32. <button class="btn btn-sm btn-outline-info" @click="edit(area,i)">编辑</button>
  33. @can("项目管理-项目-用仓盘点-审核")<button class="btn btn-sm btn-outline-success" v-if="area.accountingArea" @click="audit(i)">审核</button>@endcan
  34. </span>
  35. <span v-if="area.status=='已完成'" class="text-success font-weight-bold">@{{ area.status }}</span>
  36. <span v-if="area.status=='已审核'" class="text-primary font-weight-bold">@{{ area.status }}</span>
  37. </td>
  38. <td style="min-width: 50px">@{{ area.userOwnerGroupName }}</td>
  39. <td style="min-width: 50px">@{{ area.customerName }}</td>
  40. <td>@{{ area.ownerName }}</td>
  41. <td>@{{ area.countingMonth }}</td>
  42. <td>@{{ area.updatedAt }}</td>
  43. <td>@{{ area.ownerStoragePriceModel }}</td>
  44. <td>@{{ area.unitName }}</td>
  45. <td>@{{ area.areaOnTray }}</td>
  46. <td>@{{ area.areaOnHalfTray }}</td>
  47. <td>@{{ area.areaOnFlat }}</td>
  48. <td>@{{ area.accountingArea }}</td>
  49. </tr>
  50. </table>
  51. </div>
  52. <!-- phone <544 -->
  53. <div class="d-xl-none">
  54. <div v-for="(area,i) in areas" class="mt-1 border border-1 rounded"
  55. @click="openAll(i)">
  56. <div class="row">
  57. <div class="col-4">
  58. <label class="text-muted">序号:</label>@{{ i+1 }}
  59. </div>
  60. <div class="col-4 text-center">
  61. <b :class="area.status=='编辑中' ? 'text-secondary' : (area.status=='已完成' ? 'text-success' : 'text-primary')">@{{ area.status }}</b>
  62. </div>
  63. <div class="col-4">
  64. <span class="pull-right mr-1 text-primary font-weight-bold small" v-if="area.unitName=='m²' && area.status=='编辑中'">点击展开编辑</span>
  65. </div>
  66. </div>
  67. <div class="row">
  68. <div class="col-6">
  69. <label class="text-muted">项目:</label>@{{ area.ownerName }}
  70. </div>
  71. <div class="col-6">
  72. <label class="text-muted">客户:</label>@{{ area.customerName }}
  73. </div>
  74. </div>
  75. <div class="row">
  76. <div class="col-6">
  77. <label class="text-muted">用仓:</label>@{{ area.ownerStoragePriceModel }}
  78. </div>
  79. <div class="col-6">
  80. <label class="text-muted">单位:</label>@{{ area.unitName }}
  81. </div>
  82. </div>
  83. <div class="row">
  84. <div class="col-6">
  85. <label class="text-muted">项目组:</label>@{{ area.userOwnerGroupName }}
  86. </div>
  87. <div class="col-6">
  88. <label class="text-muted">结算月:</label>@{{ area.countingMonth }}
  89. </div>
  90. </div>
  91. <div class="row font-weight-bold">
  92. <div class="col-6">
  93. <label class="text-dark">结算值:</label>@{{ area.accountingArea }}
  94. </div>
  95. <div class="col-6">
  96. <label class="text-dark">平面区:</label>@{{ area.areaOnFlat }}
  97. </div>
  98. </div>
  99. <div class="row font-weight-bold">
  100. <div class="col-6">
  101. <label class="text-dark">货物整托:</label>@{{ area.areaOnTray }}
  102. </div>
  103. <div class="col-6">
  104. <label class="text-dark">货物半托:</label>@{{ area.areaOnHalfTray }}
  105. </div>
  106. </div>
  107. <div :id="'area_'+i" class="up" v-if="area.unitName=='m²' && area.status=='编辑中'">
  108. <div class="row">
  109. <label class="text-dark col-4">平面区:</label>
  110. <label class="col-8">
  111. <input :id="'item-'+i+'-areaOnFlat'" class="form-control form-control-sm" type="number" step="0.01" min="0" :value="area.areaOnFlat" @click="$event.stopPropagation();">
  112. </label>
  113. </div>
  114. <div class="row">
  115. <label class="text-dark col-4">货物整托:</label>
  116. <label class="col-8">
  117. <input :id="'item-'+i+'-areaOnTray'" class="form-control form-control-sm" type="number" step="0.01" min="0" :value="area.areaOnTray" @click="$event.stopPropagation();">
  118. </label>
  119. </div>
  120. <div class="row">
  121. <label class="text-dark col-4">货物半托:</label>
  122. <label class="col-8">
  123. <input :id="'item-'+i+'-areaOnHalfTray'" class="form-control form-control-sm" type="number" step="0.01" min="0" :value="area.areaOnHalfTray" @click="$event.stopPropagation();">
  124. </label>
  125. </div>
  126. <div class="row">
  127. <div class="col-10 offset-1">
  128. @can('项目管理-项目-用仓盘点-审核')<button type="button" @click.stop="submitArea(i)" class="btn btn-sm btn-outline-primary w-100">提交编辑</button>@endcan
  129. </div>
  130. </div>
  131. </div>
  132. <div class="row mt-2" v-if="area.status=='编辑中'">
  133. <div class="col-10 offset-1">
  134. @can('项目管理-项目-用仓盘点-审核')<button type="button" @click.stop="audit(i)" class="btn btn-sm btn-outline-success w-100">审核</button>@endcan
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. {{$areas->appends($params)->links()}}
  140. </div>
  141. @stop
  142. @section('lastScript')
  143. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  144. <script type="text/javascript" src="{{asset('js/queryForm/header.js')}}"></script>{{--新版--}}
  145. <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
  146. <script>
  147. let vue = new Vue({
  148. el:"#container",
  149. data:{
  150. areas : [
  151. @foreach($areas as $area)
  152. {
  153. id : "{{$area->id}}",
  154. ownerGroupId : "{{$area->user_owner_group_id}}",
  155. userOwnerGroupName : "{{$area->userOwnerGroup->name ?? ''}}",
  156. ownerName : "{{$area->owner ? $area->owner->name : ''}}",
  157. customerName : "{{$area->owner ? ($area->owner->customer ? $area->owner->customer->name : '') : ''}}",
  158. countingMonth : "{{$area->counting_month}}",
  159. areaOnTray : "{{$area->area_on_tray}}",
  160. areaOnHalfTray : "{{$area->area_on_half_tray}}",
  161. areaOnFlat : "{{$area->area_on_flat}}",
  162. accountingArea : "{{$area->accounting_area}}",
  163. status : "{{$area->status}}",
  164. updatedAt : "{{$area->updated_at}}",
  165. ownerStoragePriceModel:"{{ $area->ownerStoragePriceModel ? $area->ownerStoragePriceModel->using_type : '' }}",
  166. unitName:"{{ $area->ownerStoragePriceModel->unit->name ?? '' }}",
  167. },
  168. @endforeach
  169. ],
  170. ownerGroups : [
  171. @foreach($ownerGroups as $ownerGroup)
  172. {name:"{{$ownerGroup->id}}",value:"{{$ownerGroup->name}}"},
  173. @endforeach
  174. ],
  175. customers : [
  176. @foreach($customers as $customer)
  177. {name:"{{$customer->id}}",value:"{{$customer->name}}"},
  178. @endforeach
  179. ],
  180. owners : [
  181. @foreach($owners as $owner)
  182. {name:"{{$owner->id}}",value:"{{$owner->name}}"},
  183. @endforeach
  184. ],
  185. status : [{name:"编辑中",value:"编辑中"},{name:"已审核",value:"已审核"},{name:"已完成",value:"已完成"}],
  186. sum : Number("{{ $areas->total() }}"),
  187. errors:[],
  188. area:{},
  189. index:"",
  190. },
  191. mounted(){
  192. $(".up").slideUp();
  193. $('#container').removeClass('d-none');
  194. let data=[
  195. [
  196. {name:'owner_group_id',type:'select',tip:'项目小组',placeholder: '项目小组',data:this.ownerGroups},
  197. {name:'counting_month_start',type:'dateMonth',tip:'起始结算月'},
  198. {name:'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的项目'],
  199. placeholder:['项目','定位或多选项目'],data:this.owners},
  200. ],[
  201. {name:'customer_id',type:'select',tip:'客户',placeholder: '客户',data:this.customers},
  202. {name:'counting_month_end',type:'dateMonth',tip:'结束结算月'},
  203. {name:'status',type:'select',tip:'状态',placeholder: '状态',data:this.status},
  204. ],
  205. ];
  206. this.form = new query({
  207. el:"#form_div",
  208. condition:data,
  209. });
  210. this.form.init();
  211. let column = [
  212. {name:'index',value: '序号', neglect: true},
  213. {name:'status',value: '状态'},
  214. {name:'userOwnerGroupName',value: '项目组'},
  215. {name:'customerName',value: '客户'},
  216. {name:'ownerName',value: '子项目'},
  217. {name:'countingMonth',value: '结算月'},
  218. {name:'createdAt',value: '录入时间'},
  219. {name:'ownerStoragePriceModel',value: '用仓类型'},
  220. {name:'unitName',value: '单位'},
  221. {name:'areaOnTray',value: '货物整托', neglect: true},
  222. {name:'areaOnHalfTray',value: '货物半托', neglect: true},
  223. {name:'areaOnFlat',value: '平面区', neglect: true},
  224. {name:'accountingArea',value: '结算', neglect: true},
  225. ];
  226. new Header({
  227. el: "table",
  228. column: column,
  229. isCheckAllBox: false,
  230. data: this.areas,
  231. fixedTop:($('#form_div').height())+2,
  232. }).init();
  233. },
  234. methods:{
  235. openAll(index){
  236. $("#area_"+index).slideToggle();
  237. },
  238. areaExport(isAll){
  239. let url = '{{url('customer/project/area/export')}}';
  240. let token='{{ csrf_token() }}';
  241. excelExport(isAll,checkData,url,this.sum,token);
  242. },
  243. edit(area,index){
  244. $("#editArea").modal("show");
  245. this.area = Object.assign({},area);
  246. this.index = index;
  247. },
  248. submitArea(i = null){
  249. let url = "{{url('customer/project/updateArea')}}";
  250. let param = this.area;
  251. let index = this.index;
  252. if (i!==null){
  253. index = i;
  254. param = {id:this.areas[i].id,areaOnTray:document.getElementById("item-"+i+"-areaOnTray").value,
  255. areaOnHalfTray:document.getElementById("item-"+i+"-areaOnHalfTray").value,areaOnFlat:document.getElementById("item-"+i+"-areaOnFlat").value};
  256. }
  257. window.tempTip.postBasicRequest(url,param,res=>{
  258. if (this.areas[index].ownerGroupId !== res.user_owner_group_id){
  259. this.areas[index].ownerGroupId = res.user_owner_group_id;
  260. this.ownerGroups.some(group=>{
  261. if(group.name === res.user_owner_group_id){
  262. this.areas[index].userOwnerGroupName = group.value;
  263. return true;
  264. }
  265. });
  266. }
  267. this.areas[index].areaOnTray = res.area_on_tray;
  268. this.areas[index].areaOnHalfTray = res.area_on_half_tray;
  269. this.areas[index].areaOnFlat = res.area_on_flat;
  270. this.areas[index].accountingArea = res.accounting_area;
  271. $("#editArea").modal("hide");
  272. return "修改成功";
  273. },true);
  274. },
  275. createReport(isAll = false){
  276. let dom = $("#owners");
  277. let val = dom.selectpicker('val');
  278. if (isAll){
  279. val = [];
  280. this.owners.forEach(owner=>{
  281. val.push(owner.name);
  282. });
  283. }
  284. window.tempTip.setDuration(3000);
  285. window.tempTip.setIndex(1099);
  286. if (val.length<1){
  287. window.tempTip.show("未选择");
  288. return;
  289. }
  290. let url="{{url('customer/project/createAreaReport')}}";
  291. let params = {val:val};
  292. window.tempTip.postBasicRequest(url,params,res=>{
  293. res.forEach(data =>{
  294. if (this.areas.every(area=>{
  295. if (area.id == data.id)return false;
  296. else return true;
  297. }))this.areas.unshift(data);
  298. });
  299. dom.selectpicker('val',[]);
  300. return "已生成报表";
  301. },true)
  302. },
  303. audit(index){
  304. window.tempTip.confirm("确定要通过该盘点记录的审核吗?",()=>{
  305. let area = this.areas[index];
  306. let url = '{{url('customer/project/areaReportAudit')}}';
  307. window.tempTip.postBasicRequest(url,{id:area.id},()=>{
  308. this.areas[index].status = "已审核";
  309. return "审核通过";
  310. });
  311. })
  312. },
  313. },
  314. });
  315. </script>
  316. @stop