|  |  | 
 |  |  |     /* | 
 |  |  |     查询库存 入库订单与销售单号 | 
 |  |  |      */ | 
 |  |  |     @PostMapping("/query/locDetl/v3") | 
 |  |  |     public R queryAgvLocDetl3(@RequestBody HashMap<String,String> params){ | 
 |  |  |  | 
 |  |  |         String orderNo = params.get("orderNo"); | 
 |  |  |         String threeCode = params.get("threeCode"); | 
 |  |  |         String matnr = params.get("matnr"); | 
 |  |  |         String floor = params.get("floor"); | 
 |  |  |  | 
 |  |  |         Wrapper<AgvLocDetl> wrapper = new EntityWrapper<AgvLocDetl>().eq("matnr", matnr).ne("process_sts",1); | 
 |  |  |  | 
 |  |  |  | 
 |  |  | //        wrapper.eq("orderNo",orderNo); | 
 |  |  |  | 
 |  |  |         wrapper = Cools.isEmpty(threeCode) ? wrapper.isNull("three_code") : wrapper.eq("three_code",threeCode); | 
 |  |  |  | 
 |  |  |         if (threeCode.substring(0,2).equals(30)) { | 
 |  |  |             wrapper.isNull("specs").or().eq("specs","").eq("floor",1); | 
 |  |  |         } | 
 |  |  |         List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(wrapper); | 
 |  |  |         List<AgvLocDetl> locDetls = new ArrayList<>(); | 
 |  |  |         for (AgvLocDetl agvLocDetl : agvLocDetls) { | 
 |  |  |             AgvLocMast agvLocMast = new AgvLocMast(); | 
 |  |  |             if (Cools.isEmpty(floor)) { | 
 |  |  |                 agvLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocDetl.getLocNo()).notLike("loc_no","F1")); | 
 |  |  |             } else { | 
 |  |  |                 agvLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocDetl.getLocNo()).like("loc_no",floor)); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (Cools.isEmpty(agvLocMast)) continue; | 
 |  |  |             agvLocDetl.setLocSts(agvLocMast.getLocSts()); | 
 |  |  |             agvLocDetl.setLocSts$(agvLocMast.getLocSts$()); | 
 |  |  |             locDetls.add(agvLocDetl); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         return R.ok(locDetls); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     查询库存 入库订单与销售单号 | 
 |  |  |      */ | 
 |  |  |     @PostMapping("/query/locDetl/v2") | 
 |  |  |     public R queryAgvLocDetl2(@RequestBody HashMap<String,String> params){ | 
 |  |  |  | 
 |  |  | 
 |  |  |                     throw new CoolException("保存工作明细失败"); | 
 |  |  |                 } | 
 |  |  |                 // 更新订单 | 
 |  |  |                 OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode())); | 
 |  |  |                 OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode())); | 
 |  |  |                 orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  |                 if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no","DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ | 
 |  |  |                 if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ | 
 |  |  |                     throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             // 更新源库位 | 
 |  |  |             AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo)); | 
 |  |  |             locMast.setLocSts("R"); | 
 |  |  |             agvLocMastService.updateById(locMast); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/agv/v3/locMove") | 
 |  |  |     @Transactional | 
 |  |  |     @ManagerAuth(memo = "回调单任务下发") | 
 |  |  |     @Synchronized | 
 |  |  |     public R agvLocMove3(@RequestBody HashMap<String,Object> params){ | 
 |  |  |         Date now = new Date(); | 
 |  |  |         List<HashMap<String,String>> dbList = (List<HashMap<String, String>>) params.get("dbList"); | 
 |  |  |         params.get("dbList"); | 
 |  |  |         for (HashMap<String, String> map : dbList) { | 
 |  |  |             String locNo = map.get("locNo"); | 
 |  |  |             String barcode = map.get("suppCode"); | 
 |  |  |             AgvWrkMast source_loc_no = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", locNo)); | 
 |  |  |             if (!Cools.isEmpty(source_loc_no)) { | 
 |  |  |                 throw new CoolException("当前库位已生成任务!"); | 
 |  |  |             } | 
 |  |  |             AgvLocMast locMastS = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo).eq("loc_sts","F")); | 
 |  |  |             if (Cools.isEmpty(locMastS)) { | 
 |  |  |                 throw new CoolException("当前库位非在库状态!库位号="+locNo); | 
 |  |  |             } | 
 |  |  |             AgvWrkMast wrkMast = createWrkMast(114, 22L, locNo, "", barcode, now, getUserId(), 30,1); | 
 |  |  |             // 同步调拨单 | 
 |  |  |             List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); | 
 |  |  |             for (AgvLocDetl agvLocDetl : agvLocDetls) { | 
 |  |  |                 AgvWrkDetl wrkDetl = new AgvWrkDetl(); | 
 |  |  |                 wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
 |  |  |                 wrkDetl.sync(agvLocDetl); | 
 |  |  |                 wrkDetl.setSuppCode(agvLocDetl.getSuppCode()); | 
 |  |  |                 wrkDetl.setIoTime(now); | 
 |  |  |                 wrkDetl.setAppeUser(getUserId()); | 
 |  |  |                 wrkDetl.setAppeTime(now); | 
 |  |  |                 wrkDetl.setModiUser(getUserId()); | 
 |  |  |                 wrkDetl.setModiTime(now); | 
 |  |  |                 if (!agvWrkDetlService.insert(wrkDetl)) { | 
 |  |  |                     throw new CoolException("保存工作明细失败"); | 
 |  |  |                 } | 
 |  |  |                 // 更新订单 | 
 |  |  |                 // 先查询库订单明细 所属的订单 | 
 |  |  |  | 
 |  |  |                 OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("source",36).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode())); | 
 |  |  |                 orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  |                 if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("source",36).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ | 
 |  |  |                     throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr()); | 
 |  |  |                 } | 
 |  |  |             } | 
 
 |  |  | 
 |  |  |         } | 
 |  |  |         return R.ok(page); | 
 |  |  |     } | 
 |  |  |     @RequestMapping(value = "/order/backStocks/detls/pakin/page/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R backStocksOrderDetls(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                              @RequestParam(defaultValue = "100")Integer limit, | 
 |  |  |                              @RequestParam(required = false)String orderByField, | 
 |  |  |                              @RequestParam(required = false)String orderByType, | 
 |  |  |                              @RequestParam Map<String, Object> param){ | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convert(param, wrapper); | 
 |  |  | //        return R.ok(orderDetlService.getPakoutPage(toPage(curr, limit, param, OrderDetl.class))); | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  |         List<Long> docIds = new ArrayList<>(); | 
 |  |  |         for (DocType pakin : pakins) { | 
 |  |  |             if (pakin.getDocId() == 36) { | 
 |  |  |                 docIds.add(pakin.getDocId()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         wrapper.in("source",docIds); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  |             Double sumAnfme = agvLocDetlService.getSumAnfmeback(record.getMatnr(), record.getThreeCode(),1); | 
 |  |  |             record.setStock(sumAnfme == null ? 0 : sumAnfme); | 
 |  |  |         } | 
 |  |  |         return R.ok(page); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/order/detl/all/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  | 
 |  |  |                 list.add(dto); | 
 |  |  |                 orderDetl.setOrderId(order.getId()); | 
 |  |  |                 orderDetl.setOrderNo(order.getOrderNo()); | 
 |  |  |                 orderDetl.setSource(param.getDocType().intValue()); | 
 |  |  |                 orderDetl.setCreateBy(getUserId()); | 
 |  |  |                 orderDetl.setCreateTime(now); | 
 |  |  |                 orderDetl.setUpdateBy(getUserId()); | 
 
 |  |  | 
 |  |  |     @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where (b.loc_sts = 'F' or b.loc_sts = 'R') and b.floor = #{floor} and a.matnr = #{matnr} AND a.three_code = #{threeCode} AND a.process_sts != 1") | 
 |  |  |     Double selectSumAnfmeByMatnr2(@Param("matnr") String matnr,@Param("threeCode") String threeCode,@Param("floor") Integer floor); | 
 |  |  |  | 
 |  |  |     @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where (b.loc_sts = 'F' or b.loc_sts = 'R') and b.floor != #{floor} and a.matnr = #{matnr} AND a.three_code = #{threeCode} AND a.process_sts != 1") | 
 |  |  |     Double getSumAnfmeback(@Param("matnr") String matnr,@Param("threeCode") String threeCode,@Param("floor") Integer floor); | 
 |  |  |  | 
 |  |  |     @Select("SELECT SUM(anfme) FROM agv_loc_detl") | 
 |  |  |     Integer sum(); | 
 |  |  |  | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     Double getSumAnfmeDb(String matnr, String threeCode, Integer floor); | 
 |  |  |  | 
 |  |  |     Double getSumAnfmeback(String matnr, String threeCode, Integer floor); | 
 |  |  |  | 
 |  |  |     Integer sum(); | 
 |  |  |  | 
 |  |  |     List<AgvLocDetl> getStockStatisExcel(); | 
 
 |  |  | 
 |  |  |         return this.baseMapper.selectSumAnfmeByMatnr2(matnr, threeCode, floor); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Double getSumAnfmeback(String matnr, String threeCode,Integer floor) { | 
 |  |  |         return this.baseMapper.getSumAnfmeback(matnr, threeCode, floor); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |         获取库存总数 | 
 |  |  |          */ | 
 
 |  |  | 
 |  |  |                 .or().eq("io_type",111) | 
 |  |  |                 .or().eq("io_type",112) | 
 |  |  |                 .or().eq("io_type",113) | 
 |  |  |                 .or().eq("io_type",114) | 
 |  |  |                 .or().eq("io_type",121) | 
 |  |  |         ); | 
 |  |  |         if(!Cools.isEmpty(agvWrkMastList)){ | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Scheduled(cron = "0/2 * * * * ? ") | 
 |  |  |     private void execute4(){ | 
 |  |  |         List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() | 
 |  |  |                 .eq("wrk_sts", 22) | 
 |  |  |                 .andNew().eq("io_type",114) | 
 |  |  |                 .orderBy("io_pri",false) | 
 |  |  |                 .orderBy("appe_time",true) | 
 |  |  |         ); | 
 |  |  |         if (agvWrkMastList.isEmpty()) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         for (AgvWrkMast agvWrkMast : agvWrkMastList) { | 
 |  |  |             try{ | 
 |  |  |                 autoMoveHandler.start4(agvWrkMast); | 
 |  |  |             } catch (Exception e){ | 
 |  |  |                 log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    // 空板自动回库  库位-接驳点 | 
 |  |  | //    //@Scheduled(cron = "0/2 * * * * ? ") | 
 |  |  | //    private void autoEmptyBack(){ | 
 
 |  |  | 
 |  |  |                     agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); | 
 |  |  |                     break; | 
 |  |  |                 case 108: | 
 |  |  |                 case 114: | 
 |  |  |                     agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
 |  |  |                     //更新库存明细 | 
 |  |  |                     agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); | 
 
 |  |  | 
 |  |  |         doHandMove2(agvWrkMast); | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public ReturnT<String> start4(AgvWrkMast agvWrkMast) { | 
 |  |  |         // locType 1. 自动, 2. 手动 | 
 |  |  |         doAutoMove3(agvWrkMast); | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  |     //根据库位的loctype值发送任务--弃用 | 
 |  |  |     private ReturnT<String> doAutoMove(AgvLocMast agvLocMast) { | 
 |  |  |         Date now = new Date(); | 
 |  |  | 
 |  |  |  | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private ReturnT<String> doAutoMove3(AgvWrkMast agvWrkMast) { | 
 |  |  |         Date now = new Date(); | 
 |  |  |         //检索库位,选择合适的库位 | 
 |  |  |         AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,false); | 
 |  |  |         if (Cools.isEmpty(locMast)) { | 
 |  |  |             throw new CoolException("暂无库位"); | 
 |  |  |         } | 
 |  |  |         agvWrkMast.setWrkSts(201L); | 
 |  |  |         agvWrkMast.setLocNo(locMast.getLocNo()); | 
 |  |  |         agvWrkMastService.updateById(agvWrkMast); | 
 |  |  |         //更新目标库位状态 | 
 |  |  |         updateAgvLocMast(locMast,"S"); | 
 |  |  |  | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private ReturnT<String> doHandMove2(AgvWrkMast agvWrkMast) { | 
 |  |  |         Date now = new Date(); | 
 |  |  |         String lev1 = agvWrkMast.getSourceLocNo().substring(agvWrkMast.getSourceLocNo().length() - 4).substring(0, 2); | 
 |  |  | 
 |  |  |         if ("01".equals(lev1)) { | 
 |  |  |             devpNo = agvCommonService.getDevpNo(3, 1, "Y", "Y"); | 
 |  |  |         } else { | 
 |  |  |             devpNo = agvCommonService.getDevpNo(3, 5, "Y", "Y"); | 
 |  |  |             devpNo = agvCommonService.getDevpNo(3, 4, "Y", "Y"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (Cools.isEmpty(devpNo)) { | 
 
| New file | 
 |  |  | 
 |  |  | <!DOCTYPE html> | 
 |  |  | <html lang="en"> | 
 |  |  | <head> | 
 |  |  |     <meta charset="utf-8"> | 
 |  |  |     <title></title> | 
 |  |  |     <meta name="renderer" content="webkit"> | 
 |  |  |     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | 
 |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | 
 |  |  |     <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/cool.css" media="all"> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |  | 
 |  |  | <div class="layui-fluid"> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body"> | 
 |  |  |             <div class="layui-form toolbar" id="search-box"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <label class="layui-form-label">编号:</label> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline">  | 
 |  |  |                         <button class="layui-btn icon-btn" lay-filter="search" lay-submit> | 
 |  |  |                             <i class="layui-icon"></i>搜索 | 
 |  |  |                         </button> | 
 |  |  |                         <button class="layui-btn icon-btn" lay-filter="reset" lay-submit> | 
 |  |  |                             <i class="layui-icon"></i>重置 | 
 |  |  |                         </button> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <table class="layui-hide" id="bomMat" lay-filter="bomMat"></table> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="toolbar"> | 
 |  |  |     <div class="layui-btn-container"> | 
 |  |  |         <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button> | 
 |  |  |         <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button> | 
 |  |  |         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="operate"> | 
 |  |  |     <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a> | 
 |  |  |     <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/bomMat/bomMat.js" charset="utf-8"></script> | 
 |  |  | </body> | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="editDialog"> | 
 |  |  |     <form id="detail" lay-filter="detail" class="layui-form admin-form model-form"> | 
 |  |  |         <input name="id" type="hidden"> | 
 |  |  |         <div class="layui-row"> | 
 |  |  |             <div class="layui-col-md6"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">部件品号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="unitNum" placeholder="请输入部件品号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">部件品名: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="unitName" placeholder="请输入部件品名"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">部件规格: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="unitSpace" placeholder="请输入部件规格"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">组件品号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="bomNum" placeholder="请输入组件品号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">组件品名: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="bomName" placeholder="请输入组件品名"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">组件规格: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="bomSpace" placeholder="请输入组件规格"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |              </div> | 
 |  |  |             <div class="layui-col-md6"> | 
 |  |  |  | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">元件品号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="elementNum" placeholder="请输入元件品号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">元件品名: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="elementName" placeholder="请输入元件品名"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">元件规格: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="elementSpace" placeholder="请输入元件规格"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">组成用量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="bomAnfme" placeholder="请输入组成用量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">托盘数量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="zpalletAnfme" placeholder="请输入托盘数量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |             </div> | 
 |  |  |  | 
 |  |  |         </div> | 
 |  |  |         <hr class="layui-bg-gray"> | 
 |  |  |         <div class="layui-form-item text-right"> | 
 |  |  |             <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button> | 
 |  |  |             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  | </html> | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | var pageCurr; | 
 |  |  | layui.config({ | 
 |  |  |     base: baseUrl + "/static/layui/lay/modules/" | 
 |  |  | }).use(['table','laydate', 'form', 'admin'], function(){ | 
 |  |  |     var table = layui.table; | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var form = layui.form; | 
 |  |  |     var admin = layui.admin; | 
 |  |  |  | 
 |  |  |     // 数据渲染 | 
 |  |  |     tableIns = table.render({ | 
 |  |  |         elem: '#bomMat', | 
 |  |  |         headers: {token: localStorage.getItem('token')}, | 
 |  |  |         url: baseUrl+'/bomMat/list/auth', | 
 |  |  |         page: true, | 
 |  |  |         limit: 15, | 
 |  |  |         limits: [15, 30, 50, 100, 200, 500], | 
 |  |  |         toolbar: '#toolbar', | 
 |  |  |         cellMinWidth: 50, | 
 |  |  |         height: 'full-120', | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'checkbox'} | 
 |  |  |             ,{field: 'id', align: 'center',title: 'ID',hide: true} | 
 |  |  |             ,{field: 'unitNum', align: 'center',title: '部件品号'} | 
 |  |  |             ,{field: 'unitName', align: 'center',title: '部件品名'} | 
 |  |  |             ,{field: 'unitSpace', align: 'center',title: '部件规格'} | 
 |  |  |             ,{field: 'bomNum', align: 'center',title: '组件品号'} | 
 |  |  |             ,{field: 'bomName', align: 'center',title: '组件品名'} | 
 |  |  |             ,{field: 'bomSpace', align: 'center',title: '组件规格'} | 
 |  |  |             ,{field: 'elementNum', align: 'center',title: '元件品号'} | 
 |  |  |             ,{field: 'elementName', align: 'center',title: '元件品名'} | 
 |  |  |             ,{field: 'elementSpace', align: 'center',title: '元件规格'} | 
 |  |  |             ,{field: 'bomAnfme', align: 'center',title: '组成用量'} | 
 |  |  |             ,{field: 'zpalletAnfme', align: 'center',title: '托盘数量'} | 
 |  |  |             ,{field: 'modiUser', align: 'center',title: '修改人员',hide: true} | 
 |  |  |             ,{field: 'modiTime$', align: 'center',title: '修改时间',hide: true} | 
 |  |  |             ,{field: 'appeUser', align: 'center',title: '添加人员',hide: true} | 
 |  |  |             ,{field: 'appeTime$', align: 'center',title: '添加时间',hide: true} | 
 |  |  |             ,{field: 'isDeleted', align: 'center',title: '是否删除',hide: true} | 
 |  |  |  | 
 |  |  |             ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120} | 
 |  |  |         ]], | 
 |  |  |         request: { | 
 |  |  |             pageName: 'curr', | 
 |  |  |             pageSize: 'limit' | 
 |  |  |         }, | 
 |  |  |         parseData: function (res) { | 
 |  |  |             return { | 
 |  |  |                 'code': res.code, | 
 |  |  |                 'msg': res.msg, | 
 |  |  |                 'count': res.data.total, | 
 |  |  |                 'data': res.data.records | 
 |  |  |             } | 
 |  |  |         }, | 
 |  |  |         response: { | 
 |  |  |             statusCode: 200 | 
 |  |  |         }, | 
 |  |  |         done: function(res, curr, count) { | 
 |  |  |             if (res.code === 403) { | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } | 
 |  |  |             pageCurr=curr; | 
 |  |  |             limit(); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听排序事件 | 
 |  |  |     table.on('sort(bomMat)', function (obj) { | 
 |  |  |         var searchData = {}; | 
 |  |  |         $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |             searchData[this.name] = this.value; | 
 |  |  |         }); | 
 |  |  |         searchData['orderByField'] = obj.field; | 
 |  |  |         searchData['orderByType'] = obj.type; | 
 |  |  |         tableIns.reload({ | 
 |  |  |             where: searchData, | 
 |  |  |             page: {curr: 1} | 
 |  |  |         }); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听头工具栏事件 | 
 |  |  |     table.on('toolbar(bomMat)', function (obj) { | 
 |  |  |         var checkStatus = table.checkStatus(obj.config.id).data; | 
 |  |  |         switch(obj.event) { | 
 |  |  |             case 'addData': | 
 |  |  |                 showEditModel(); | 
 |  |  |                 break; | 
 |  |  |             case 'deleteData': | 
 |  |  |                if (checkStatus.length === 0) { | 
 |  |  |                    layer.msg('请选择要删除的数据', {icon: 2}); | 
 |  |  |                    return; | 
 |  |  |                } | 
 |  |  |                del(checkStatus.map(function (d) { | 
 |  |  |                    return d.id; | 
 |  |  |                })); | 
 |  |  |                break; | 
 |  |  |             case 'exportData': | 
 |  |  |                 admin.confirm('确定导出Excel吗', {shadeClose: true}, function(){ | 
 |  |  |                     var titles=[]; | 
 |  |  |                     var fields=[]; | 
 |  |  |                     obj.config.cols[0].map(function (col) { | 
 |  |  |                         if (col.type === 'normal' && col.hide === false && col.toolbar == null) { | 
 |  |  |                             titles.push(col.title); | 
 |  |  |                             fields.push(col.field); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     var exportData = {}; | 
 |  |  |                     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |                         exportData[this.name] = this.value; | 
 |  |  |                     }); | 
 |  |  |                     var param = { | 
 |  |  |                         'bomMat': exportData, | 
 |  |  |                         'fields': fields | 
 |  |  |                     }; | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/bomMat/export/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: JSON.stringify(param), | 
 |  |  |                         dataType:'json', | 
 |  |  |                         contentType:'application/json;charset=UTF-8', | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.closeAll(); | 
 |  |  |                             if (res.code === 200) { | 
 |  |  |                                 table.exportFile(titles,res.data,'xls'); | 
 |  |  |                             } else if (res.code === 403) { | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             } else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 }); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听行工具事件 | 
 |  |  |     table.on('tool(bomMat)', function(obj){ | 
 |  |  |         var data = obj.data; | 
 |  |  |         switch (obj.event) { | 
 |  |  |             case 'edit': | 
 |  |  |                 showEditModel(data); | 
 |  |  |                 break; | 
 |  |  |             case "del": | 
 |  |  |                 del([data.id]); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /* 弹窗 - 新增、修改 */ | 
 |  |  |     function showEditModel(mData) { | 
 |  |  |         admin.open({ | 
 |  |  |             type: 1, | 
 |  |  |             area: '1200px', | 
 |  |  |             title: (mData ? '修改' : '添加') + '组件', | 
 |  |  |             content: $('#editDialog').html(), | 
 |  |  |             success: function (layero, dIndex) { | 
 |  |  |                 layDateRender(mData); | 
 |  |  |                 form.val('detail', mData); | 
 |  |  |                 form.on('submit(editSubmit)', function (data) { | 
 |  |  |                     var loadIndex = layer.load(2); | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/bomMat/"+(mData?'update':'add')+"/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: data.field, | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.close(loadIndex); | 
 |  |  |                             if (res.code === 200){ | 
 |  |  |                                 layer.close(dIndex); | 
 |  |  |                                 layer.msg(res.msg, {icon: 1}); | 
 |  |  |                                 tableReload(); | 
 |  |  |                             } else if (res.code === 403){ | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             }else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }) | 
 |  |  |                     return false; | 
 |  |  |                 }); | 
 |  |  |                 $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                 layui.form.render('select'); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* 删除 */ | 
 |  |  |     function del(ids) { | 
 |  |  |         layer.confirm('确定要删除选中数据吗?', { | 
 |  |  |             skin: 'layui-layer-admin', | 
 |  |  |             shade: .1 | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             var loadIndex = layer.load(2); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/bomMat/delete/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: {ids: ids}, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.close(loadIndex); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                         tableReload(); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     } else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 搜索 | 
 |  |  |     form.on('submit(search)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 重置 | 
 |  |  |     form.on('submit(reset)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         clearFormVal($('#search-box')); | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 时间选择器 | 
 |  |  |     function layDateRender(data) { | 
 |  |  |         setTimeout(function () { | 
 |  |  |             layDate.render({ | 
 |  |  |                 elem: '#modiTime\\$', | 
 |  |  |                 type: 'datetime', | 
 |  |  |                 value: data!==undefined?data['modiTime\\$']:null | 
 |  |  |             }); | 
 |  |  |             layDate.render({ | 
 |  |  |                 elem: '#appeTime\\$', | 
 |  |  |                 type: 'datetime', | 
 |  |  |                 value: data!==undefined?data['appeTime\\$']:null | 
 |  |  |             }); | 
 |  |  |  | 
 |  |  |         }, 300); | 
 |  |  |     } | 
 |  |  |     layDateRender(); | 
 |  |  |  | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // 关闭动作 | 
 |  |  | $(document).on('click','#data-detail-close', function () { | 
 |  |  |     parent.layer.closeAll(); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function tableReload(child) { | 
 |  |  |     var searchData = {}; | 
 |  |  |     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |         searchData[this.name] = this.value; | 
 |  |  |     }); | 
 |  |  |     tableIns.reload({ | 
 |  |  |         where: searchData, | 
 |  |  |         page: {curr: pageCurr} | 
 |  |  |      }); | 
 |  |  | } |