|  |  | 
 |  |  | package com.zy.asrs.controller; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/list/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R list(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                   @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                   @RequestParam(required = false)String orderByField, | 
 |  |  |                   @RequestParam(required = false)String orderByType, | 
 |  |  |                   @RequestParam Map<String, Object> param){ | 
 |  |  |     public R list(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                   @RequestParam(defaultValue = "10") 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); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         wrapper.eq("status", 1); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                   @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                   @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                         @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                         @RequestParam Map<String, Object> param) { | 
 |  |  |         return R.ok(orderDetlService.getPakoutPage(toPage(curr, limit, param, OrderDetl.class))); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV2") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList2(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                         @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                         @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList2(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10") 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); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |             docIds.add(pakin.getDocId()); | 
 |  |  |         } | 
 |  |  |         EntityWrapper<Order> orderEntityWrapper = new EntityWrapper<>(); | 
 |  |  |         List<Order> orders = orderService.selectList(orderEntityWrapper.in("doc_type",docIds)); | 
 |  |  |         List<Order> orders = orderService.selectList(orderEntityWrapper.in("doc_type", docIds)); | 
 |  |  |         List<String> orderNos = new ArrayList<>(); | 
 |  |  |         for (Order order : orders) { | 
 |  |  |             orderNos.add(order.getOrderNo()); | 
 |  |  |         } | 
 |  |  |         wrapper.in("order_no",orderNos); | 
 |  |  |         wrapper.in("order_no", orderNos); | 
 |  |  |         return R.ok(orderDetlService.selectPage(new Page<>(curr, limit), wrapper)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV193") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList193(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                          @RequestParam(required = false)Long docType, | 
 |  |  |                          @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList193(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                            @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                            @RequestParam(required = false) String orderByField, | 
 |  |  |                            @RequestParam(required = false) String orderByType, | 
 |  |  |                            @RequestParam(required = false) Long docType, | 
 |  |  |                            @RequestParam Map<String, Object> param) { | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         param.remove("docType"); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convertLike(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |  | 
 |  |  |         if (docIds.size() > 0) { | 
 |  |  |             if (docType > 0) { | 
 |  |  |                 wrapper.in("source",docType); | 
 |  |  |                 wrapper.in("source", docType); | 
 |  |  |             } else { | 
 |  |  |                 wrapper.in("source",docIds); | 
 |  |  |                 wrapper.in("source", docIds); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } else { | 
 |  |  |             wrapper.in("source",0); | 
 |  |  |             wrapper.in("source", 0); | 
 |  |  |         } | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV3") | 
 |  |  |     @Synchronized | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList3(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList3(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                          @RequestParam(required = false) String orderByField, | 
 |  |  |                          @RequestParam(required = false) String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param) { | 
 |  |  |         StopWatch stopWatch = new StopWatch(); | 
 |  |  |         stopWatch.start(); | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convertLike(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |                 docIds.add(pakin.getDocId()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         wrapper.in("source",docIds); | 
 |  |  |         wrapper.in("source", docIds); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  |             Double sumAnfme = agvLocDetlService.getSumAnfme(record.getMatnr(), record.getThreeCode()); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     * 半成品加工单据 | 
 |  |  |     * */ | 
 |  |  |      * 半成品加工单据 | 
 |  |  |      * */ | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV5") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList5(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList5(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                          @RequestParam(required = false) String orderByField, | 
 |  |  |                          @RequestParam(required = false) String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param) { | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convertLike(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |                 docIds.add(pakin.getDocId()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         wrapper.eq("process_sts",1); | 
 |  |  |         wrapper.in("source",docIds); | 
 |  |  |         wrapper.eq("process_sts", 1); | 
 |  |  |         wrapper.in("source", docIds); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  |             Double sumAnfme = agvLocDetlService.getSumAnfmeProcess(record.getMatnr(), record.getThreeCode()); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV4") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList4(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList4(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                          @RequestParam(required = false) String orderByField, | 
 |  |  |                          @RequestParam(required = false) String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param) { | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convertLike(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         wrapper.in("source",docIds); | 
 |  |  |         wrapper.in("source", docIds); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  |             Double sumAnfme = agvLocDetlService.getSumAnfmeProcessed(record.getMatnr(), record.getThreeCode()); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/pakout/list/authV6") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R pakoutList6(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                          @RequestParam(required = false)String orderByField, | 
 |  |  |                          @RequestParam(required = false)String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param){ | 
 |  |  |     public R pakoutList6(@RequestParam(defaultValue = "1") Integer curr, | 
 |  |  |                          @RequestParam(defaultValue = "10") Integer limit, | 
 |  |  |                          @RequestParam(required = false) String orderByField, | 
 |  |  |                          @RequestParam(required = false) String orderByType, | 
 |  |  |                          @RequestParam Map<String, Object> param) { | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convertLike(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { | 
 |  |  |         if (!Cools.isEmpty(orderByField)) { | 
 |  |  |             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); | 
 |  |  |         } else { | 
 |  |  |             wrapper.orderBy("create_time", false); | 
 |  |  |         } | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         wrapper.in("source",docIds); | 
 |  |  |         wrapper.in("source", docIds); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         for (OrderDetl record : page.getRecords()) { | 
 |  |  |             Double sumAnfme = agvLocDetlService.getSumAnfme(record.getMatnr(), record.getThreeCode()); | 
 |  |  | 
 |  |  |         return R.ok(page); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ | 
 |  |  |         for (Map.Entry<String, Object> entry : map.entrySet()){ | 
 |  |  |     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) { | 
 |  |  |         for (Map.Entry<String, Object> entry : map.entrySet()) { | 
 |  |  |             String val = String.valueOf(entry.getValue()); | 
 |  |  |             if (val.contains(RANGE_TIME_LINK)){ | 
 |  |  |             if (val.contains(RANGE_TIME_LINK)) { | 
 |  |  |                 String[] dates = val.split(RANGE_TIME_LINK); | 
 |  |  |                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); | 
 |  |  |                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); | 
 |  |  |             } else { | 
 |  |  |                 wrapper.eq(entry.getKey(), val); | 
 |  |  |                 wrapper.like(entry.getKey(), val); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private <T> void convertLike(Map<String, Object> map, EntityWrapper<T> wrapper){ | 
 |  |  |         for (Map.Entry<String, Object> entry : map.entrySet()){ | 
 |  |  |     private <T> void convertLike(Map<String, Object> map, EntityWrapper<T> wrapper) { | 
 |  |  |         for (Map.Entry<String, Object> entry : map.entrySet()) { | 
 |  |  |             String val = String.valueOf(entry.getValue()); | 
 |  |  |             if (val.contains(RANGE_TIME_LINK)){ | 
 |  |  |             if (val.contains(RANGE_TIME_LINK)) { | 
 |  |  |                 String[] dates = val.split(RANGE_TIME_LINK); | 
 |  |  |                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); | 
 |  |  |                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); | 
 |  |  | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/update/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R update(OrderDetl orderDetl){ | 
 |  |  |         if (Cools.isEmpty(orderDetl) || null==orderDetl.getId()){ | 
 |  |  |     @RequestMapping(value = "/orderDetl/update/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R update(OrderDetl orderDetl) { | 
 |  |  |         if (Cools.isEmpty(orderDetl) || null == orderDetl.getId()) { | 
 |  |  |             return R.error("参数缺失"); | 
 |  |  |         } | 
 |  |  |         orderDetlService.updateById(orderDetl); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/delete/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R delete(@RequestParam(value="ids[]") Long[] ids){ | 
 |  |  |          for (Long id : ids){ | 
 |  |  |     public R delete(@RequestParam(value = "ids[]") Long[] ids) { | 
 |  |  |         for (Long id : ids) { | 
 |  |  |             orderDetlService.deleteById(id); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderDetl/export/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R export(@RequestBody JSONObject param){ | 
 |  |  |     public R export(@RequestBody JSONObject param) { | 
 |  |  |         EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
 |  |  |         Map<String, Object> map = excludeTrash(param.getJSONObject("orderDetl")); | 
 |  |  | 
 |  |  |         wrapper.like("id", condition); | 
 |  |  |         Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(0, 10), wrapper); | 
 |  |  |         List<Map<String, Object>> result = new ArrayList<>(); | 
 |  |  |         for (OrderDetl orderDetl : page.getRecords()){ | 
 |  |  |         for (OrderDetl orderDetl : page.getRecords()) { | 
 |  |  |             Map<String, Object> map = new HashMap<>(); | 
 |  |  |             map.put("id", orderDetl.getId()); | 
 |  |  |             map.put("value", orderDetl.getId()); | 
 |  |  | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R query(@RequestBody JSONObject param) { | 
 |  |  |         Wrapper<OrderDetl> wrapper = new EntityWrapper<OrderDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); | 
 |  |  |         if (null != orderDetlService.selectOne(wrapper)){ | 
 |  |  |         if (null != orderDetlService.selectOne(wrapper)) { | 
 |  |  |             return R.parse(BaseRes.REPEAT).add(getComment(OrderDetl.class, String.valueOf(param.get("key")))); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.controller; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.plugins.Page; | 
 |  |  | import com.core.annotations.ManagerAuth; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.zy.asrs.entity.OrderView; | 
 |  |  | import com.zy.asrs.entity.OrderViewParam; | 
 |  |  | import com.zy.asrs.mapper.OrderViewMapper; | 
 |  |  | import com.zy.common.web.BaseController; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
 |  |  | import org.springframework.web.bind.annotation.RestController; | 
 |  |  |  | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | public class OrderViewController extends BaseController { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private OrderViewMapper orderViewMapper; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/orderView/list/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R navList(OrderViewParam bean) { | 
 |  |  |         List<OrderView> orderViews = orderViewMapper.selectOrderView(bean); | 
 |  |  |         int count = orderViewMapper.countOrderView(bean); | 
 |  |  |         Page<OrderView> page = new Page<>(); | 
 |  |  |         page.setRecords(orderViews); | 
 |  |  |         page.setTotal(count); | 
 |  |  |         return R.ok(page); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.entity; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.annotations.TableField; | 
 |  |  | import com.baomidou.mybatisplus.annotations.TableId; | 
 |  |  | import com.baomidou.mybatisplus.annotations.TableName; | 
 |  |  | import com.baomidou.mybatisplus.enums.IdType; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.SpringUtils; | 
 |  |  | import com.zy.asrs.service.DocTypeService; | 
 |  |  | import com.zy.asrs.service.OrderSettleService; | 
 |  |  | import com.zy.system.entity.User; | 
 |  |  | import com.zy.system.service.UserService; | 
 |  |  | import io.swagger.annotations.ApiModelProperty; | 
 |  |  | import lombok.Data; | 
 |  |  | import org.springframework.format.annotation.DateTimeFormat; | 
 |  |  |  | 
 |  |  | import java.io.Serializable; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.Date; | 
 |  |  |  | 
 |  |  | @Data | 
 |  |  | @TableName("agv_order_view") | 
 |  |  | public class OrderView implements Serializable { | 
 |  |  |  | 
 |  |  |     private static final long serialVersionUID = 1L; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * ID | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "ID") | 
 |  |  |     @TableId(value = "id", type = IdType.AUTO) | 
 |  |  |     private Long id; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "编号") | 
 |  |  |     private String uuid; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "订单编号") | 
 |  |  |     @TableField("order_no") | 
 |  |  |     private String orderNo; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 单据日期 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "单据日期") | 
 |  |  |     @TableField("order_time") | 
 |  |  |     private String orderTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 单据类型 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "单据类型") | 
 |  |  |     @TableField("doc_type") | 
 |  |  |     private Long docType; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 项目编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "项目编号") | 
 |  |  |     @TableField("item_id") | 
 |  |  |     private Long itemId; | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "") | 
 |  |  |     @TableField("item_name") | 
 |  |  |     private String itemName; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 调拨项目编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "调拨项目编号") | 
 |  |  |     @TableField("allot_item_id") | 
 |  |  |     private Long allotItemId; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 初始票据号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "初始票据号") | 
 |  |  |     @TableField("def_number") | 
 |  |  |     private String defNumber; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 票据号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "票据号") | 
 |  |  |     private String number; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 客户编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "客户编号") | 
 |  |  |     private Long cstmr; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 客户 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "客户") | 
 |  |  |     @TableField("cstmr_name") | 
 |  |  |     private String cstmrName; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 联系方式 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "联系方式") | 
 |  |  |     private String tel; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 操作人员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "操作人员") | 
 |  |  |     @TableField("oper_memb") | 
 |  |  |     private String operMemb; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 合计金额 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "合计金额") | 
 |  |  |     @TableField("total_fee") | 
 |  |  |     private Double totalFee; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 优惠率 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "优惠率") | 
 |  |  |     private Double discount; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 优惠金额 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "优惠金额") | 
 |  |  |     @TableField("discount_fee") | 
 |  |  |     private Double discountFee; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 销售或采购费用合计 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "销售或采购费用合计") | 
 |  |  |     @TableField("other_fee") | 
 |  |  |     private Double otherFee; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 实付金额 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "实付金额") | 
 |  |  |     @TableField("act_fee") | 
 |  |  |     private Double actFee; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 付款类型 1: 现金  2: 记账 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "付款类型 1: 现金  2: 记账  ") | 
 |  |  |     @TableField("pay_type") | 
 |  |  |     private Integer payType; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 业务员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "业务员") | 
 |  |  |     private String salesman; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * setMemo | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "结算天数") | 
 |  |  |     @TableField("account_day") | 
 |  |  |     private Integer accountDay; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 邮费支付类型 1: 在线支付  2: 货到付款 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "邮费支付类型 1: 在线支付  2: 货到付款  ") | 
 |  |  |     @TableField("post_fee_type") | 
 |  |  |     private Integer postFeeType; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 邮费 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "邮费") | 
 |  |  |     @TableField("post_fee") | 
 |  |  |     private Double postFee; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 付款时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "付款时间") | 
 |  |  |     @TableField("pay_time") | 
 |  |  |     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date payTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 发货时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "发货时间") | 
 |  |  |     @TableField("send_time") | 
 |  |  |     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date sendTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物流名称 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "物流名称") | 
 |  |  |     @TableField("ship_name") | 
 |  |  |     private String shipName; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物流单号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "物流单号") | 
 |  |  |     @TableField("ship_code") | 
 |  |  |     private String shipCode; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单状态 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "订单状态") | 
 |  |  |     private Long settle; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 状态 1: 正常  0: 禁用 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "状态 1: 正常  0: 禁用  ") | 
 |  |  |     private Integer status; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加人员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "添加人员") | 
 |  |  |     @TableField("create_by") | 
 |  |  |     private Long createBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "添加时间") | 
 |  |  |     @TableField("create_time") | 
 |  |  |     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date createTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改人员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "修改人员") | 
 |  |  |     @TableField("update_by") | 
 |  |  |     private Long updateBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "修改时间") | 
 |  |  |     @TableField("update_time") | 
 |  |  |     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date updateTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备注 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "备注") | 
 |  |  |     private String memo; | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "erp仓库编码") | 
 |  |  |     @TableField("plt_type") | 
 |  |  |     private Integer pltType; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 入库日期 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value = "入库日期") | 
 |  |  |     @TableField("in_time") | 
 |  |  |     private String inTime; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @TableField("Upstreamcode") | 
 |  |  |     private String Upstreamcode; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 数量 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "数量") | 
 |  |  |     private Double anfme; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 作业数量 | 
 |  |  |      * | 
 |  |  |      *  1. 入库 : qty 👆 | 
 |  |  |      *  1. 出库 : qty 👆 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "作业数量") | 
 |  |  |     private Double qty; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物料号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "物料号") | 
 |  |  |     private String matnr; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物料号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "物料号") | 
 |  |  |     private String maktx; | 
 |  |  |     /** | 
 |  |  |      * 三方编码 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "三方编码") | 
 |  |  |     @TableField("three_code") | 
 |  |  |     private String threeCode; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 序列码 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "序列码") | 
 |  |  |     private String batch; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 工序状态 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "工序状态 1:待加工,2:已加工,3:无需加工") | 
 |  |  |     @TableField("process_sts") | 
 |  |  |     private Integer processSts; | 
 |  |  |  | 
 |  |  |     @TableField("report_qty") | 
 |  |  |     private Double reportQty; | 
 |  |  |  | 
 |  |  |     @TableField("dev_no") | 
 |  |  |     private String devNo; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public OrderView() { | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public OrderView(String uuid, String orderNo, String orderTime, Long docType, Long itemId, String itemName, Long allotItemId, String defNumber, String number, Long cstmr, String cstmrName, String tel, String operMemb, Double totalFee, Double discount, Double discountFee, Double otherFee, Double actFee, Integer payType, String salesman, Integer accountDay, Integer postFeeType, Double postFee, Date payTime, Date sendTime, String shipName, String shipCode, Long settle, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) { | 
 |  |  |         this.uuid = uuid; | 
 |  |  |         this.orderNo = orderNo; | 
 |  |  |         this.orderTime = orderTime; | 
 |  |  |         this.docType = docType; | 
 |  |  |         this.itemId = itemId; | 
 |  |  |         this.itemName = itemName; | 
 |  |  |         this.allotItemId = allotItemId; | 
 |  |  |         this.defNumber = defNumber; | 
 |  |  |         this.number = number; | 
 |  |  |         this.cstmr = cstmr; | 
 |  |  |         this.cstmrName = cstmrName; | 
 |  |  |         this.tel = tel; | 
 |  |  |         this.operMemb = operMemb; | 
 |  |  |         this.totalFee = totalFee; | 
 |  |  |         this.discount = discount; | 
 |  |  |         this.discountFee = discountFee; | 
 |  |  |         this.otherFee = otherFee; | 
 |  |  |         this.actFee = actFee; | 
 |  |  |         this.payType = payType; | 
 |  |  |         this.salesman = salesman; | 
 |  |  |         this.accountDay = accountDay; | 
 |  |  |         this.postFeeType = postFeeType; | 
 |  |  |         this.postFee = postFee; | 
 |  |  |         this.payTime = payTime; | 
 |  |  |         this.sendTime = sendTime; | 
 |  |  |         this.shipName = shipName; | 
 |  |  |         this.shipCode = shipCode; | 
 |  |  |         this.settle = settle; | 
 |  |  |         this.status = status; | 
 |  |  |         this.createBy = createBy; | 
 |  |  |         this.createTime = createTime; | 
 |  |  |         this.updateBy = updateBy; | 
 |  |  |         this.updateTime = updateTime; | 
 |  |  |         this.memo = memo; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    Order order = new Order( | 
 |  |  | //            null,    // 编号[非空] | 
 |  |  | //            null,    // 订单编号 | 
 |  |  | //            null,    // 单据日期 | 
 |  |  | //            null,    // 单据类型 | 
 |  |  | //            null,    // 项目编号 | 
 |  |  | //            null,    // | 
 |  |  | //            null,    // 调拨项目编号 | 
 |  |  | //            null,    // 初始票据号 | 
 |  |  | //            null,    // 票据号 | 
 |  |  | //            null,    // 客户编号 | 
 |  |  | //            null,    // 客户 | 
 |  |  | //            null,    // 联系方式 | 
 |  |  | //            null,    // 操作人员 | 
 |  |  | //            null,    // 合计金额 | 
 |  |  | //            null,    // 优惠率 | 
 |  |  | //            null,    // 优惠金额 | 
 |  |  | //            null,    // 销售或采购费用合计 | 
 |  |  | //            null,    // 实付金额 | 
 |  |  | //            null,    // 付款类型 | 
 |  |  | //            null,    // 业务员 | 
 |  |  | //            null,    // 结算天数 | 
 |  |  | //            null,    // 邮费支付类型 | 
 |  |  | //            null,    // 邮费 | 
 |  |  | //            null,    // 付款时间 | 
 |  |  | //            null,    // 发货时间 | 
 |  |  | //            null,    // 物流名称 | 
 |  |  | //            null,    // 物流单号 | 
 |  |  | //            null,    // 订单状态 | 
 |  |  | //            null,    // 状态 | 
 |  |  | //            null,    // 添加人员 | 
 |  |  | //            null,    // 添加时间 | 
 |  |  | //            null,    // 修改人员 | 
 |  |  | //            null,    // 修改时间 | 
 |  |  | //            null    // 备注 | 
 |  |  | //    ); | 
 |  |  |  | 
 |  |  |     public String getDocType$() { | 
 |  |  |         DocTypeService service = SpringUtils.getBean(DocTypeService.class); | 
 |  |  |         DocType docType = service.selectById(this.docType); | 
 |  |  |         if (!Cools.isEmpty(docType)) { | 
 |  |  |             return String.valueOf(docType.getDocName()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getPayType$() { | 
 |  |  |         if (null == this.payType) { | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         switch (this.payType) { | 
 |  |  |             case 1: | 
 |  |  |                 return "现金"; | 
 |  |  |             case 2: | 
 |  |  |                 return "记账"; | 
 |  |  |             default: | 
 |  |  |                 return String.valueOf(this.payType); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getPostFeeType$() { | 
 |  |  |         if (null == this.postFeeType) { | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         switch (this.postFeeType) { | 
 |  |  |             case 1: | 
 |  |  |                 return "在线支付"; | 
 |  |  |             case 2: | 
 |  |  |                 return "货到付款"; | 
 |  |  |             default: | 
 |  |  |                 return String.valueOf(this.postFeeType); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getPayTime$() { | 
 |  |  |         if (Cools.isEmpty(this.payTime)) { | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.payTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getSendTime$() { | 
 |  |  |         if (Cools.isEmpty(this.sendTime)) { | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getSettle$() { | 
 |  |  |         OrderSettleService service = SpringUtils.getBean(OrderSettleService.class); | 
 |  |  |         OrderSettle orderSettle = service.selectById(this.settle); | 
 |  |  |         if (!Cools.isEmpty(orderSettle)) { | 
 |  |  |             return String.valueOf(orderSettle.getSettleName()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getStatus$() { | 
 |  |  |         if (null == this.status) { | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         switch (this.status) { | 
 |  |  |             case 1: | 
 |  |  |                 return "正常"; | 
 |  |  |             case 0: | 
 |  |  |                 return "禁用"; | 
 |  |  |             default: | 
 |  |  |                 return String.valueOf(this.status); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getCreateBy$() { | 
 |  |  |         if (!Cools.isEmpty(this.createBy) && this.createBy == 9999L) { | 
 |  |  |             return "系统同步"; | 
 |  |  |         } | 
 |  |  |         UserService service = SpringUtils.getBean(UserService.class); | 
 |  |  |         User user = service.selectById(this.createBy); | 
 |  |  |         if (!Cools.isEmpty(user)) { | 
 |  |  |             return String.valueOf(user.getUsername()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getCreateTime$() { | 
 |  |  |         if (Cools.isEmpty(this.createTime)) { | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUpdateBy$() { | 
 |  |  |         UserService service = SpringUtils.getBean(UserService.class); | 
 |  |  |         User user = service.selectById(this.updateBy); | 
 |  |  |         if (!Cools.isEmpty(user)) { | 
 |  |  |             return String.valueOf(user.getUsername()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUpdateTime$() { | 
 |  |  |         if (Cools.isEmpty(this.updateTime)) { | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getProcessSts$(){ | 
 |  |  |         if (null == this.processSts){ return null; } | 
 |  |  |         switch (this.processSts){ | 
 |  |  |             case 0: | 
 |  |  |                 return "其他"; | 
 |  |  |             case 1: | 
 |  |  |                 return "待加工"; | 
 |  |  |             case 2: | 
 |  |  |                 return "已加工"; | 
 |  |  |             case 3: | 
 |  |  |                 return "无需加工"; | 
 |  |  |             default: | 
 |  |  |                 return String.valueOf(this.processSts); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.entity; | 
 |  |  |  | 
 |  |  | import io.swagger.annotations.ApiModelProperty; | 
 |  |  | import lombok.Data; | 
 |  |  |  | 
 |  |  | import java.io.Serializable; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 库存滞留时间实体类 | 
 |  |  |  * @author admin | 
 |  |  |  * @date 2018年11月23日 | 
 |  |  |  */ | 
 |  |  | @Data | 
 |  |  | public class OrderViewParam implements Serializable { | 
 |  |  |  | 
 |  |  |     private int curr; | 
 |  |  |  | 
 |  |  |     private int limit; | 
 |  |  |  | 
 |  |  |     private String threeCode; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "物料号") | 
 |  |  |     private String matnr; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "物料名称") | 
 |  |  |     private String maktx; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "单据编号") | 
 |  |  |     private String orderNo; | 
 |  |  |  | 
 |  |  |     private Long docType; | 
 |  |  |  | 
 |  |  |     private Long settle; | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.mapper; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.mapper.BaseMapper; | 
 |  |  | import com.zy.asrs.entity.OrderView; | 
 |  |  | import com.zy.asrs.entity.OrderViewParam; | 
 |  |  | import org.apache.ibatis.annotations.Mapper; | 
 |  |  | import org.springframework.stereotype.Repository; | 
 |  |  |  | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | @Mapper | 
 |  |  | @Repository | 
 |  |  | public interface OrderViewMapper extends BaseMapper<OrderView> { | 
 |  |  |  | 
 |  |  |     List<OrderView> selectOrderView(OrderViewParam bean); | 
 |  |  |  | 
 |  |  |     int countOrderView(OrderViewParam bean); | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?> | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
 |  |  | <mapper namespace="com.zy.asrs.mapper.OrderViewMapper"> | 
 |  |  |  | 
 |  |  |     <!-- 通用查询映射结果 --> | 
 |  |  |     <resultMap id="BaseResultMap" type="com.zy.asrs.entity.OrderView"> | 
 |  |  |         <id column="id" property="id"/> | 
 |  |  |         <result column="uuid" property="uuid"/> | 
 |  |  |         <result column="order_no" property="orderNo"/> | 
 |  |  |         <result column="order_time" property="orderTime"/> | 
 |  |  |         <result column="doc_type" property="docType"/> | 
 |  |  |         <result column="item_id" property="itemId"/> | 
 |  |  |         <result column="item_name" property="itemName"/> | 
 |  |  |         <result column="allot_item_id" property="allotItemId"/> | 
 |  |  |         <result column="def_number" property="defNumber"/> | 
 |  |  |         <result column="number" property="number"/> | 
 |  |  |         <result column="cstmr" property="cstmr"/> | 
 |  |  |         <result column="cstmr_name" property="cstmrName"/> | 
 |  |  |         <result column="tel" property="tel"/> | 
 |  |  |         <result column="oper_memb" property="operMemb"/> | 
 |  |  |         <result column="total_fee" property="totalFee"/> | 
 |  |  |         <result column="discount" property="discount"/> | 
 |  |  |         <result column="discount_fee" property="discountFee"/> | 
 |  |  |         <result column="other_fee" property="otherFee"/> | 
 |  |  |         <result column="act_fee" property="actFee"/> | 
 |  |  |         <result column="pay_type" property="payType"/> | 
 |  |  |         <result column="salesman" property="salesman"/> | 
 |  |  |         <result column="account_day" property="accountDay"/> | 
 |  |  |         <result column="post_fee_type" property="postFeeType"/> | 
 |  |  |         <result column="post_fee" property="postFee"/> | 
 |  |  |         <result column="pay_time" property="payTime"/> | 
 |  |  |         <result column="send_time" property="sendTime"/> | 
 |  |  |         <result column="ship_name" property="shipName"/> | 
 |  |  |         <result column="ship_code" property="shipCode"/> | 
 |  |  |         <result column="settle" property="settle"/> | 
 |  |  |         <result column="status" property="status"/> | 
 |  |  |         <result column="create_by" property="createBy"/> | 
 |  |  |         <result column="create_time" property="createTime"/> | 
 |  |  |         <result column="update_by" property="updateBy"/> | 
 |  |  |         <result column="update_time" property="updateTime"/> | 
 |  |  |         <result column="memo" property="memo"/> | 
 |  |  |  | 
 |  |  |         <result column="anfme" property="anfme"/> | 
 |  |  |         <result column="qty" property="qty"/> | 
 |  |  |         <result column="matnr" property="matnr"/> | 
 |  |  |         <result column="three_code" property="threeCode"/> | 
 |  |  |         <result column="maktx" property="maktx"/> | 
 |  |  |         <result column="batch" property="batch"/> | 
 |  |  |         <result column="process_sts" property="processSts"/> | 
 |  |  |         <result column="report_qty" property="reportQty"/> | 
 |  |  |         <result column="dev_no" property="devNo"/> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     </resultMap> | 
 |  |  |  | 
 |  |  |     <sql id="viewConditionSql"> | 
 |  |  |         <if test="matnr!=null and matnr!='' "> | 
 |  |  |             and matnr like '%' + #{matnr} + '%' | 
 |  |  |         </if> | 
 |  |  |         <if test="maktx!=null and maktx!='' "> | 
 |  |  |             and maktx like '%' + #{maktx} + '%' | 
 |  |  |         </if> | 
 |  |  |         <if test="orderNo!=null and orderNo!='' "> | 
 |  |  |             and order_no like '%' + #{orderNo} + '%' | 
 |  |  |         </if> | 
 |  |  |         <if test="threeCode!=null and threeCode!='' "> | 
 |  |  |             and three_code like '%' + #{threeCode} + '%' | 
 |  |  |         </if> | 
 |  |  |         <if test="docType!=null  "> | 
 |  |  |             and doc_type = #{docType} | 
 |  |  |         </if> | 
 |  |  |         <if test="settle!=null "> | 
 |  |  |             and settle = #{settle} | 
 |  |  |         </if> | 
 |  |  |     </sql> | 
 |  |  |  | 
 |  |  |     <select id="selectOrderView" parameterType="com.zy.asrs.entity.OrderViewParam" resultMap="BaseResultMap"> | 
 |  |  |         select * from ( select *,ROW_NUMBER() over (order by create_time desc) as row | 
 |  |  |         from agv_order_view aov | 
 |  |  |         where 1=1 | 
 |  |  |         <include refid="viewConditionSql"></include> | 
 |  |  |         ) a | 
 |  |  |         where a.row between ((#{curr}-1)*#{limit}+1) and (#{curr}*#{limit}) | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="countOrderView" parameterType="com.zy.asrs.entity.OrderViewParam" resultType="Integer"> | 
 |  |  |         select count(1) | 
 |  |  |         from agv_order_view aov | 
 |  |  |         where 1=1 | 
 |  |  |         <include refid="viewConditionSql"></include> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |         cellMinWidth: 50, | 
 |  |  |         height: 'full-120', | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'checkbox'} | 
 |  |  |             ,{field: 'id', align: 'center',title: 'ID'} | 
 |  |  |             ,{field: 'orderId$', align: 'center',title: '订单内码'} | 
 |  |  |             // {type: 'checkbox'} | 
 |  |  |             // ,{field: 'id', align: 'center',title: 'ID'} | 
 |  |  |             // ,{field: 'orderId$', align: 'center',title: '订单内码'} | 
 |  |  |             {field: 'orderNo', align: 'center',title: '订单编号', width: 100} | 
 |  |  |             ,{field: 'threeCode', align: 'center',title: '销售单号'} | 
 |  |  |             ,{field: 'anfme', align: 'center',title: '数量'} | 
 |  |  |             ,{field: 'qty', align: 'center',title: '作业数量'} | 
 |  |  |             ,{field: 'matnr', align: 'center',title: '物料号'} | 
 |  |  |             ,{field: 'maktx', align: 'center',title: '物料名称'} | 
 |  |  |             ,{field: 'name', align: 'center',title: '名称'} | 
 |  |  |             ,{field: 'specs', align: 'center',title: '规格'} | 
 |  |  |             ,{field: 'model', align: 'center',title: '通用型号'} | 
 |  |  |             ,{field: 'batch', align: 'center',title: '序列码'} | 
 |  |  |             ,{field: 'unit', align: 'center',title: '单位'} | 
 |  |  |             ,{field: 'barcode', align: 'center',title: '商品条码'} | 
 |  |  |             ,{field: 'supplier', align: 'center',title: '供应商'} | 
 |  |  |             ,{field: 'unitPrice', align: 'center',title: '单价'} | 
 |  |  |             ,{field: 'itemNum', align: 'center',title: '品项数'} | 
 |  |  |             ,{field: 'count', align: 'center',title: '数量'} | 
 |  |  |             ,{field: 'weight', align: 'center',title: '重量'} | 
 |  |  |             ,{field: 'status$', align: 'center',title: '状态'} | 
 |  |  |             ,{field: 'createBy$', align: 'center',title: '添加人员'} | 
 |  |  |             ,{field: 'createTime$', align: 'center',title: '添加时间'} | 
 |  |  |             ,{field: 'updateBy$', align: 'center',title: '修改人员'} | 
 |  |  |             ,{field: 'updateTime$', align: 'center',title: '修改时间'} | 
 |  |  |             ,{field: 'memo', align: 'center',title: '备注'} | 
 |  |  |             // ,{field: 'name', align: 'center',title: '名称'} | 
 |  |  |             // ,{field: 'specs', align: 'center',title: '规格'} | 
 |  |  |             // ,{field: 'model', align: 'center',title: '通用型号'} | 
 |  |  |             ,{field: 'batch', align: 'center',title: '批次'} | 
 |  |  |             // ,{field: 'unit', align: 'center',title: '单位'} | 
 |  |  |             // ,{field: 'barcode', align: 'center',title: '商品条码'} | 
 |  |  |             // ,{field: 'unitPrice', align: 'center',title: '单价'} | 
 |  |  |             // ,{field: 'itemNum', align: 'center',title: '品项数'} | 
 |  |  |             // ,{field: 'count', align: 'center',title: '数量'} | 
 |  |  |             // ,{field: 'weight', align: 'center',title: '重量'} | 
 |  |  |             // ,{field: 'status$', align: 'center',title: '状态'} | 
 |  |  |             // ,{field: 'createBy$', align: 'center',title: '添加人员'} | 
 |  |  |             // ,{field: 'createTime$', align: 'center',title: '添加时间'} | 
 |  |  |             // ,{field: 'updateBy$', align: 'center',title: '修改人员'} | 
 |  |  |             // ,{field: 'updateTime$', align: 'center',title: '修改时间'} | 
 |  |  |             // ,{field: 'memo', align: 'center',title: '备注'} | 
 |  |  |  | 
 |  |  |             ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120} | 
 |  |  |         ]], | 
 
| New file | 
 |  |  | 
 |  |  | var insTbCount = 0; | 
 |  |  | var admin; | 
 |  |  | var insTb | 
 |  |  | layui.config({ | 
 |  |  |     base: baseUrl + "/static/layui/lay/modules/" | 
 |  |  | }).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () { | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var form = layui.form; | 
 |  |  |     var table = layui.table; | 
 |  |  |     var util = layui.util; | 
 |  |  |     admin = layui.admin; | 
 |  |  |     var xmSelect = layui.xmSelect; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var laytpl = layui.laytpl; | 
 |  |  |  | 
 |  |  |     // 渲染搜索模板 | 
 |  |  |     $.ajax({ | 
 |  |  |         url: baseUrl+"/docType/list/auth", | 
 |  |  |         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |         data: { | 
 |  |  |             limit: 9999 | 
 |  |  |         }, | 
 |  |  |         method: 'POST', | 
 |  |  |         success: function (res) { | 
 |  |  |             if (res.code === 200){ | 
 |  |  |                 let template = Handlebars.compile($('#docTypeTpl').html()); | 
 |  |  |                 $('#docType-query').html(template(res.data)); | 
 |  |  |                 layui.form.render('select'); | 
 |  |  |             } else if (res.code === 403){ | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } else { | 
 |  |  |                 layer.msg(res.msg, {icon: 2}) | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     // 渲染表格 | 
 |  |  |     insTb = table.render({ | 
 |  |  |         elem: '#order', | 
 |  |  |         url: baseUrl+'/orderView/list/auth', | 
 |  |  |         headers: {token: localStorage.getItem('token')}, | 
 |  |  |         page: true, | 
 |  |  |         cellMinWidth: 100, | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'numbers'}, | 
 |  |  |             {field: 'defNumber', align: 'center', title: '操作系统号', hide: true, width: 100}, | 
 |  |  |             {field: '操作单据', align: 'center', title: '操作单据', hide: true}, | 
 |  |  |             {field: '操作类型', align: 'center', title: '操作类型', hide: true}, | 
 |  |  |             {field: 'orderNo', title: '单据编号', templet: '#orderNoTpl'}, | 
 |  |  |             //{field: 'itemName', align: 'center', title: '核算主体'}, | 
 |  |  |             {field: 'docType$', align: 'center', title: '单据类型'}, | 
 |  |  |             {field: 'threeCode', align: 'center',title: '销售单号'}, | 
 |  |  |             {field: 'anfme', align: 'center',title: '数量'}, | 
 |  |  |             {field: 'qty', align: 'center',title: '作业数量'}, | 
 |  |  |             {field: 'matnr', align: 'center',title: '物料号'}, | 
 |  |  |             {field: 'maktx', align: 'center',title: '物料名称'}, | 
 |  |  |             {field: 'processSts$', title: '工序'}, | 
 |  |  |             {field: 'reportQty', align: 'center',title: '上报数量'}, | 
 |  |  |             {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 140, width: 140}, | 
 |  |  |             //{field: 'defNumber', align: 'center', title: '业务类型'}, | 
 |  |  |             //{field: 'postFee', align: 'center', title: '总数量',  minWidth: 130, width: 130}, | 
 |  |  |             //{align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160}, | 
 |  |  |             {field: 'orderTime', align: 'center',title: '单据日期'}, | 
 |  |  |             //{field: 'shipCode', align: 'center',title: '制单人'}, | 
 |  |  |             {field: 'createBy$', title: '创建人'}, | 
 |  |  |             {field: 'createTime$', title: '创建时间'}, | 
 |  |  |             {field: 'memo', align: 'center',title: '备注', hide: true}, | 
 |  |  |             {field: 'cstmrName', align: 'center',title: '供应商/客户编码', hide: true}, | 
 |  |  |             {field: 'tel', align: 'center',title: '仓库', hide: true}, | 
 |  |  |             {field: 'operMemb', align: 'center',title: '出入库类别', hide: true}, | 
 |  |  |             {field: 'salesman', align: 'center',title: '部门', hide: true}, | 
 |  |  |             {align: 'center', title: '操作', toolbar: '#operate', width: 160} | 
 |  |  |         ]], | 
 |  |  |         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) { | 
 |  |  |             limit(); | 
 |  |  |             if (res.code === 403) { | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } | 
 |  |  |             insTbCount = count; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 搜索 | 
 |  |  |     form.on('submit(tbSearch)', function (data) { | 
 |  |  |         insTb.reload({where: data.field, page: {curr: 1}}); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 添加 | 
 |  |  |     $("#orderAddBtn").click(function () { | 
 |  |  |         showEditModel(); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 导入销售单 | 
 |  |  |     $("#importOrder").click(function () { | 
 |  |  |         $("#importExcel").trigger("click"); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |      $("#orderCheckBtn").click(function () { | 
 |  |  |             $("#importExcel2").trigger("click"); | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |     // 工具条点击事件 | 
 |  |  |     table.on('tool(order)', function (obj) { | 
 |  |  |         var data = obj.data; | 
 |  |  |         var layEvent = obj.event; | 
 |  |  |         if (layEvent === 'edit') { | 
 |  |  |             showEditModel(data); | 
 |  |  |         } else if (layEvent === 'wrkTrace') { | 
 |  |  |             showWrkTrace(data.id); | 
 |  |  |         } else if (layEvent === 'del') { | 
 |  |  |             doDel(data.id); | 
 |  |  |         } else if (layEvent === 'complete') { | 
 |  |  |             doModify(data.id, 4); | 
 |  |  |         } else if (layEvent === 'report'){ | 
 |  |  |             doReport(data.id); | 
 |  |  |         } else if (layEvent === 'look') { | 
 |  |  |             var $a = $(obj.tr).find('a[lay-event="look"]'); | 
 |  |  |             var offset = $a.offset(); | 
 |  |  |             var top = offset.top; | 
 |  |  |             var left = offset.left; | 
 |  |  |             layer.open({ | 
 |  |  |                 type: 1, | 
 |  |  |                 title: false, | 
 |  |  |                 area: '1100px', | 
 |  |  |                 offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'], | 
 |  |  |                 shade: .01, | 
 |  |  |                 shadeClose: true, | 
 |  |  |                 fixed: false, | 
 |  |  |                 content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>', | 
 |  |  |                 success: function (layero) { | 
 |  |  |                     table.render({ | 
 |  |  |                         elem: '#lookSSXMTable', | 
 |  |  |                         headers: {token: localStorage.getItem('token')}, | 
 |  |  |                         url: baseUrl+'/orderDetl/list/auth', | 
 |  |  |                         where: { | 
 |  |  |                             order_id: data.id | 
 |  |  |                         }, | 
 |  |  |                         page: true, | 
 |  |  |                         cellMinWidth: 100, | 
 |  |  |                         cols: [[ | 
 |  |  |                             {type: 'numbers'}, | 
 |  |  |                             {field: 'matnr', title: '商品编码', width: 140}, | 
 |  |  |                             {field: 'maktx', title: '商品名称', width: 150}, | 
 |  |  |                             {field: 'batch', title: '批号'}, | 
 |  |  |                             {field: 'anfme', title: '数量'}, | 
 |  |  |                             {field: 'qty', title: '作业数量', style: 'font-weight: bold'}, | 
 |  |  |                             // {field: 'unit', title: '单位'}, | 
 |  |  |                             // { | 
 |  |  |                             //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) { | 
 |  |  |                             //         return util.toDateString(d.createTime); | 
 |  |  |                             //     },  width: 180 | 
 |  |  |                             // }, | 
 |  |  |                             // {field: 'inQty', title: '已入库量'}, | 
 |  |  |                             // {field: 'color', title: '颜色'}, | 
 |  |  |                             //{field: 'specs', title: '规格型号'}, | 
 |  |  |                             {field: 'unit', title: '计量单位'}, | 
 |  |  |                             //{field: 'manu', title: '行号'}, | 
 |  |  |                             {field: 'threeCode', title: '销售单号'}, | 
 |  |  |                             //{field: 'deadTime', title: '自由项'}, | 
 |  |  |                             {field: 'processSts$', title: '工序'}, | 
 |  |  |                             //{field: 'specs', title: '规格'}, | 
 |  |  |                             {field: 'reportQty', title: '上报数量'}, | 
 |  |  |                             //{field: 'itemNum', title: '行唯一标识'} | 
 |  |  |                         ]], | 
 |  |  |                         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 () { | 
 |  |  |                             $(layero).find('.layui-table-view').css('margin', '0'); | 
 |  |  |                         }, | 
 |  |  |                         size: '' | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 显示表单弹窗 | 
 |  |  |     function showEditModel(expTpe) { | 
 |  |  |         admin.open({ | 
 |  |  |             type: 1, | 
 |  |  |             title: (expTpe ? '修改' : '添加') + '单据', | 
 |  |  |             content: $('#editDialog').html(), | 
 |  |  |             area: '1600px', | 
 |  |  |             success: function (layero, dIndex) { | 
 |  |  |                 $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                 var isExpAdd = !expTpe; | 
 |  |  |                 // 回显数据 | 
 |  |  |                 form.val('editForm', expTpe); | 
 |  |  |                 if (expTpe) { | 
 |  |  |                     $('#orderNo').attr("disabled", "disabled"); | 
 |  |  |                 } | 
 |  |  |                 // 表单提交事件 | 
 |  |  |                 form.on('submit(orderEditSubmit)', function (data) { | 
 |  |  |                     // 组装数据 | 
 |  |  |                     if (xxDataList.length <= 0) { | 
 |  |  |                         layer.tips('请添加单据明细', '#matAddBtnComment', {tips: [1, '#ff4c4c']}); | 
 |  |  |                         return false; | 
 |  |  |                     } | 
 |  |  |                     let nList = admin.util.deepClone(xxDataList); | 
 |  |  |                     for (let xi = 0; xi < nList.length; xi++) { | 
 |  |  |                         if (nList[xi].anfme <= 0){ | 
 |  |  |                             layer.msg('明细修改数量不合法', {icon: 2}); | 
 |  |  |                             return false; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     layer.load(2); | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: JSON.stringify({ | 
 |  |  |                             orderId: Number(data.field.id), | 
 |  |  |                             docType: Number(data.field.docType), | 
 |  |  |                             orderNo: data.field.orderNo, | 
 |  |  |                             orderDetlList: nList | 
 |  |  |                         }), | 
 |  |  |                         contentType:'application/json;charset=UTF-8', | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.closeAll('loading'); | 
 |  |  |                             if (res.code === 200){ | 
 |  |  |                                 layer.close(dIndex); | 
 |  |  |                                 $(".layui-laypage-btn")[0].click(); | 
 |  |  |                                 layer.msg(res.msg, {icon: 1}); | 
 |  |  |                             } else if (res.code === 403){ | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             }else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }) | 
 |  |  |                     return false; | 
 |  |  |                 }); | 
 |  |  |                 // 明细表格 | 
 |  |  |                 var xxDataList = []; | 
 |  |  |                 var tbOptions = { | 
 |  |  |                     elem: '#formSSXMTable', | 
 |  |  |                     headers: {token: localStorage.getItem('token')}, | 
 |  |  |                     data: xxDataList, | 
 |  |  |                     page: true, | 
 |  |  |                     //height: '350px;', | 
 |  |  |                     cellMinWidth: 100, | 
 |  |  |  | 
 |  |  |                     css: [ // 设置单元格样式 | 
 |  |  |                         // 取消默认的溢出隐藏,并设置适当高度 | 
 |  |  |                         '.layui-table-cell{height: 50px; line-height: 40px;}', | 
 |  |  |                         '.layui-table-cell .layui-colorpicker{width: 38px; height: 38px;}', | 
 |  |  |                         '.layui-table-cell select{height: 36px; padding: 0 5px;}' | 
 |  |  |                     ].join(''), | 
 |  |  |                     cols: [[ | 
 |  |  |                         {type: 'numbers', title: '#'}, | 
 |  |  |                         {field: 'matnr', title: '商品编码', width: 160}, | 
 |  |  |                         {field: 'maktx', title: '商品名称', width: 160}, | 
 |  |  |                         {field: 'batch', title: '序列码', edit: true}, | 
 |  |  |                         {field: 'specs', title: '规格'}, | 
 |  |  |                         {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110}, | 
 |  |  |                         {field: 'threeCode', title: '销售订单号(修改)', style: 'color: blue;font-weight: bold', edit: 'text', minWidth: 110, width: 110}, | 
 |  |  |                         {field: 'deadTime', title: '销售订单行号(修改)', style: 'color: blue;font-weight: bold', edit: 'text', minWidth: 110, width: 110}, | 
 |  |  |                         {field: 'processSts', title: '工序', templet: function (d) { | 
 |  |  |                             var select = `<select class="layui-select" name="processSts" data-state=${d.processSts} lay-filter="processStsSelect" data-value=${d.processSts} id=${d.id}> | 
 |  |  |                                             <option value="">选择状态</option> | 
 |  |  |                                             <option value="1">待加工</option> | 
 |  |  |                                             <option value="2">已加工</option> | 
 |  |  |                                             <option value="3">无需加工</option> | 
 |  |  |                                         </select>`; | 
 |  |  |                             return select; | 
 |  |  |                             }}, | 
 |  |  |                         // {field: 'inQty', title: '已入库量',  minWidth: 100, width: 100}, | 
 |  |  |                         // {field: 'unit', title: '单位', width: 80}, | 
 |  |  |                         {field: 'memo', title: '备注' , edit: true}, | 
 |  |  |                         {align: 'center', title: '操作', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'} | 
 |  |  |                     ]], | 
 |  |  |                     done: function (res,curr, count) { | 
 |  |  |                         $(layero).find('.layui-table-view').css('margin', '0'); | 
 |  |  |                         $(".layui-table-body").css('overflow','visible'); | 
 |  |  |                         $(".layui-table-box").css('overflow','visible'); | 
 |  |  |                         $(".layui-table-view").css('overflow','visible'); | 
 |  |  |  | 
 |  |  |                         var tableElem = this.elem.next('.layui-table-view'); | 
 |  |  |                         count || tableElem.find('.layui-table-header').css('overflow', 'auto'); | 
 |  |  |                         layui.each(tableElem.find('select[name="processSts"]'), function (index, item) { | 
 |  |  |                             var elem = $(item); | 
 |  |  |                             elem.val(elem.data('state')).parents('div.layui-table-cell').css('overflow', 'visible'); | 
 |  |  |                         }); | 
 |  |  |  | 
 |  |  |                         form.render();//刷新表单 | 
 |  |  |                     }, | 
 |  |  |                     size: '' | 
 |  |  |                 }; | 
 |  |  |                 if (!isExpAdd) { | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/order/detl/all/auth?orderId=" + expTpe.id, | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         method: 'GET', | 
 |  |  |                         async: false, | 
 |  |  |                         success: function (res) { | 
 |  |  |                             if (res.code === 200){ | 
 |  |  |                                 xxDataList = res.data; | 
 |  |  |                                 tbOptions.data = xxDataList; | 
 |  |  |                             } else if (res.code === 403){ | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             }else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }) | 
 |  |  |                 } | 
 |  |  |                 var insTbSSXM = table.render(tbOptions); | 
 |  |  |                 // 工具条点击事件 | 
 |  |  |                 table.on('tool(formSSXMTable)', function (obj) { | 
 |  |  |                     var data = obj.data; | 
 |  |  |                     var layEvent = obj.event; | 
 |  |  |                     if (layEvent === 'edit') { | 
 |  |  |                         showEditModel2(data); | 
 |  |  |                     } else if (layEvent === 'del') { | 
 |  |  |                         layer.confirm('确定要删除吗?', { | 
 |  |  |                             shade: .1, | 
 |  |  |                             skin: 'layui-layer-admin' | 
 |  |  |                         }, function (i) { | 
 |  |  |                             layer.close(i); | 
 |  |  |                             for (var j = 0; j < xxDataList.length; j++) { | 
 |  |  |                                 if (xxDataList[j].matnr === data.matnr && xxDataList[j].batch === data.batch) { | 
 |  |  |                                     xxDataList.splice(j, 1); | 
 |  |  |                                     break; | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             insTbSSXM.reload({data: xxDataList, page: {curr: 1}}); | 
 |  |  |                         }); | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 // 工具条点击事件 | 
 |  |  |                 form.on('select(processStsSelect)', function (obj) { | 
 |  |  |                     console.log(obj) | 
 |  |  |                     var id = obj.elem.id | 
 |  |  |                     var val = obj.value | 
 |  |  |                     for (let item of xxDataList) { | 
 |  |  |                         if (item.id == id) { | 
 |  |  |                             item.processSts = val | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 // 明细数据修改 | 
 |  |  |                 table.on('edit(formSSXMTable)', function (obj) { | 
 |  |  |                     let index = 0; | 
 |  |  |                     for (let k in xxDataList) { | 
 |  |  |                         if (obj.data.id === xxDataList[k].id) | 
 |  |  |                             index = k | 
 |  |  |                     } | 
 |  |  |                     let data = xxDataList[index]; | 
 |  |  |                     if (obj.field === 'anfme'){ | 
 |  |  |                         let vle = Number(obj.value); | 
 |  |  |                         if (isNaN(vle)) { | 
 |  |  |                             layer.msg("请输入数字", {icon: 2}); | 
 |  |  |                             return false; | 
 |  |  |                         } else { | 
 |  |  |                             if (vle <= 0) { | 
 |  |  |                                 layer.msg("数量必须大于零", {icon: 2}); | 
 |  |  |                                 return false; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     data[obj.field] = obj.value; | 
 |  |  |                     insTbSSXM.reload({data: xxDataList}); | 
 |  |  |                 }); | 
 |  |  |  | 
 |  |  |                 $('#matAddBtnComment').click(function () { | 
 |  |  |                     showEditModel2(); | 
 |  |  |                 }); | 
 |  |  |  | 
 |  |  |                 // 显示添加明细表单弹窗 | 
 |  |  |                 function showEditModel2(exp) { | 
 |  |  |                     admin.open({ | 
 |  |  |                         type: 1, | 
 |  |  |                         offset: '150px', | 
 |  |  |                         area: '680px', | 
 |  |  |                         title: (exp ? '修改' : '添加') + '明细', | 
 |  |  |                         content: $('#matEditDialog').html(), | 
 |  |  |                         success: function (layero, dIndex) { | 
 |  |  |                             // 回显数据 | 
 |  |  |                             form.val('matEditForm', exp); | 
 |  |  |                             // 表单提交事件 | 
 |  |  |                             form.on('submit(matEditSubmit)', function (data) { | 
 |  |  |                                 let selectList = matXmSelect.getValue(); | 
 |  |  |                                 for (let i = 0; i<selectList.length; i++) { | 
 |  |  |                                     let item = selectList[i]; | 
 |  |  |                                     // 查询物料详情 | 
 |  |  |                                     $.ajax({ | 
 |  |  |                                         url: baseUrl+"/mat/covert/"+item.value+"/auth", | 
 |  |  |                                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                         method: 'GET', | 
 |  |  |                                         async: false, | 
 |  |  |                                         success: function (res) { | 
 |  |  |                                             if (res.code === 200){ | 
 |  |  |                                                 xxDataList.push(res.data); | 
 |  |  |                                                 insTbSSXM.reload({data: xxDataList, page: {curr: 1}}); | 
 |  |  |                                             } else if (res.code === 403){ | 
 |  |  |                                                 top.location.href = baseUrl+"/"; | 
 |  |  |                                             }else { | 
 |  |  |                                                 layer.msg(res.msg, {icon: 2}) | 
 |  |  |                                             } | 
 |  |  |                                         } | 
 |  |  |                                     }) | 
 |  |  |                                 } | 
 |  |  |                                 layer.close(dIndex); | 
 |  |  |                                 return false; | 
 |  |  |                             }); | 
 |  |  |                             // 渲染物料选择 | 
 |  |  |                             var matXmSelect = xmSelect.render({ | 
 |  |  |                                 el: '#mat', | 
 |  |  |                                 style: { | 
 |  |  |                                     width: '340px', | 
 |  |  |                                 }, | 
 |  |  |                                 autoRow: true, | 
 |  |  |                                 toolbar: { show: true }, | 
 |  |  |                                 filterable: true, | 
 |  |  |                                 remoteSearch: true, | 
 |  |  |                                 remoteMethod: function(val, cb, show){ | 
 |  |  |                                     $.ajax({ | 
 |  |  |                                         url: baseUrl+"/mat/all/get/kv", | 
 |  |  |                                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                         data: { | 
 |  |  |                                             condition: val | 
 |  |  |                                         }, | 
 |  |  |                                         method: 'POST', | 
 |  |  |                                         success: function (res) { | 
 |  |  |                                             if (res.code === 200){ | 
 |  |  |                                                 cb(res.data) | 
 |  |  |                                             } else { | 
 |  |  |                                                 cb([]); | 
 |  |  |                                                 layer.msg(res.msg, {icon: 2}); | 
 |  |  |                                             } | 
 |  |  |                                         } | 
 |  |  |                                     }); | 
 |  |  |                                 } | 
 |  |  |                             }) | 
 |  |  |                             // 弹窗不出现滚动条 | 
 |  |  |                             $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                             layui.form.render('select'); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 删除单据 | 
 |  |  |     function doDel(orderId) { | 
 |  |  |         layer.confirm('确定要删除吗?', { | 
 |  |  |             shade: .1, | 
 |  |  |             skin: 'layui-layer-admin' | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             layer.load(2); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/order/delete/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: { | 
 |  |  |                     orderId: orderId | 
 |  |  |                 }, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.closeAll('loading'); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         if (insTbCount === 0) { | 
 |  |  |                             insTb.reload({page: {curr: 1}}); | 
 |  |  |                         } else { | 
 |  |  |                             $(".layui-laypage-btn")[0].click(); | 
 |  |  |                         } | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     }else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 上传审核单据 | 
 |  |  |     function doReport(orderId) { | 
 |  |  |         layer.confirm('确定要上传单据吗?', { | 
 |  |  |             shade: .1, | 
 |  |  |             skin: 'layui-layer-admin' | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             layer.load(2); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/order/report/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: { | 
 |  |  |                     orderId: orderId | 
 |  |  |                 }, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.closeAll('loading'); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         if (insTbCount === 0) { | 
 |  |  |                             insTb.reload({page: {curr: 1}}); | 
 |  |  |                         } else { | 
 |  |  |                             $(".layui-laypage-btn")[0].click(); | 
 |  |  |                         } | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     }else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 修改订单状态 | 
 |  |  |     function doModify(orderId, settle) { | 
 |  |  |         layer.confirm('确定要手动完结吗?', { | 
 |  |  |             shade: .1, | 
 |  |  |             skin: 'layui-layer-admin' | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             layer.load(2); | 
 |  |  |             console.log(orderId); | 
 |  |  |             console.log(settle); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/order/update/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: { | 
 |  |  |                     id: orderId, | 
 |  |  |                     settle: settle | 
 |  |  |                 }, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.closeAll('loading'); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         if (insTbCount === 0) { | 
 |  |  |                             insTb.reload({page: {curr: 1}}); | 
 |  |  |                         } else { | 
 |  |  |                             $(".layui-laypage-btn")[0].click(); | 
 |  |  |                         } | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     }else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 任务追溯 | 
 |  |  |     function showWrkTrace(orderId) { | 
 |  |  |         let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false}); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+"/order/wrk/trace/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             data: { | 
 |  |  |                 orderId: orderId | 
 |  |  |             }, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 layer.close(loadIndex); | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) { | 
 |  |  |                         admin.open({ | 
 |  |  |                             type: 1, | 
 |  |  |                             title: '任务追溯', | 
 |  |  |                             area: ['800px', '450px'], | 
 |  |  |                             shadeClose: true, | 
 |  |  |                             content: html, | 
 |  |  |                             success: function (layero, dIndex) { | 
 |  |  |                                 $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                                 /** 统计图表 */ | 
 |  |  |                                 var traceCharts = echarts.init(document.getElementById('wrkTraceCharts')); | 
 |  |  |                                 var traceOptions = { | 
 |  |  |                                     title: { | 
 |  |  |                                         text: '作业/总量', x: 'center', y: '38%', | 
 |  |  |                                         textStyle: {fontSize: 18, color: '#262626', fontWeight: 'normal'}, | 
 |  |  |                                         subtextStyle: {fontSize: 36, color: '#10B4E8'}, | 
 |  |  |                                         itemGap: 20 | 
 |  |  |                                     }, | 
 |  |  |                                     color: ['#10B4E8', '#E0E0E0', '#FF0000'], | 
 |  |  |                                     tooltip: {trigger: 'item'}, | 
 |  |  |                                     series: [{name: '数量', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}] | 
 |  |  |                                 }; | 
 |  |  |                                 traceCharts.setOption(traceOptions); | 
 |  |  |                                 // 赋值 | 
 |  |  |                                 traceCharts.setOption({ | 
 |  |  |                                     title: { | 
 |  |  |                                         subtext: res.data.wrkQty+"/"+res.data.totalQty | 
 |  |  |                                     }, | 
 |  |  |                                     series: [ | 
 |  |  |                                         { | 
 |  |  |                                             data: [ | 
 |  |  |                                                 {name: '已作业', value: res.data.wrkQty}, | 
 |  |  |                                                 {name: '未作业', value: res.data.totalQty-res.data.wrkQty-res.data.lackQty}, | 
 |  |  |                                                 {name: '库存不足', value: res.data.lackQty}, | 
 |  |  |                                             ] | 
 |  |  |                                         } | 
 |  |  |                                     ] | 
 |  |  |                                 }); | 
 |  |  |                             } | 
 |  |  |                         }); | 
 |  |  |                     }); | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 }else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     layDate.render({ | 
 |  |  |         elem: '.layui-laydate-range' | 
 |  |  |         ,type: 'datetime' | 
 |  |  |         ,range: true | 
 |  |  |     }); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function upload(obj){ | 
 |  |  |     if(!obj.files) { | 
 |  |  |         return; | 
 |  |  |     } | 
 |  |  |     var file = obj.files[0]; | 
 |  |  |     admin.confirm('确认导入 [' + file.name +'] 文件吗?', function (index) { | 
 |  |  |         layer.load(1, {shade: [0.1,'#fff']}); | 
 |  |  |         var url = baseUrl + "/order/excel/import/auth"; | 
 |  |  |         var form = new FormData(); | 
 |  |  |         form.append("file", file); | 
 |  |  |         let xhr = new XMLHttpRequest(); | 
 |  |  |         xhr.open("post", url, true); | 
 |  |  |         xhr.setRequestHeader('token', localStorage.getItem('token')); | 
 |  |  |         xhr.onload = uploadComplete; | 
 |  |  |         xhr.onerror =  uploadFailed; | 
 |  |  |         xhr.onloadend = function () { | 
 |  |  |             layer.closeAll('loading'); | 
 |  |  |         }; | 
 |  |  |         // xhr.upload.onprogress = progressFunction; | 
 |  |  |         xhr.upload.onloadstart = function(){ | 
 |  |  |             ot = new Date().getTime(); | 
 |  |  |             oloaded = 0; | 
 |  |  |         }; | 
 |  |  |         xhr.send(form); | 
 |  |  |     }, function(index){ | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  | function uploadComplete(evt) { | 
 |  |  |     let res = JSON.parse(evt.target.responseText); | 
 |  |  |     if(res.code === 200) { | 
 |  |  |         layer.msg(res.msg, {icon: 1}); | 
 |  |  |         insTb.reload({page: {curr: 1}}); | 
 |  |  |     } else { | 
 |  |  |         alert(res.msg); | 
 |  |  |         // layer.msg(res.msg, {icon: 2}); | 
 |  |  |     } | 
 |  |  | } | 
 |  |  | function uploadFailed(evt) { | 
 |  |  |     let res = JSON.parse(evt.target.responseText); | 
 |  |  |     alert(res.msg); | 
 |  |  |     // layer.msg(res.msg, {icon: 2}); | 
 |  |  | } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | function upload2(obj){ | 
 |  |  |     if(!obj.files) { | 
 |  |  |         return; | 
 |  |  |     } | 
 |  |  |     var file = obj.files[0]; | 
 |  |  |     admin.confirm('确认导入 [' + file.name +'] 文件吗?', function (index) { | 
 |  |  |             layer.load(1, {shade: [0.1,'#fff']}); | 
 |  |  |             var url = baseUrl + "/order/excel/import2/auth"; | 
 |  |  |             var form = new FormData(); | 
 |  |  |             form.append("file", file); | 
 |  |  |             let xhr = new XMLHttpRequest(); | 
 |  |  |             xhr.open("post", url, true); | 
 |  |  |             xhr.setRequestHeader('token', localStorage.getItem('token')); | 
 |  |  |             xhr.onload = uploadComplete; | 
 |  |  |             xhr.onerror =  uploadFailed; | 
 |  |  |             xhr.onloadend = function () { | 
 |  |  |                 layer.closeAll('loading'); | 
 |  |  |             }; | 
 |  |  |             // xhr.upload.onprogress = progressFunction; | 
 |  |  |             xhr.upload.onloadstart = function(){ | 
 |  |  |                 ot = new Date().getTime(); | 
 |  |  |                 oloaded = 0; | 
 |  |  |             }; | 
 |  |  |             xhr.send(form); | 
 |  |  |         }, function(index){ | 
 |  |  |         }); | 
 |  |  | } | 
 |  |  | function uploadComplete(evt) { | 
 |  |  |     let res = JSON.parse(evt.target.responseText); | 
 |  |  |     if(res.code === 200) { | 
 |  |  |         layer.msg(res.msg, {icon: 1}); | 
 |  |  |         insTb.reload({page: {curr: 1}}); | 
 |  |  |     } else { | 
 |  |  |         alert(res.msg); | 
 |  |  |         // layer.msg(res.msg, {icon: 2}); | 
 |  |  |     } | 
 |  |  | } | 
 |  |  | function uploadFailed(evt) { | 
 |  |  |     let res = JSON.parse(evt.target.responseText); | 
 |  |  |     alert(res.msg); | 
 |  |  |     // layer.msg(res.msg, {icon: 2}); | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | var pageCurr; | 
 |  |  | var insTb2; | 
 |  |  | layui.config({ | 
 |  |  |     base: baseUrl + "/static/layui/lay/modules/" | 
 |  |  | }).extend({ | 
 |  |  |     notice: 'notice/notice', | 
 |  |  | }).use(['table','laydate', 'form', 'util', 'admin', 'notice', 'treeTable', 'xmSelect', 'tableMerge', 'tableX'], function(){ | 
 |  |  |     var table = layui.table; | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var form = layui.form; | 
 |  |  |     var admin = layui.admin; | 
 |  |  |     var util = layui.util; | 
 |  |  |     var notice = layui.notice; | 
 |  |  |     var treeTable = layui.treeTable; | 
 |  |  |     var xmSelect = layui.xmSelect; | 
 |  |  |     var tableMerge = layui.tableMerge; | 
 |  |  |     var tableX = layui.tableX; | 
 |  |  |  | 
 |  |  |     insTb2 = table.render({ | 
 |  |  |         elem: '#orderDetlTable', | 
 |  |  |         headers: {token: localStorage.getItem('token')}, | 
 |  |  |         url: baseUrl+'/orderDetl/pakout/list/auth', | 
 |  |  |         page: true, | 
 |  |  |         limit: 15, | 
 |  |  |         limits: [15, 30, 50, 100, 200, 500], | 
 |  |  |         toolbar: '#orderDetToolbar', | 
 |  |  |         height: 'full-120', | 
 |  |  |         where: {order_id: 9999999999}, | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'checkbox'} | 
 |  |  |             ,{type: 'numbers', title: '#'} | 
 |  |  |             ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160} | 
 |  |  |             ,{field: 'matnr', align: 'center',title: '物料号', width: 160} | 
 |  |  |             ,{field: 'maktx', align: 'center',title: '物料名称', width: 200} | 
 |  |  |             ,{field: 'batch', align: 'center',title: '序列码'} | 
 |  |  |             ,{field: 'specs', align: 'center',title: '规格'} | 
 |  |  |             // ,{field: 'anfme', align: 'center',title: '数量'} | 
 |  |  |             // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'} | 
 |  |  |             ,{field: 'enableQty', align: 'center',title: '待出数量', style: 'font-weight: bold'} | 
 |  |  |             ,{field: 'threeCode', align: 'center',title: '销售订单号'} | 
 |  |  |             ,{field: 'deadTime', align: 'center',title: '销售订单行号'} | 
 |  |  |             // ,{field: 'name', align: 'center',title: '名称'} | 
 |  |  |             // ,{field: 'model', align: 'center',title: '通用型号'} | 
 |  |  |             ,{field: 'unit', align: 'center',title: '单位', hide: true} | 
 |  |  |             ,{field: 'barcode', align: 'center',title: '商品条码', hide: true} | 
 |  |  |             // ,{field: 'supplier', align: 'center',title: '供应商'} | 
 |  |  |             // ,{field: 'unitPrice', align: 'center',title: '单价'} | 
 |  |  |             // ,{field: 'itemNum', align: 'center',title: '品项数'} | 
 |  |  |             // ,{field: 'count', align: 'center',title: '数量'} | 
 |  |  |             // ,{field: 'weight', align: 'center',title: '重量'} | 
 |  |  |             // ,{field: 'status$', align: 'center',title: '状态'} | 
 |  |  |             // ,{field: 'createBy$', align: 'center',title: '添加人员'} | 
 |  |  |             // ,{field: 'createTime$', align: 'center',title: '添加时间'} | 
 |  |  |             // ,{field: 'updateBy$', align: 'center',title: '修改人员'} | 
 |  |  |             // ,{field: 'updateTime$', align: 'center',title: '修改时间'} | 
 |  |  |             // ,{field: 'memo', align: 'center',title: '备注'} | 
 |  |  |             ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 160} | 
 |  |  |         ]], | 
 |  |  |         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(); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /* 表格2搜索 */ | 
 |  |  |     form.on('submit(sensorTbSearch)', function (data) { | 
 |  |  |         insTb2.reload({where: data.field, page: {curr: 1}}); | 
 |  |  |         return false; | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /* 表格2头工具栏点击事件 */ | 
 |  |  |     table.on('toolbar(orderDetlTable)', function (obj) { | 
 |  |  |         var checkStatus = table.checkStatus(obj.config.id).data; | 
 |  |  |         if (obj.event === 'pakoutPreview') { // 添加 | 
 |  |  |             if (checkStatus.length === 0) { | 
 |  |  |                 layer.msg('请选择至少一条出库明细', {icon: 2}); | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             pakoutPreview(checkStatus.map(function (d) { | 
 |  |  |                 return d.id; | 
 |  |  |             })); | 
 |  |  |         } else if (obj.event === 'del') { // 删除 | 
 |  |  |             var checkRows = table.checkStatus('sensorTable'); | 
 |  |  |             if (checkRows.data.length === 0) { | 
 |  |  |                 layer.msg('请选择要删除的数据', {icon: 2}); | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             var ids = checkRows.data.map(function (d) { | 
 |  |  |                 return d.id; | 
 |  |  |             }); | 
 |  |  |             doDelSensor({ids: ids}); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /* 表格2工具条点击事件 */ | 
 |  |  |     table.on('tool(orderDetlTable)', function (obj) { | 
 |  |  |         var data = obj.data; | 
 |  |  |         switch (obj.event) { | 
 |  |  |             // 出库 | 
 |  |  |             case 'pakoutPreview': | 
 |  |  |                 pakoutPreview([data.id]) | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     function pakoutPreview(ids) { | 
 |  |  |         let loadIndex = layer.load(2); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/out/pakout/preview/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             contentType: 'application/json;charset=UTF-8', | 
 |  |  |             data: JSON.stringify(ids), | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 layer.close(loadIndex); | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     pakoutPreviewDialog(res.data) | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 } else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}) | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function pakoutPreviewDialog(data) { | 
 |  |  |         for(var i=0; i<data.length; i++){ | 
 |  |  |             if(!data[i].staNos){ | 
 |  |  |                 data[i].staNos = data[i].agvStaNos; | 
 |  |  |                 data[i].staNo = data[i].agvStaNo; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         var tableCache; | 
 |  |  |         layer.open({ | 
 |  |  |             type: 1 | 
 |  |  |             ,title: false | 
 |  |  |             ,closeBtn: false | 
 |  |  |             ,offset: '50px' | 
 |  |  |             ,area: ['1200px', '700px'] | 
 |  |  |             ,shade: 0.5 | 
 |  |  |             ,shadeClose: false | 
 |  |  |             ,btn: ['立即出库', '稍后处理'] | 
 |  |  |             ,btnAlign: 'c' | 
 |  |  |             ,moveType: 1 //拖拽模式,0或者1 | 
 |  |  |             ,content: $('#pakoutPreviewBox').html() | 
 |  |  |             ,success: function(layero, index){ | 
 |  |  |                 stoPreTabIdx = table.render({ | 
 |  |  |                     elem: '#stoPreTab', | 
 |  |  |                     data: data, | 
 |  |  |                     height: 520, | 
 |  |  |                     page: false, | 
 |  |  |                     limit: Number.MAX_VALUE, | 
 |  |  |                     cellMinWidth: 100, | 
 |  |  |                     cols: [[ | 
 |  |  |                         // {type: 'checkbox', merge: ['orderNo']}, | 
 |  |  |                         {field: 'orderNo', title: '单据编号', merge: true, align: 'center'}, | 
 |  |  |                         {field: 'title', title: '商品', merge: true, align: 'center', width: 350}, | 
 |  |  |                         {field: 'batch', title: '序列码', align: 'center'}, | 
 |  |  |                         {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold', edit:true}, | 
 |  |  |                         {field: 'locNo', title: '货位', align: 'center', templet: '#locNoTpl'}, | 
 |  |  |                         {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'}, | 
 |  |  |                         // {type: 'checkbox', merge: ['locNo']}, | 
 |  |  |                     ]], | 
 |  |  |                     //cols: getCol(data), | 
 |  |  |                     done: function (res) { | 
 |  |  |                         tableMerge.render(this); | 
 |  |  |                         $('.layui-table-body.layui-table-main').css("overflow", "auto"); | 
 |  |  |                         tableCache = tableData = table.cache.stoPreTab; | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 // 修改出库站 | 
 |  |  |                 form.on('select(tbBasicTbStaNos)', function (obj) { | 
 |  |  |                     let index  = obj.othis.parents('tr').attr("data-index"); | 
 |  |  |                     let data = tableCache[index]; | 
 |  |  |                     for (let i = 0; i<tableCache.length; i++) { | 
 |  |  |                         if (tableCache[i].locNo === data.locNo) { | 
 |  |  |                             //tableCache[i]['staNo'] = Number(obj.elem.value); | 
 |  |  |                             tableCache[i]['staNo'] = obj.elem.value; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     obj.othis.children().find("input").css("color", "blue"); | 
 |  |  |                     return false; | 
 |  |  |                 }); | 
 |  |  |                 // 批量修改出库站 | 
 |  |  |                 form.on('submit(batchModifySta)', function () { | 
 |  |  |                     modifySta(); | 
 |  |  |                 }); | 
 |  |  |                 // 批量修改出库站 - 站点选择 | 
 |  |  |                 function modifySta() { | 
 |  |  |                     // 出库站取交集 | 
 |  |  |                     let staBatchSelectVal = []; | 
 |  |  |                     for(let i = 0; i<tableCache.length; i++) { | 
 |  |  |                         let staNos = tableCache[i].staNos; | 
 |  |  |                         if (staNos !== null) { | 
 |  |  |                             if (staBatchSelectVal.length === 0) { | 
 |  |  |                                 staBatchSelectVal = staNos; | 
 |  |  |                             } else { | 
 |  |  |                                 staBatchSelectVal = staBatchSelectVal.filter(val => | 
 |  |  |                                     { | 
 |  |  |                                         return new Set(staNos).has(val) | 
 |  |  |                                     } | 
 |  |  |                                 ) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (staBatchSelectVal.length === 0) { | 
 |  |  |                         layer.msg("出库站没有交集,无法批量修改", {icon: 2}); | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  |                     admin.open({ | 
 |  |  |                         type: 1, | 
 |  |  |                         area: '300px', | 
 |  |  |                         offset: 'auto', | 
 |  |  |                         title: '请选择站点', | 
 |  |  |                         content: $('#staBatchSelectDialog').html(), | 
 |  |  |                         success: function (layero, ddIndex) { | 
 |  |  |                             // 渲染下拉框 | 
 |  |  |                             let template = Handlebars.compile($('#batchStaSelectTpl').html()); | 
 |  |  |                             $('#batchSelectStaBox').html(template({list: staBatchSelectVal})); | 
 |  |  |                             // 确认 | 
 |  |  |                             form.on('submit(staBatchSelectConfirm)', function (obj) { | 
 |  |  |                                 let loadIdx = layer.load(2); | 
 |  |  |                                 //let batchSta = Number(obj.field.batchSta); | 
 |  |  |                                 let batchSta = obj.field.batchSta; | 
 |  |  |                                 let arr = []; | 
 |  |  |                                 for (let i = 0; i<tableCache.length; i++) { | 
 |  |  |                                     tableCache[i]['staNo'] = batchSta; | 
 |  |  |                                     arr.push(i); | 
 |  |  |                                 } | 
 |  |  |                                 stoPreTabIdx.reload({data: tableCache}); | 
 |  |  |                                 arr.forEach(item => { | 
 |  |  |                                     $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta); | 
 |  |  |                                 }); | 
 |  |  |                                 layui.form.render('select'); | 
 |  |  |                                 arr.forEach(item => { | 
 |  |  |                                     $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue"); | 
 |  |  |                                 }); | 
 |  |  |                                 layer.close(loadIdx); layer.close(ddIndex); | 
 |  |  |                                 return false; | 
 |  |  |                             }); | 
 |  |  |                             // 弹窗不出现滚动条 | 
 |  |  |                             $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                             layui.form.render('select'); | 
 |  |  |                         }, | 
 |  |  |                     }) | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             ,yes: function(index, layero){ | 
 |  |  |                 //按钮【立即出库】的回调 | 
 |  |  |                 pakout(tableCache, index); | 
 |  |  |             } | 
 |  |  |             ,btn2: function(index, layero){ | 
 |  |  |                 //按钮【稍后处理】的回调 | 
 |  |  |                 layer.close(index) | 
 |  |  |                 //return false 开启该代码可禁止点击该按钮关闭 | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function pakout(tableCache, layerIndex) { | 
 |  |  |         // let loadIndex = layer.load(2); | 
 |  |  |         for(var i=0; i<tableCache.length; i++){ | 
 |  |  |             if(tableCache[i].agvStaNos){ | 
 |  |  |                 tableCache[i].agvStaNo = tableCache[i].staNo; | 
 |  |  |                 tableCache[i].staNos = null; | 
 |  |  |                 tableCache[i].staNo = null; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         notice.msg('正在生成出库任务......', {icon: 4}); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/out/pakout/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             contentType: 'application/json;charset=UTF-8', | 
 |  |  |             data: JSON.stringify(tableCache), | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 notice.destroy(); | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     layer.close(layerIndex); | 
 |  |  |                     layer.msg(res.msg, {icon: 1}); | 
 |  |  |                     insTb.reload({where: null}); | 
 |  |  |                     insTb2.reload({where: null, page: {curr: 1}}); | 
 |  |  |                 } else if (res.code === 403) { | 
 |  |  |                     top.location.href = baseUrl + "/"; | 
 |  |  |                 } else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}) | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /* 删除订单 */ | 
 |  |  |     function doDelSensor(obj) { | 
 |  |  |         layer.confirm('确定要删除选中数据吗?', { | 
 |  |  |             skin: 'layui-layer-admin', | 
 |  |  |             shade: .1 | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             var loadIndex = layer.load(2); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/sensor/delete/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: {ids: obj.ids}, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.close(loadIndex); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                         $(".layui-laypage-btn")[0].click(); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     }else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |  | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 修改状态 | 
 |  |  |     form.on('switch(statusSwitch)', function (obj) { | 
 |  |  |         var index  = obj.othis.parents('tr').attr("data-index"); | 
 |  |  |         var data = tableData[index]; | 
 |  |  |         data[this.name] = obj.elem.checked?1:0; | 
 |  |  |         http.post(baseUrl+"/sensor/edit/auth", {id: data.id, status: data[this.name]}, function (res) { | 
 |  |  |             layer.msg(res.msg, {icon: 1}); | 
 |  |  |         }) | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     window.pakoutPreview = pakoutPreview; | 
 |  |  |  | 
 |  |  |     // ---------------------------------------------------------------------------------------------------------------------------------- | 
 |  |  |  | 
 |  |  |     // 合并出库 | 
 |  |  |     form.on('submit(mergeOut)', function (data) { | 
 |  |  |         let checkStatus = layui.table.checkStatus('originTable').data; | 
 |  |  |         if (checkStatus.length < 2) { | 
 |  |  |             layer.msg("请至少选择两条以上合并数据", {icon: 7}); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         showMerge(checkStatus.map(function (d) { | 
 |  |  |             return d.id; | 
 |  |  |         })); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 订单合并窗口 | 
 |  |  |     function showMerge(orderIds) { | 
 |  |  |         let loadIndex = layer.load(2); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+"/order/merge/preview/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'GET', | 
 |  |  |             data: { | 
 |  |  |                 orderIds: orderIds | 
 |  |  |             }, | 
 |  |  |             success: function (res) { | 
 |  |  |                 layer.close(loadIndex); | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     layer.open({ | 
 |  |  |                         type: 1 | 
 |  |  |                         , title: false | 
 |  |  |                         , closeBtn: false | 
 |  |  |                         , offset: '50px' | 
 |  |  |                         , area: ['1200px', '700px'] | 
 |  |  |                         , shade: 0.5 | 
 |  |  |                         , shadeClose: false | 
 |  |  |                         , btn: ['确定', '取消'] | 
 |  |  |                         , btnAlign: 'c' | 
 |  |  |                         , moveType: 1 //拖拽模式,0或者1 | 
 |  |  |                         , content: $('#mergeDialog').html() | 
 |  |  |                         , success: function (layero, index) { | 
 |  |  |                             orderMergeTabIdx = table.render({ | 
 |  |  |                                 elem: '#orderMergeTab', | 
 |  |  |                                 data: res.data, | 
 |  |  |                                 height: 550, | 
 |  |  |                                 page: false, | 
 |  |  |                                 limit: Number.MAX_VALUE, | 
 |  |  |                                 cellMinWidth: 100, | 
 |  |  |                                 cols: [[ | 
 |  |  |                                     {type: 'checkbox'}, | 
 |  |  |                                     {field: 'matnr', title: '物料号', align: 'center', width: 350}, | 
 |  |  |                                     {field: 'maktx', title: '物料名称', align: 'center'}, | 
 |  |  |                                     {field: 'specs', title: '规格', align: 'center'}, | 
 |  |  |                                     {field: 'batch', title: '批号', align: 'center'}, | 
 |  |  |                                     {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'}, | 
 |  |  |                                 ]], | 
 |  |  |                                 done: function (res) { | 
 |  |  |                                     $('.layui-table-body.layui-table-main').css("overflow", "auto"); | 
 |  |  |                                 } | 
 |  |  |                             }); | 
 |  |  |                         } | 
 |  |  |                         , yes: function (index, layero) { | 
 |  |  |                             //按钮【确定】的回调 | 
 |  |  |                             let checkStatus = layui.table.checkStatus('orderMergeTab').data; | 
 |  |  |                             if (checkStatus.length < 1) { | 
 |  |  |                                 layer.msg("请至少选择一条数据", {icon: 7}); | 
 |  |  |                                 return false; | 
 |  |  |                             } | 
 |  |  |                             let loadIndex = layer.load(2); | 
 |  |  |                             $.ajax({ | 
 |  |  |                                 url: baseUrl + "/out/pakout/preview/merge/auth", | 
 |  |  |                                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                 contentType: 'application/json;charset=UTF-8', | 
 |  |  |                                 data: JSON.stringify(checkStatus), | 
 |  |  |                                 method: 'POST', | 
 |  |  |                                 success: function (res) { | 
 |  |  |                                     layer.close(loadIndex); | 
 |  |  |                                     if (res.code === 200){ | 
 |  |  |                                         layer.close(index) | 
 |  |  |                                         pakoutPreviewMergeDialog(res.data) | 
 |  |  |                                     } else if (res.code === 403){ | 
 |  |  |                                         top.location.href = baseUrl+"/"; | 
 |  |  |                                     } else { | 
 |  |  |                                         layer.msg(res.msg, {icon: 2}) | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             }) | 
 |  |  |                         } | 
 |  |  |                         , btn2: function (index, layero) { | 
 |  |  |                             //按钮【取消】的回调 | 
 |  |  |                             layer.close(index) | 
 |  |  |                             //return false 开启该代码可禁止点击该按钮关闭 | 
 |  |  |                         } | 
 |  |  |                     }) | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 } else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}) | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function pakoutPreviewMergeDialog(data) { | 
 |  |  |         for(var i=0; i<data.length; i++){ | 
 |  |  |             if(!data[i].staNos){ | 
 |  |  |                 data[i].staNos = data[i].agvStaNos; | 
 |  |  |                 data[i].staNo = data[i].agvStaNo; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         var mergeTabCache; | 
 |  |  |         layer.open({ | 
 |  |  |             type: 1 | 
 |  |  |             ,title: false | 
 |  |  |             ,closeBtn: false | 
 |  |  |             ,offset: '50px' | 
 |  |  |             ,area: ['1200px', '700px'] | 
 |  |  |             ,shade: 0.5 | 
 |  |  |             ,shadeClose: false | 
 |  |  |             ,btn: ['立即出库', '稍后处理'] | 
 |  |  |             ,btnAlign: 'c' | 
 |  |  |             ,moveType: 1 //拖拽模式,0或者1 | 
 |  |  |             ,content: $('#pakoutPreviewMergeBox').html() | 
 |  |  |             ,success: function(layero, index){ | 
 |  |  |                 stoPreTabMergeIdx = table.render({ | 
 |  |  |                     elem: '#stoPreTabMerge', | 
 |  |  |                     data: data, | 
 |  |  |                     height: 520, | 
 |  |  |                     page: false, | 
 |  |  |                     limit: Number.MAX_VALUE, | 
 |  |  |                     cellMinWidth: 100, | 
 |  |  |                     cols: [[ | 
 |  |  |                         // {type: 'checkbox', merge: ['orderNo']}, | 
 |  |  |                         {field: 'title', title: '商品', merge: true, align: 'center', width: 350}, | 
 |  |  |                         {field: 'specs', title: '规格', align: 'center'}, | 
 |  |  |                         {field: 'batch', title: '序列码', align: 'center'}, | 
 |  |  |                         {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'}, | 
 |  |  |                         {field: 'locNo', title: '货位', align: 'center', templet: '#locNoTpl'}, | 
 |  |  |                         {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'}, | 
 |  |  |                         // {type: 'checkbox', merge: ['locNo']}, | 
 |  |  |                     ]], | 
 |  |  |                     done: function (res) { | 
 |  |  |                         tableMerge.render(this); | 
 |  |  |                         $('.layui-table-body.layui-table-main').css("overflow", "auto"); | 
 |  |  |                         mergeTabCache = table.cache.stoPreTabMerge; | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 // 修改出库站 | 
 |  |  |                 form.on('select(tbBasicTbStaNos)', function (obj) { | 
 |  |  |                     let index  = obj.othis.parents('tr').attr("data-index"); | 
 |  |  |                     let data = mergeTabCache[index]; | 
 |  |  |                     for (let i = 0; i<mergeTabCache.length; i++) { | 
 |  |  |                         if (mergeTabCache[i].locNo === data.locNo) { | 
 |  |  |                             //mergeTabCache[i]['staNo'] = Number(obj.elem.value); | 
 |  |  |                             mergeTabCache[i]['staNo'] = obj.elem.value; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     obj.othis.children().find("input").css("color", "blue"); | 
 |  |  |                     return false; | 
 |  |  |                 }); | 
 |  |  |                 // 批量修改出库站 | 
 |  |  |                 form.on('submit(batchModifySta)', function () { | 
 |  |  |                     modifySta(); | 
 |  |  |                 }); | 
 |  |  |                 // 批量修改出库站 - 站点选择 | 
 |  |  |                 function modifySta() { | 
 |  |  |                     // 出库站取交集 | 
 |  |  |                     let staBatchSelectVal = []; | 
 |  |  |                     for(let i = 0; i<mergeTabCache.length; i++) { | 
 |  |  |                         let staNos = mergeTabCache[i].staNos; | 
 |  |  |                         if (staNos !== null) { | 
 |  |  |                             if (staBatchSelectVal.length === 0) { | 
 |  |  |                                 staBatchSelectVal = staNos; | 
 |  |  |                             } else { | 
 |  |  |                                 staBatchSelectVal = staBatchSelectVal.filter(val => | 
 |  |  |                                     { | 
 |  |  |                                         return new Set(staNos).has(val) | 
 |  |  |                                     } | 
 |  |  |                                 ) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (staBatchSelectVal.length === 0) { | 
 |  |  |                         layer.msg("出库站没有交集,无法批量修改", {icon: 2}); | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  |                     admin.open({ | 
 |  |  |                         type: 1, | 
 |  |  |                         area: '300px', | 
 |  |  |                         offset: 'auto', | 
 |  |  |                         title: '请选择站点', | 
 |  |  |                         content: $('#staBatchSelectDialog').html(), | 
 |  |  |                         success: function (layero, ddIndex) { | 
 |  |  |                             // 渲染下拉框 | 
 |  |  |                             let template = Handlebars.compile($('#batchStaSelectTpl').html()); | 
 |  |  |                             $('#batchSelectStaBox').html(template({list: staBatchSelectVal})); | 
 |  |  |                             // 确认 | 
 |  |  |                             form.on('submit(staBatchSelectConfirm)', function (obj) { | 
 |  |  |                                 let loadIdx = layer.load(2); | 
 |  |  |                                 //let batchSta = Number(obj.field.batchSta); | 
 |  |  |                                 let batchSta = obj.field.batchSta; | 
 |  |  |                                 let arr = []; | 
 |  |  |                                 for (let i = 0; i<mergeTabCache.length; i++) { | 
 |  |  |                                     mergeTabCache[i]['staNo'] = batchSta; | 
 |  |  |                                     arr.push(i); | 
 |  |  |                                 } | 
 |  |  |                                 console.log(mergeTabCache) | 
 |  |  |                                 stoPreTabMergeIdx.reload({data: mergeTabCache}); | 
 |  |  |                                 arr.forEach(item => { | 
 |  |  |                                     $('div[lay-id=stoPreTabMerge] tr[data-index="' + item + '"] .order-sta-select').val(batchSta); | 
 |  |  |                                 }); | 
 |  |  |                                 layui.form.render('select'); | 
 |  |  |                                 arr.forEach(item => { | 
 |  |  |                                     $('div[lay-id=stoPreTabMerge] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue"); | 
 |  |  |                                 }); | 
 |  |  |                                 layer.close(loadIdx); layer.close(ddIndex); | 
 |  |  |                                 return false; | 
 |  |  |                             }); | 
 |  |  |                             // 弹窗不出现滚动条 | 
 |  |  |                             $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                             layui.form.render('select'); | 
 |  |  |                         }, | 
 |  |  |                     }) | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             ,yes: function(index, layero){ | 
 |  |  |                 //按钮【立即出库】的回调 | 
 |  |  |                 pakout(mergeTabCache, index); | 
 |  |  |             } | 
 |  |  |             ,btn2: function(index, layero){ | 
 |  |  |                 //按钮【稍后处理】的回调 | 
 |  |  |                 layer.close(index) | 
 |  |  |                 //return false 开启该代码可禁止点击该按钮关闭 | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function tableReload(child) { | 
 |  |  |     var searchData = {}; | 
 |  |  |     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |         searchData[this.name] = this.value; | 
 |  |  |     }); | 
 |  |  |     (child ? parent.tableIns : tableIns).reload({ | 
 |  |  |         where: searchData, | 
 |  |  |         page: { | 
 |  |  |             curr: pageCurr | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 一键出库 | 
 |  |  |  */ | 
 |  |  | function autoOut(orderId) { | 
 |  |  |     let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false}); | 
 |  |  |     $.ajax({ | 
 |  |  |         url: baseUrl + "/out/pakout/orderDetlIds/auth", | 
 |  |  |         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |         data: { orderId : orderId }, | 
 |  |  |         method: 'POST', | 
 |  |  |         success: function (res) { | 
 |  |  |             layer.close(loadIndex); | 
 |  |  |             if (res.code === 200){ | 
 |  |  |                 pakoutPreview(res.data); | 
 |  |  |             } else if (res.code === 403){ | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } else { | 
 |  |  |                 layer.msg(res.msg, {icon: 2}); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }) | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         <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"> | 
 |  |  |                         <label class="layui-form-label">编号:</label> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="order_no" class="layui-input" type="text" placeholder="输入主订单号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="three_code" class="layui-input" type="text" placeholder="输入销售单号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="matnr" class="layui-input" type="text" placeholder="输入物料编号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="maktx" class="layui-input" type="text" placeholder="输入物料名称"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline">  | 
 |  |  | 
 |  |  |  | 
 |  |  | <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> | 
 |  |  | <!--        <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/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/orderDetl/orderDetl.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/orderDetl/orderDetl.js?v=1" charset="utf-8"></script> | 
 |  |  | </body> | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="editDialog"> | 
 |  |  | 
 |  |  |         <input name="id" type="hidden"> | 
 |  |  |         <div class="layui-row"> | 
 |  |  |             <div class="layui-col-md12"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">订单内码: </label> | 
 |  |  |                     <div class="layui-input-block cool-auto-complete"> | 
 |  |  |                         <input class="layui-input" name="orderId" placeholder="请输入订单内码" style="display: none"> | 
 |  |  |                         <input id="orderId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入订单内码" onfocus=this.blur()> | 
 |  |  |                         <div class="cool-auto-complete-window"> | 
 |  |  |                             <input class="cool-auto-complete-window-input" data-key="orderQueryByorderId" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                             <select class="cool-auto-complete-window-select" data-key="orderQueryByorderIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">订单内码: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block cool-auto-complete">--> | 
 |  |  | <!--                        <input class="layui-input" name="orderId" placeholder="请输入订单内码" style="display: none">--> | 
 |  |  | <!--                        <input id="orderId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入订单内码" onfocus=this.blur()>--> | 
 |  |  | <!--                        <div class="cool-auto-complete-window">--> | 
 |  |  | <!--                            <input class="cool-auto-complete-window-input" data-key="orderQueryByorderId" onkeyup="autoLoad(this.getAttribute('data-key'))">--> | 
 |  |  | <!--                            <select class="cool-auto-complete-window-select" data-key="orderQueryByorderIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">--> | 
 |  |  | <!--                            </select>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">数量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  | 
 |  |  |                         <input class="layui-input" name="maktx" placeholder="请输入商品名称"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">名称: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="name" placeholder="请输入名称"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">规格: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="specs" placeholder="请输入规格"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">名称: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="name" placeholder="请输入名称">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">规格: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="specs" placeholder="请输入规格">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">批次: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="model" placeholder="请输入型号">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">批次: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="model" placeholder="请输入型号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">序列码: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="batch" placeholder="请输入序列码"> | 
 |  |  |                     </div> | 
 |  |  | 
 |  |  |                         <input class="layui-input" name="unit" placeholder="请输入单位"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">商品条码: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="barcode" placeholder="请输入商品条码"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">供应商: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="supplier" placeholder="请输入供应商"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">单价: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="unitPrice" placeholder="请输入单价"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">品项数: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="itemNum" placeholder="请输入品项数"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">数量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="count" placeholder="请输入数量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">重量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="weight" placeholder="请输入重量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">状态: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <select name="status"> | 
 |  |  |                             <option value="">请选择状态</option> | 
 |  |  |                             <option value="1">正常</option> | 
 |  |  |                             <option value="0">禁用</option> | 
 |  |  |                         </select> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">添加人员: </label> | 
 |  |  |                     <div class="layui-input-block cool-auto-complete"> | 
 |  |  |                         <input class="layui-input" name="createBy" placeholder="请输入添加人员" style="display: none"> | 
 |  |  |                         <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入添加人员" onfocus=this.blur()> | 
 |  |  |                         <div class="cool-auto-complete-window"> | 
 |  |  |                             <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                             <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">商品条码: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="barcode" placeholder="请输入商品条码">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">供应商: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="supplier" placeholder="请输入供应商">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">单价: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="unitPrice" placeholder="请输入单价">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">品项数: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="itemNum" placeholder="请输入品项数">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">数量: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="count" placeholder="请输入数量">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">重量: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="weight" placeholder="请输入重量">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">状态: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <select name="status">--> | 
 |  |  | <!--                            <option value="">请选择状态</option>--> | 
 |  |  | <!--                            <option value="1">正常</option>--> | 
 |  |  | <!--                            <option value="0">禁用</option>--> | 
 |  |  | <!--                        </select>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">添加人员: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block cool-auto-complete">--> | 
 |  |  | <!--                        <input class="layui-input" name="createBy" placeholder="请输入添加人员" style="display: none">--> | 
 |  |  | <!--                        <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入添加人员" onfocus=this.blur()>--> | 
 |  |  | <!--                        <div class="cool-auto-complete-window">--> | 
 |  |  | <!--                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">--> | 
 |  |  | <!--                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">--> | 
 |  |  | <!--                            </select>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">添加时间: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="createTime" id="createTime$" placeholder="请输入添加时间"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">修改人员: </label> | 
 |  |  |                     <div class="layui-input-block cool-auto-complete"> | 
 |  |  |                         <input class="layui-input" name="updateBy" placeholder="请输入修改人员" style="display: none"> | 
 |  |  |                         <input id="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入修改人员" onfocus=this.blur()> | 
 |  |  |                         <div class="cool-auto-complete-window"> | 
 |  |  |                             <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                             <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">修改时间: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="updateTime" id="updateTime$" placeholder="请输入修改时间"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备注: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="memo" placeholder="请输入备注"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">修改人员: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block cool-auto-complete">--> | 
 |  |  | <!--                        <input class="layui-input" name="updateBy" placeholder="请输入修改人员" style="display: none">--> | 
 |  |  | <!--                        <input id="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入修改人员" onfocus=this.blur()>--> | 
 |  |  | <!--                        <div class="cool-auto-complete-window">--> | 
 |  |  | <!--                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">--> | 
 |  |  | <!--                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">--> | 
 |  |  | <!--                            </select>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">修改时间: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="请输入修改时间">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="layui-form-item">--> | 
 |  |  | <!--                    <label class="layui-form-label">备注: </label>--> | 
 |  |  | <!--                    <div class="layui-input-block">--> | 
 |  |  | <!--                        <input class="layui-input" name="memo" placeholder="请输入备注">--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  |  | 
 |  |  |              </div> | 
 |  |  |         </div> | 
 
| 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"> | 
 |  |  |     <!--    <link rel="stylesheet" href="../../static/css/common.css" media="all">--> | 
 |  |  |     <!--[if lt IE 9]> | 
 |  |  |     <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> | 
 |  |  |     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | 
 |  |  |     <![endif]--> | 
 |  |  |     <style> | 
 |  |  |         .wrk-trace { | 
 |  |  |             color: green; | 
 |  |  |             cursor: pointer; | 
 |  |  |             margin-left: 6px; | 
 |  |  |             font-size: 18px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-timeline:first-child .layui-timeline-item { | 
 |  |  |             margin-top: 30px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .btn-add { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         .btn-edit { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         .btn-complete { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         .btn-delete { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         .btn-report { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         td .layui-form-select { | 
 |  |  |             margin-top: -9px; | 
 |  |  |             margin-left: -14px; | 
 |  |  |             margin-right: -14px; | 
 |  |  |         } | 
 |  |  |     </style> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |  | 
 |  |  | <!-- 正文开始 --> | 
 |  |  | <div class="layui-fluid"> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body"> | 
 |  |  |             <!-- 表格顶部工具栏 --> | 
 |  |  |             <div class="layui-form toolbar"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="orderNo" class="layui-input" type="text" placeholder="输入主订单号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="threeCode" class="layui-input" type="text" placeholder="输入销售单号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="matnr" class="layui-input" type="text" placeholder="输入物料编号"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline mr0"> | 
 |  |  |                             <input name="maktx" class="layui-input" type="text" placeholder="输入物料名称"/> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  | <!--                    <div class="layui-inline" style="width: 300px">--> | 
 |  |  | <!--                        <div class="layui-input-inline">--> | 
 |  |  | <!--                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <select name="doc_type" id="docType-query"> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <select name="settle"> | 
 |  |  |                                 <option value="">选择状态</option> | 
 |  |  |                                 <option value="1">待处理</option> | 
 |  |  |                                 <option value="2">作业中</option> | 
 |  |  |                                 <option value="4">已完成</option> | 
 |  |  |                                 <option value="6">上报完成</option> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit> | 
 |  |  |                             <i class="layui-icon"></i>搜索 | 
 |  |  |                         </button> | 
 |  |  |                         <button id="orderAddBtn" class="layui-btn icon-btn btn-add"> | 
 |  |  |                             <i class="layui-icon"></i>添加 | 
 |  |  |                         </button> | 
 |  |  |                         <button id="importOrder" class="layui-btn icon-btn btn-add"> | 
 |  |  |                             <i class="layui-icon layui-icon-upload"></i> 导入单据 | 
 |  |  |                         </button> | 
 |  |  |                         <button id="orderCheckBtn" class="layui-btn icon-btn btn-add"> | 
 |  |  |                             <i class="layui-icon"></i>添加 | 
 |  |  |                         </button> | 
 |  |  |                         <input style="display:none" id="importExcel" type="file" onchange="upload(this)" > | 
 |  |  |                         <input style="display:none" id="importExcel2" type="file" onchange="upload2(this)" > | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <table id="order" lay-filter="order"></table> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body"> | 
 |  |  |             入库通知单:由ERP提供单据编号、类型、单据时间及物料明细,生成入库作业单,为维护系统高可用,用户可自行添加入库通知单数据,完成独立的入库作业。 | 
 |  |  |             <span class="text-danger">手动添加时,请检查单据编号是否在ERP系统中已存在,避免发生数据错误问题。</span> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | <!-- 表格操作列 --> | 
 |  |  | <script type="text/html" id="operate"> | 
 |  |  |     {{# if (d.settle == 1 || d.settle == 2) { }} | 
 |  |  |         <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a> | 
 |  |  |         {{# if (d.settle == 2) { }} | 
 |  |  |             <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">完结</a> | 
 |  |  |         {{# } }} | 
 |  |  |     {{# } }} | 
 |  |  |     <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a> | 
 |  |  |     <a class="layui-btn layui-btn-primary layui-btn-xs btn-report" lay-event="report">上报</a> | 
 |  |  | </script> | 
 |  |  | <!-- 表格操作列 --> | 
 |  |  | <script type="text/html" id="tbLook"> | 
 |  |  |     <span class="layui-text"> | 
 |  |  |         <a href="javascript:;" lay-event="look"> | 
 |  |  |             <i class="layui-icon" style="font-size: 12px;"></i> 查看单据明细 | 
 |  |  |         </a> | 
 |  |  |     </span> | 
 |  |  | </script> | 
 |  |  | <script type="text/html" id="orderNoTpl"> | 
 |  |  |     {{d.orderNo}} | 
 |  |  |     {{# if(d.settle > 1 && d.settle !== 3){ }} | 
 |  |  |  | 
 |  |  |     {{# } }} | 
 |  |  |     <i class="layui-icon layui-icon-about wrk-trace" lay-tips="查看任务追溯" lay-direction="2" lay-offset="-10px,0px" lay-event="wrkTrace"></i> | 
 |  |  | </script> | 
 |  |  | <script type="text/html" id="settleTpl"> | 
 |  |  |     <span name="settle" | 
 |  |  |           {{# if( d.settle === 1){ }} | 
 |  |  |           class="layui-badge layui-badge-red" | 
 |  |  |           {{# }else if(d.settle === 2){ }} | 
 |  |  |           class="layui-badge layui-badge-green" | 
 |  |  |           {{# }else if(d.settle === 3){ }} | 
 |  |  |           class="layui-badge layui-badge-gray" | 
 |  |  |           {{# }else if(d.settle === 4){ }} | 
 |  |  |           class="layui-badge layui-badge-blue" | 
 |  |  |           {{# }else if(d.settle === 5){ }} | 
 |  |  |           class="layui-badge layui-badge-gray" | 
 |  |  |           {{# }else if(d.settle === 6){ }} | 
 |  |  |           class="layui-badge layui-badge-gray" | 
 |  |  |           {{# } }} | 
 |  |  |     >{{d.settle$}}</span> | 
 |  |  | </script> | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="editDialog"> | 
 |  |  |     <form id="editForm" lay-filter="editForm" class="layui-form model-form"> | 
 |  |  |         <input name="id" type="hidden"/> | 
 |  |  |         <div class="layui-form-item"> | 
 |  |  |             <label class="layui-form-label">单据类型:</label> | 
 |  |  |             <div class="layui-input-block cool-auto-complete"> | 
 |  |  |                 <input class="layui-input" name="docType" placeholder="请输入单据类型" style="display: none"> | 
 |  |  |                 <input id="docType$" name="docType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入单据类型" onfocus=this.blur() lay-verType="tips" lay-verify="required"> | 
 |  |  |                 <div class="cool-auto-complete-window"> | 
 |  |  |                     <input class="cool-auto-complete-window-input" data-key="docTypeQueryBydocType" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                     <select class="cool-auto-complete-window-select" data-key="docTypeQueryBydocTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                     </select> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item"> | 
 |  |  |             <label class="layui-form-label">单据编号:</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <input id="orderNo" name="orderNo" placeholder="输入单据编号" type="text" class="layui-input" maxlength="20" lay-verType="tips" lay-verify="required"/> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item" style="position: relative;"> | 
 |  |  |             <label class="layui-form-label">单据明细:</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <table id="formSSXMTable" lay-filter="formSSXMTable"></table> | 
 |  |  |             </div> | 
 |  |  |             <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment" | 
 |  |  |                     style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button"> | 
 |  |  |                 <i class="layui-icon"></i>添加明细 | 
 |  |  |             </button> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item text-right"> | 
 |  |  |             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> | 
 |  |  |             <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>保存</button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  | <!-- 表格操作列 --> | 
 |  |  | <script type="text/html" id="formSSXMTableBar"> | 
 |  |  |     <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>--> | 
 |  |  |     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a> | 
 |  |  | </script> | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="matEditDialog"> | 
 |  |  |     <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form"> | 
 |  |  |         <input name="experimentId" type="hidden"/> | 
 |  |  |         <div class="layui-form-item" style="float: left"> | 
 |  |  |             <label class="layui-form-label">物料 - 多选</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <div id="mat" name="mat"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item text-right" style="display: inline-block; margin-left: 35px"> | 
 |  |  |             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> | 
 |  |  |             <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>保存</button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!--工序状态--> | 
 |  |  | <script type="text/html" id="process"> | 
 |  |  |  | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 订单任务追溯 --> | 
 |  |  | <script id="wrkTraceDialog" type="text/html" style="position: relative"> | 
 |  |  |     <div style="position: absolute; top: 0; left: 0;"> | 
 |  |  |         <div class="layui-card" style="overflow: hidden;"> | 
 |  |  |             <div class="layui-card-header" style="text-align: center;width: 80%;font-weight: inherit;font-size: 18px">{{ d.orderNo }}</div> | 
 |  |  |             <div class="layui-card-body"> | 
 |  |  |                 <div id="wrkTraceCharts" style="height: 300px;width: 400px;transform: translateX(-10%);"></div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div class="layui-row" > | 
 |  |  |         <div class="layui-col-md5"> | 
 |  |  |             <h1 style="opacity: 0;">Hello World</h1> | 
 |  |  |         </div> | 
 |  |  |         <div  class="layui-col-md7" style=""> | 
 |  |  |             {{#  if(d.list.length > 0){ }} | 
 |  |  |             <ul class="layui-timeline" style="height: 400px; overflow: scroll;"> | 
 |  |  |                 {{#  layui.each(d.list, function(index, item){ }} | 
 |  |  |                 <li class="layui-timeline-item"> | 
 |  |  |                     <i class="layui-icon layui-timeline-axis"></i> | 
 |  |  |                     <div class="layui-timeline-content layui-text"> | 
 |  |  |                         <div class="layui-timeline-title"> | 
 |  |  |                             <h3 class="inline-block"> | 
 |  |  |                                 {{ item.wrkNo }}  | 
 |  |  |  | 
 |  |  |                                 {{#  if(item.wrkMast.ioType < 100){ }} | 
 |  |  |                                 <span class="layui-badge layui-bg-blue" style="line-height: 20px;"> | 
 |  |  |                                  {{ item.wrkMast.ioType$ }}  | 
 |  |  |                                 </span> | 
 |  |  |                                 {{#  } }} | 
 |  |  |  | 
 |  |  |                                 {{#  if(item.wrkMast.ioType > 100){ }} | 
 |  |  |                                 <span class="layui-badge layui-bg-orange" style="line-height: 20px;"> | 
 |  |  |                                   {{ item.wrkMast.ioType$ }}  | 
 |  |  |                                 </span> | 
 |  |  |                                 {{#  } }} | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                                 {{#  if(item.wrkMast.wrkSts < 14){ }} | 
 |  |  |                                 <span class="layui-badge layui-bg-red" style="line-height: 20px;"> | 
 |  |  |                                     {{ item.wrkMast.wrkSts$ }}  | 
 |  |  |                                 </span> | 
 |  |  |                                 {{#  } }} | 
 |  |  |  | 
 |  |  |                                 {{#  if(item.wrkMast.wrkSts >= 14){ }} | 
 |  |  |                                 <span class="layui-badge layui-bg-green" style="line-height: 20px;"> | 
 |  |  |                                     {{ item.wrkMast.wrkSts$ }}  | 
 |  |  |                                 </span> | 
 |  |  |                                 {{#  } }} | 
 |  |  |  | 
 |  |  |                             </h3>  | 
 |  |  |                             {{ item.wrkMast.ioTime$ }} | 
 |  |  |                         </div> | 
 |  |  |  | 
 |  |  |                         <table class="layui-table" lay-skin="nob" style="width: 80%"> | 
 |  |  |                             <thead> | 
 |  |  |                             <tr style="background: none"> | 
 |  |  |                                 <td>No.</td> | 
 |  |  |                                 <td>物料号</td> | 
 |  |  |                                 <td>数量</td> | 
 |  |  |                             </tr> | 
 |  |  |                             </thead> | 
 |  |  |                             <tbody> | 
 |  |  |                             {{#  layui.each(item.wrkDetls, function(idx, wrkDetl){ }} | 
 |  |  |                             <tr> | 
 |  |  |                                 <td><span class="layui-badge layui-bg-cyan">{{ idx+1 }}</span></td> | 
 |  |  |                                 <td>{{ wrkDetl.matnr }}</td> | 
 |  |  |                                 <td style="font-weight: bold">{{ wrkDetl.anfme }}</td> | 
 |  |  |                             </tr> | 
 |  |  |                             {{#  }); }} | 
 |  |  |                             </tbody> | 
 |  |  |                         </table> | 
 |  |  |  | 
 |  |  |                         <hr class="layui-border-cyan" style="width: 90%; opacity: .6;"> | 
 |  |  |                     </div> | 
 |  |  |                 </li> | 
 |  |  |                 {{#  }); }} | 
 |  |  |             </ul> | 
 |  |  |             {{#  } else { }} | 
 |  |  |             <div style="height: 350px;display: flex;justify-content: center;align-items: center;"> | 
 |  |  |                 <h2 style="font-weight: bold;letter-spacing: 2px">暂无任务</h2> | 
 |  |  |             </div> | 
 |  |  |             {{#  } }} | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/echarts/echarts.min.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/orderView/orderView.js?v=8" charset="utf-8"></script> | 
 |  |  |  | 
 |  |  | <script type="text/template" id="docTypeTpl"> | 
 |  |  |     <option value="">选择类型</option> | 
 |  |  |     {{#each records}} | 
 |  |  |     <option value="{{docId}}">{{docName}}</option> | 
 |  |  |     {{/each}} | 
 |  |  | </script> | 
 |  |  | </body> | 
 |  |  |  | 
 |  |  | </html> | 
 |  |  |  | 
 
| 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"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/originTable.css" media="all"> | 
 |  |  |     <style> | 
 |  |  |         body { | 
 |  |  |             color: #595959; | 
 |  |  |             background-color: #f5f7f9; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .admin-form { | 
 |  |  |             padding: 25px 30px 0 0 !important; | 
 |  |  |             margin: 0 !important; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-table-view .layui-table-cell .layui-select-title .layui-input { | 
 |  |  |             height: 28px; | 
 |  |  |             line-height: 28px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input { | 
 |  |  |             height: 40px; | 
 |  |  |             line-height: 40px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input { | 
 |  |  |             height: 40px; | 
 |  |  |             line-height: 40px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-table-view [lay-size="sm"] .layui-table-cell .layui-select-title .layui-input { | 
 |  |  |             height: 20px; | 
 |  |  |             line-height: 20px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .layui-table-view [lay-size="sm"] .layui-table-cell .layui-btn-xs { | 
 |  |  |             height: 18px; | 
 |  |  |             line-height: 18px; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /* 权限控制 */ | 
 |  |  |         #btn-pakoutPreview { | 
 |  |  |             display: none; | 
 |  |  |         } | 
 |  |  |         /*#btn-delete {*/ | 
 |  |  |         /*    display: none;*/ | 
 |  |  |         /*}*/ | 
 |  |  |         /*.btn-edit {*/ | 
 |  |  |         /*    display: none;*/ | 
 |  |  |         /*}*/ | 
 |  |  |         /*.btn-more {*/ | 
 |  |  |         /*    display: none;*/ | 
 |  |  |         /*}*/ | 
 |  |  |     </style> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  | <!-- 正文开始 --> | 
 |  |  | <div class="layui-fluid" style="padding-bottom: 0;"> | 
 |  |  |     <div class="layui-row layui-col-space15"> | 
 |  |  |         <!-- 左 --> | 
 |  |  |         <div class="layui-col-md3" id="left-table"> | 
 |  |  |             <div class="layui-card"> | 
 |  |  |                 <div class="layui-card-body" style="padding: 10px;"> | 
 |  |  |                     <form class="layui-form toolbar"> | 
 |  |  |                         <div class="layui-form-item"> | 
 |  |  |                             <div class="layui-inline" style="max-width: 300px;margin-bottom: 5px"> | 
 |  |  |                                 <input name="orderNo" class="layui-input" placeholder="输入单据编号" autocomplete="off"/> | 
 |  |  |                             </div> | 
 |  |  |                             <div class="layui-inline" style="margin-bottom: 5px"> | 
 |  |  |                                 <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit> | 
 |  |  |                                     <i class="layui-icon"></i>搜索 | 
 |  |  |                                 </button> | 
 |  |  |                                 <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit> | 
 |  |  |                                     <i class="layui-icon"></i>重置 | 
 |  |  |                                 </button> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </form> | 
 |  |  |                     <button style="margin-bottom: 5px;line-height: 28px;height: 28px" class="layui-btn icon-btn layui-btn-danger" lay-filter="mergeOut" lay-submit> | 
 |  |  |                         <i class="layui-icon"></i> 合并出库 | 
 |  |  |                     </button> | 
 |  |  |                     <table id="originTable" lay-filter="originTable"></table> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <!-- 右 --> | 
 |  |  |         <div class="layui-col-md9"> | 
 |  |  |             <div class="layui-card"> | 
 |  |  |                 <div class="layui-card-body" style="padding: 10px;"> | 
 |  |  |                     <form class="layui-form toolbar"> | 
 |  |  |                         <div class="layui-form-item"> | 
 |  |  |                             <div class="layui-inline"> | 
 |  |  |                                 <label class="layui-form-label">物料号:</label> | 
 |  |  |                                 <div class="layui-input-inline"> | 
 |  |  |                                     <input name="matnr" class="layui-input" placeholder="物料号"/> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                             <div class="layui-inline"> | 
 |  |  |                                 <label class="layui-form-label">物料名称:</label> | 
 |  |  |                                 <div class="layui-input-inline"> | 
 |  |  |                                     <input name="maktx" class="layui-input" placeholder="物料名称"/> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                             <div class="layui-inline"> | 
 |  |  |                                 <label class="layui-form-label">订单号:</label> | 
 |  |  |                                 <div class="layui-input-inline"> | 
 |  |  |                                     <input name="batch" class="layui-input" placeholder="序列码"/> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                             <!--                            <div class="layui-inline">--> | 
 |  |  |                             <!--                                <label class="layui-form-label">状态:</label>--> | 
 |  |  |                             <!--                                <div class="layui-input-inline">--> | 
 |  |  |                             <!--                                    <select name="isOnline">--> | 
 |  |  |                             <!--                                        <option value="1">充电中</option>--> | 
 |  |  |                             <!--                                        <option value="1">充电中</option>--> | 
 |  |  |                             <!--                                        <option value="0">不在充电</option>--> | 
 |  |  |                             <!--                                    </select>--> | 
 |  |  |                             <!--                                </div>--> | 
 |  |  |                             <!--                            </div>--> | 
 |  |  |                             <div class="layui-inline">  | 
 |  |  |                                 <button class="layui-btn icon-btn" lay-filter="sensorTbSearch" lay-submit> | 
 |  |  |                                     <i class="layui-icon"></i>搜索 | 
 |  |  |                                 </button> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </form> | 
 |  |  |                     <table id="orderDetlTable" lay-filter="orderDetlTable"></table> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  | <!-- 头工具栏 --> | 
 |  |  | <script type="text/html" id="orderDetToolbar"> | 
 |  |  |     <div class="layui-btn-container"> | 
 |  |  |         <button class="layui-btn layui-btn-sm layui-btn-danger btn-pakoutPreview" id="btn-pakoutPreview" lay-event="pakoutPreview">批量出库</button> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 行工具栏 --> | 
 |  |  | <script type="text/html" id="operate"> | 
 |  |  |     {{#if (d.anfme > d.qty){ }} | 
 |  |  |         <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>出库</a> | 
 |  |  |     {{# } }} | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 出库预览 --> | 
 |  |  | <script type="text/html" id="pakoutPreviewBox" style="display: none"> | 
 |  |  |     <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;"> | 
 |  |  |         <span style="font-size: large; font-weight: bold">出库预览</span> | 
 |  |  |     </div> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body" style="padding: 10px"> | 
 |  |  |             <table id="stoPreTab" lay-filter="stoPreTab"></table> | 
 |  |  |         </div> | 
 |  |  |         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem"> | 
 |  |  |             批量修改 | 
 |  |  |         </button> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 合并表单弹窗 --> | 
 |  |  | <script type="text/html" id="mergeDialog"> | 
 |  |  |     <div style="padding: 25px; line-height: 22px; background-color: #1E9FFF; color: #fff; font-weight: 300;"> | 
 |  |  |         <span style="font-size: large; font-weight: bold">合并出库</span> | 
 |  |  |     </div> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body" style="padding: 10px"> | 
 |  |  |             <table id="orderMergeTab" lay-filter="orderMergeTab"></table> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 出库预览 【合并】 --> | 
 |  |  | <script type="text/html" id="pakoutPreviewMergeBox" style="display: none"> | 
 |  |  |     <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;"> | 
 |  |  |         <span style="font-size: large; font-weight: bold">出库预览</span> | 
 |  |  |     </div> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body" style="padding: 10px"> | 
 |  |  |             <table id="stoPreTabMerge" lay-filter="stoPreTabMerge"></table> | 
 |  |  |         </div> | 
 |  |  |         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem"> | 
 |  |  |             批量修改 | 
 |  |  |         </button> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="tbBasicTbStaNos"> | 
 |  |  |     <div class="ew-select-fixed"> | 
 |  |  |         <select class="order-sta-select" lay-filter="tbBasicTbStaNos"> | 
 |  |  |             {{#if (d.staNos!=null) {}} | 
 |  |  |                 {{# for(let i=0; i<d.staNos.length; i++) { }} | 
 |  |  |                     <option value="{{d.staNos[i]}}">{{d.staNos[i]}}</option> | 
 |  |  |                 {{# } }} | 
 |  |  |             {{# } }} | 
 |  |  |         </select> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="staBatchSelectDialog"> | 
 |  |  |     <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center"> | 
 |  |  |         <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required=""> | 
 |  |  |         </select> | 
 |  |  |         <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">确定</button> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="locNoTpl"> | 
 |  |  |     <span name="locNo" | 
 |  |  |           {{# if( d.lack === false){ }} | 
 |  |  |           class="layui-badge layui-badge-green" >{{d.locNo}}</span> | 
 |  |  |     {{# } else { }} | 
 |  |  |     class="layui-badge layui-badge-red" >库存不足</span> | 
 |  |  |     {{# } }} | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 行样式 --> | 
 |  |  | <script type="text/html" id="orderNoTpl"> | 
 |  |  |     <span name="orderNo" class="layui-badge layui-badge-gray">{{d.orderNo}}</span> | 
 |  |  | </script> | 
 |  |  | <script type="text/html" id="statusTpl"> | 
 |  |  |     <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="正常|禁用" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="editDialog"> | 
 |  |  |     <form id="detail" lay-filter="detail" class="layui-form admin-form"> | 
 |  |  |         <input name="id" type="hidden"> | 
 |  |  |         <input name="status" type="hidden"> | 
 |  |  |         <div class="layui-row"> | 
 |  |  |  | 
 |  |  |             <div class="layui-col-md4"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label layui-form-required">设备编号</label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input name="uuid" placeholder="请输入设备编号" class="layui-input" lay-vertype="tips" lay-verify="required" required=""> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="layui-col-md4"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">设备类型:</label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <div id="modelSel" class="ew-xmselect-tree"></div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="layui-col-md4"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label layui-form-required">所属项目: </label> | 
 |  |  |                     <div class="layui-input-block cool-auto-complete"> | 
 |  |  |                         <input name="hostId" class="layui-input" style="display: none"> | 
 |  |  |                         <input id="hostId$" name="hostId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请选择所属项目" onfocus=this.blur()> | 
 |  |  |                         <div class="cool-auto-complete-window"> | 
 |  |  |                             <input class="cool-auto-complete-window-input" data-key="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                             <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                             </select> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="layui-col-md12"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">详细地址</label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input name="addr" placeholder="请输入详细地址" class="layui-input"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <hr class="layui-bg-gray"> | 
 |  |  |             <div class="layui-col-md12" style="text-align: center"> | 
 |  |  |                 <iframe id="mapIframe" src="map.html" scrolling="no" frameborder="0" | 
 |  |  |                         style="display: inline-block; width: 90%;height: 400px;margin: auto"> | 
 |  |  |                 </iframe> | 
 |  |  |             </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> | 
 |  |  |  | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.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/tools/md5.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/orderView/outView.js" charset="utf-8"></script> | 
 |  |  |  | 
 |  |  | <!-- 项目编辑窗口 --> | 
 |  |  | <script type="text/html" id="hostEditDialog"> | 
 |  |  |     <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form"> | 
 |  |  |         <input name="id" type="hidden"/> | 
 |  |  |         <div class="layui-form-item"> | 
 |  |  |             <label class="layui-form-label layui-form-required">项目名称:</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <input name="name" placeholder="请输入类型名称" class="layui-input" | 
 |  |  |                        lay-verType="tips" lay-verify="required" required/> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item text-right"> | 
 |  |  |             <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>保存</button> | 
 |  |  |             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | </body> | 
 |  |  |  | 
 |  |  | <script type="text/template" id="batchStaSelectTpl"> | 
 |  |  |     <option value="">选择出库站</option> | 
 |  |  |     {{#each list}} | 
 |  |  |     <option value="{{this}}">{{this}}</option> | 
 |  |  |     {{/each}} | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | </html> | 
 |  |  |  |