自动化立体仓库 - WMS系统
18516761980
2022-11-25 938d10604366db71cb73fddc2320fb573b7949f2
Merge remote-tracking branch 'aliyun/hylyasrs' into hylyasrs

# Conflicts:
# src/main/resources/application.yml
23个文件已修改
295 ■■■■■ 已修改文件
pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocMast.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/cool.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/login.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/out.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkMast/wrkDetl.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -22,8 +22,16 @@
        <springfox.version>2.7.0</springfox.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -33,6 +33,8 @@
    private WrkDetlService wrkDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private LocDetlService locDetlService;
    @RequestMapping(value = "/order/nav/list/auth")
    @ManagerAuth
@@ -334,4 +336,97 @@
        return R.ok();
    }
    @RequestMapping(value = "/order/form/add/authtest")
    @ManagerAuth(memo = "手动添加订单")
    @Transactional
    public R formAddTest(@RequestBody OrderDomainParam param){
        if(Cools.isEmpty(param.getOrderNo())){
            String prefix = "";
            DocType docType = docTypeService.selectById(param.getDocType());
            if(!Cools.isEmpty(docType)){
                prefix = docType.getPakin() == 1 ? "RK" : "CK";
            }
            param.setOrderNo(prefix + snowflakeIdWorker.nextId());
        }
        Order order = orderService.selectByNo(param.getOrderNo());
        if (order != null) {
            return R.error("单据编号已存在");
        }
        Date now = new Date();
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                param.getDocType(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                getUserId(),    // 添加人员
                now,    // 添加时间
                getUserId(),    // 修改人员
                now,    // 修改时间
                null    // 备注
        );
        if (!orderService.insert(order)) {
            throw new CoolException("保存订单主档失败");
        }
        List<DetlDto> list = new ArrayList<>();
        for (OrderDetl orderDetl : param.getOrderDetlList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch());
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
                }
            } else {
                list.add(dto);
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setCreateBy(getUserId());
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(getUserId());
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                //给添加子订单
                Set<String> exist = new HashSet<>();
                List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("保存订单明细档失败");
                }
            }
        }
        return R.ok("订单添加成功");
    }
}
src/main/java/com/zy/asrs/controller/OutController.java
@@ -64,7 +64,10 @@
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            System.out.println(locDetls);
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -111,6 +114,11 @@
        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
        for (LocDto locDto : locDtos) {
            if (locDto.isLack()) { continue; }
            //添加部分:增加工作数量
           // orderDetlService.increaseWorkQtytest(locDto.getOrderNo(),locDto.getMatnr(),locDto.getBatch(),locDto.getAnfme());
            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
            if (TaskDto.has(taskDtos, taskDto)) {
                TaskDto dto = TaskDto.find(taskDtos, taskDto);
@@ -128,4 +136,77 @@
        return R.ok();
    }
    @PostMapping("/out/pakout/preview/authtest")
    @ManagerAuth
    public R pakoutPreviewtest(@RequestBody List<Long> ids) {
        if (Cools.isEmpty(ids)) {
            return R.parse(BaseRes.PARAM);
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        boolean boo=false;
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            if(!Cools.isEmpty(locDetls)){
                boo=true;
            //判断出库数量是否大于要出的物品
                LocDto locDtoo = new LocDto(locDetls.get(0).getLocNo(), locDetls.get(0).getMatnr(), locDetls.get(0).getMaktx(), locDetls.get(0).getBatch(), orderDetl.getOrderNo(),
                        issued >= locDetls.get(0).getAnfme() ? locDetls.get(0).getAnfme() : issued);
                List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetls.get(0).getLocNo(), issued >= locDetls.get(0).getAnfme() ? 101 : 103);
                locDtoo.setStaNos(staNos);
                if(issued<locDetls.get(0).getAnfme()){
                    locDtos.add(locDtoo);
                    exist.add(locDetls.get(0).getLocNo());
                    break;
                }else if(issued==locDetls.get(0).getAnfme()){
                    locDtos.add(locDtoo);
                    exist.add(locDetls.get(0).getLocNo());
                    break;
                }else {
                    locDtos.add(locDtoo);
                    exist.add(locDetls.get(0).getLocNo());
                    issued=issued-locDetls.get(0).getAnfme();
                }
                }
                List<LocDetl> locDetlList =new ArrayList<>();
                if(boo){
                     locDetlList=locDetlService.queryStockOther(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist,locDetls.get(0).getLocNo());
                }else{
                     locDetlList=locDetlService.queryStockOther(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist,null);
                }
            for (LocDetl locDetl : locDetlList) {
                if (issued > 0) {
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                    List<Integer> staNoss = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
                    locDto.setStaNos(staNoss);
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
                    // 剩余待出数量递减
                    issued = issued - locDetl.getAnfme();
                } else {
                    break;
                }
            }
            if (issued > 0) {
                LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                locDto.setLack(Boolean.TRUE);
                locDtos.add(locDto);
            }
        }
        return R.ok().add(locDtos);
    }
}
src/main/java/com/zy/asrs/entity/LocMast.java
@@ -26,8 +26,8 @@
    /**
     * 库位号
     */
    @ApiModelProperty(value= "库位号")
    @TableId(value = "loc_no", type = IdType.INPUT)
    @ApiModelProperty(value= "库位号") //参数类型为String,作用为此属性的简要描述。
    @TableId(value = "loc_no", type = IdType.INPUT) // @TableId 注解的用法,该注解用于将某个成员变量指定为数据表主键
    @TableField("loc_no")
    private String locNo;
@@ -165,7 +165,7 @@
    @ApiModelProperty(value= "")
    private String mk;
    @ApiModelProperty(value= "")
    @ApiModelProperty(value= "条码号")
    private String barcode;
    @ApiModelProperty(value= "")
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -56,6 +56,9 @@
    List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
    List<LocDetl> queryStockOther(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos,@Param("locNo")String locNo);
    Double queryStockAnfme(String matnr, String batch);
    List<StockVo> queryStockTotal();
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -34,4 +34,7 @@
    int increaseQtyByOrderNo(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double qty);
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty);
    int increaseWorkQtytest(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("anfme")Double anfme);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.result.StockVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -45,6 +46,9 @@
    List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
    List<LocDetl> queryStockOther(String matnr, String batch, String orderNo, Set<String> locNos,String locNo);
    Double queryStockAnfme(String matnr, String batch);
    List<StockVo> queryStockTotal();
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -37,4 +37,6 @@
     * @return
     */
    boolean increaseWorkQty(Long orderId, String matnr, String batch, Double workQty);
    boolean increaseWorkQtytest(String orderNo, String matnr, String batch, Double anfme);
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -82,6 +82,11 @@
    }
    @Override
    public List<LocDetl> queryStockOther(String matnr, String batch, String orderNo, Set<String> locNos,String locNo) {
        return this.baseMapper.queryStockOther(matnr, batch, orderNo, locNos,locNo);
    }
    @Override
    public Double queryStockAnfme(String matnr, String batch) {
        return this.baseMapper.queryStockAnfme(matnr, batch);
    }
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -90,4 +90,17 @@
    public boolean increaseWorkQty(Long orderId, String matnr, String batch, Double workQty) {
        return this.baseMapper.increaseWorkQty(orderId, matnr, batch, workQty) > 0;
    }
    /**
     * 入出库任务生成时,更新单据表中作业数量
     * @param orderNo
     * @param matnr
     * @param batch
     * @param anfme
     * @return
     */
    @Override
    public boolean increaseWorkQtytest(String orderNo, String matnr, String batch, Double anfme) {
        return this.baseMapper.increaseWorkQtytest(orderNo, matnr, batch, anfme) > 0;
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -802,6 +802,7 @@
        if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
            for (WrkDetl wrkDetl : wrkDetls) {
                //字符串不为空
                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                        throw new CoolException("订单数据回滚失败");
@@ -811,7 +812,7 @@
                    boolean flag = true;
                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
                    for(OrderDetl orderDetl : orderDetls){
                        if(orderDetl.getWorkQty() > 0){
                        if(orderDetl.getQty() > 0){
                            flag = false;
                        }
                    }
src/main/java/com/zy/common/model/LocDto.java
@@ -25,10 +25,12 @@
    private boolean lack = false;
    //目标站点
    private List<Integer> staNos;
    private Integer staNo;
    public LocDto() {
    }
src/main/resources/application.yml
@@ -10,7 +10,7 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=gzynasrs
    url: jdbc:sqlserver://localhost:1433;databasename=hylyasrs
    username: sa
    password: sa@123
  mvc:
src/main/resources/mapper/LocDetlMapper.xml
@@ -282,6 +282,18 @@
        desc
    </select>
    <select id="queryStockOther" resultMap="BaseResultMap">
            select a.*
    from asr_loc_detl a
    left join asr_loc_mast b on a.loc_no = b.loc_no
    where 1=1
    and b.loc_sts = 'F'
    and a.matnr=  #{matnr}
    <if test="locNo !=null and locNo !=''">
    and a.loc_no !=  #{locNo}
    </if>
    </select>
    <select id="queryStockAnfme" resultType="java.lang.Double">
        select sum(anfme) as count from man_loc_detl
         where 1=1
src/main/resources/mapper/OrderDetlMapper.xml
@@ -127,7 +127,7 @@
    <update id="increase">
        update man_order_detl
        set qty = qty + #{qty}
        set work_qty = work_qty + #{qty}
        where 1=1
        and order_id = #{orderId}
        and matnr = #{matnr}
@@ -147,14 +147,7 @@
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr}
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </update>
    <update id="modifyStatus">
@@ -200,4 +193,12 @@
        </choose>
    </update>
    <update id="increaseWorkQtytest">
        update man_order_detl
        set work_qty = work_qty + #{anfme}
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr};
    </update>
</mapper>
src/main/webapp/static/js/cool.js
@@ -15,7 +15,9 @@
 */
function autoShow(id) {
    var cac = document.getElementById(id).parentNode;
    console.log(cac);
    var cacw = cac.getElementsByClassName("cool-auto-complete-window")[0];
    console.log(cacw);
    if (cacw.style.display === "none" || cacw.style.display === ""){
        cacw.style.display = "block";
        var cacwi = cacw.getElementsByClassName("cool-auto-complete-window-input")[0];
src/main/webapp/static/js/order/order.js
@@ -31,6 +31,10 @@
            }
        }
    })
    // 渲染表格
    var insTb = table.render({
@@ -195,7 +199,7 @@
                    }
                    layer.load(2);
                    $.ajax({
                        url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/auth",
                        url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/authtest",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify({
                            orderId: Number(data.field.id),
@@ -389,6 +393,7 @@
                                    });
                                }
                            })
                            // 弹窗不出现滚动条
                            $(layero).children('.layui-layer-content').css('overflow', 'visible');
                            layui.form.render('select');
src/main/webapp/static/js/order/out.js
@@ -125,8 +125,9 @@
    function pakoutPreview(ids) {
        let loadIndex = layer.load(2);
        console.log("1111")
        $.ajax({
            url: baseUrl + "/out/pakout/preview/auth",
            url: baseUrl + "/out/pakout/preview/authtest",
            headers: {'token': localStorage.getItem('token')},
            contentType: 'application/json;charset=UTF-8',
            data: JSON.stringify(ids),
@@ -163,6 +164,7 @@
                                    {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'},
                                    {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
                                    //{field: 'staState', title: '状态', align: 'center'},
                                    {type: 'checkbox', merge: ['locNo']},
                                ]],
                                done: function (res) {
src/main/webapp/static/js/stoMan/stoQue.js
@@ -4,21 +4,21 @@
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var layDate = layui.laydate;    //时间控件
    var form = layui.form;
    layDate.render({
        elem: '.layui-laydate-range'
        ,type: 'datetime'
        ,range: true
        ,type: 'datetime'   //日期时间选择器 可选年、月、日、时、分、秒
        ,range: true        //设置为true,默认采用“-”分割
    });
    // 数据渲染
    tableIns = table.render({
        elem: '#stoQue',
        elem: '#stoQue',    //table id=“stoQue”
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/locMast/list/auth',
        page: true,
        page: true,     //开启分页
        limit: 20,
        limits: [20, 30, 50, 100, 200, 500],
        even: true,
@@ -110,8 +110,8 @@
            case 'refreshSto': // todo:luxiaotao
                alert("还没做");
                break;
            case 'exportData':
                layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){
            case 'exportData':    //导出Excel
                layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){
                    var titles=[];
                    var fields=[];
                    obj.config.cols[0].map(function (col) {
@@ -129,7 +129,7 @@
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/wrkLastno/export/auth",
                        url: baseUrl+"/locMast/export/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify(param),
                        dataType:'json',
src/main/webapp/views/login.html
@@ -74,6 +74,7 @@
            <input id="username" class="input100" type="text" name="username" placeholder="username" autocomplete="off">
            <span class="focus-input100"></span>
            <span class="symbol-input100">
              <i class="fa fa-user"></i>
            </span>
          </div>
src/main/webapp/views/order/order.html
@@ -54,6 +54,8 @@
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <select name="settle">
@@ -176,7 +178,7 @@
                <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>
src/main/webapp/views/order/out.html
@@ -152,7 +152,7 @@
<!-- 行工具栏 -->
<script type="text/html" id="operate">
    {{#if (d.anfme > d.qty){ }}
    {{#if (d.anfme > d.workQty){ }}
    <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>
src/main/webapp/views/wrkMast/wrkDetl.html
@@ -32,6 +32,7 @@
        var cols = [
            {field: 'wrkNo', align: 'center',title: '工作号'}
            ,{field: 'ioTime$', align: 'center',title: '工作时间'}
            ,{field: 'orderNo', align: 'center',title: '单据编号'}
        ];
        cols.push.apply(cols, detlCols);
        return cols;