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