area.blade.php 17 KB

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