area.blade.php 17 KB

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