From bd261458eee547abe546aa02b66a35ab511f59a1 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 31 十月 2023 10:55:58 +0800
Subject: [PATCH] #

---
 src/main/webapp/static/js/saasPakStore/stockOut.js                |  177 +++++
 src/main/webapp/static/js/saasPakStore/emptyIn.js                 |   62 +
 src/main/webapp/views/saasPakStore/matQuery.html                  |  173 ++++
 src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java  |    3 
 src/main/webapp/views/saasRule/locRule.html                       |  197 +++++
 src/main/webapp/static/js/saasPakStore/locCheckOut.js             |  163 ++++
 src/main/webapp/static/js/saasPakStore/pakStore.js                |  202 +++++
 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java  |    1 
 src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java |   26 
 src/main/webapp/static/js/saasPakStore/stockAdjust.js             |  247 +++++++
 src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java            |    2 
 src/main/resources/mapper/ManLocDetlMapper.xml                    |    2 
 src/main/webapp/static/js/saasPakStore/locMove.js                 |  137 +++
 src/main/webapp/static/js/saasPakStore/emptyOut.js                |  204 +++++
 src/main/webapp/static/js/saasLocRule/locRule.js                  |  276 +++++++
 src/main/webapp/views/saasPakStore/stockAdjust.html               |    2 
 src/main/resources/application.yml                                |    1 
 src/main/webapp/views/locRule/locCodeRule.html                    |  203 +++++
 18 files changed, 2,073 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
index f0ad47e..580d2e6 100644
--- a/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
@@ -30,7 +30,7 @@
 
     Integer getStockOutPageCount(Map<String, Object> map);
 
-    @Update("update asr_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo}")
+    @Update("update man_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo}")
     int updateLocNo(String newLocNo, String oldLocNo);
 
     @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.matnr = #{matnr} AND (lm.row1 >= #{start} AND lm.row1 <= #{end})  AND lm.loc_sts = 'F' AND DateDiff(dd, lm.appe_time, getdate()) = 0) ORDER BY lm.appe_time ASC")
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
index 940d621..35730ae 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -165,7 +165,6 @@
             if(agvWrkMast.getSourceLocNo().contains("C")){
                 agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
             }
-            agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
             agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo());
             agvTaskkDescribeParam.setContainerCode(agvWrkMast.getBarcode());
             return agvTaskParam;
diff --git a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
index 99ab58f..2d675d6 100644
--- a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
@@ -19,6 +19,7 @@
 import com.zy.asrs.utils.SaasUtils;
 import com.zy.common.model.LocDto;
 import com.zy.system.entity.User;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -155,6 +156,12 @@
         Date now = new Date();
         for (LocDetlAdjustParam.LocDetlAdjust locDetlAdjust : param.getList()) {
             ManLocDetl manLocDetl = this.baseMapper.selectItem(param.getLocNo(), locDetlAdjust.getMatnr(), locDetlAdjust.getBatch());
+
+            if(Cools.isEmpty(manLocDetl)){
+                addManlocDetl(locDetlAdjust,param.getLocNo());
+                continue;
+            }
+
             this.baseMapper.delete(new EntityWrapper<ManLocDetl>()
                     .eq("loc_no", param.getLocNo()).eq("matnr",locDetlAdjust.getMatnr()));
             Mat mat = matService.selectOne(new EntityWrapper<Mat>()
@@ -236,4 +243,23 @@
         }
     }
 
+    private void addManlocDetl(LocDetlAdjustParam.LocDetlAdjust param, String locNo){
+        Date now = new Date();
+        ManLocDetl manLocDetl = new ManLocDetl();
+        Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", locNo));
+        Mat mat = matService.selectByMatnr(param.getMatnr());
+        BeanUtils.copyProperties(mat,manLocDetl);
+        manLocDetl.setNodeId(node.getId());
+        manLocDetl.setBatch(param.getBatch());
+        manLocDetl.setAnfme(param.getCount());
+        manLocDetl.setContainerCode(param.getSuppCode());
+        manLocDetl.setCsocode(param.getThreeCode());
+        manLocDetl.setIsoseq(param.getDeadTime());
+        manLocDetl.setCreateTime(now);
+        manLocDetl.setModiTime(now);
+        manLocDetl.setLocNo(locNo);
+        manLocDetl.setStatus(1);
+        this.insert(manLocDetl);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java
index 323374f..dfe98c9 100644
--- a/src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java
@@ -25,7 +25,8 @@
 
     @Override
     public List<ManPakOut> selectByLocType(String locType) {
-        return this.selectList(new EntityWrapper<ManPakOut>().like("loc_no",locType).eq("status",1));
+        return this.selectList(new EntityWrapper<ManPakOut>().like("loc_no",locType+"-")
+                .andNew().eq("status",0).or().eq("status",8));
     }
 
     @Override
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 029db91..92e90ad 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -85,3 +85,4 @@
 u8:
   url: http://192.168.1.55:8010
   orderReportPath: /api/RdAudit
+
diff --git a/src/main/resources/mapper/ManLocDetlMapper.xml b/src/main/resources/mapper/ManLocDetlMapper.xml
index 76e1bff..046561c 100644
--- a/src/main/resources/mapper/ManLocDetlMapper.xml
+++ b/src/main/resources/mapper/ManLocDetlMapper.xml
@@ -45,7 +45,7 @@
             and mld.loc_no like concat('%',#{loc_no},'%')
         </if>
         <if test="locNo != null and locNo != ''">
-            and mld.loc_no like concat('%',#{loc_no},'%')
+            and mld.loc_no like concat('%',#{locNo},'%')
         </if>
         <if test="matnr != null and matnr != ''">
             and mld.matnr like concat('%',#{matnr},'%')
diff --git a/src/main/webapp/static/js/saasLocRule/locRule.js b/src/main/webapp/static/js/saasLocRule/locRule.js
new file mode 100644
index 0000000..1089ff5
--- /dev/null
+++ b/src/main/webapp/static/js/saasLocRule/locRule.js
@@ -0,0 +1,276 @@
+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: '#locRule',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/locRule/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'}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿'}
+            ,{field: 'specs', align: 'center',title: '瑙勬牸', hide: true}
+            ,{field: 'model', align: 'center',title: '閫氱敤鍨嬪彿', hide: true}
+            ,{field: 'cstmr', align: 'center',title: '瀹㈡埛', hide: true}
+            ,{field: 'batch', align: 'center',title: '鎵瑰彿'}
+            ,{field: 'other', align: 'center',title: '鍏朵粬', hide: true}
+            ,{field: 'rowBeg', align: 'center',title: '寮�濮嬫帓'}
+            ,{field: 'rowEnd', align: 'center',title: '缁撴潫鎺�'}
+            ,{field: 'bayBeg', align: 'center',title: '寮�濮嬪垪'}
+            ,{field: 'bayEnd', align: 'center',title: '缁撴潫鍒�'}
+            ,{field: 'levBeg', align: 'center',title: '寮�濮嬪眰'}
+            ,{field: 'levEnd', align: 'center',title: '缁撴潫灞�'}
+            ,{field: 'limit', align: 'center',title: '涓婇檺', hide: true}
+            ,{field: 'status$', align: 'center',title: '鐘舵��', hide: true}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳', hide: true}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿', hide: true}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳', hide: true}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿', hide: true}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
+            ,{field: 'mixed$', align: 'center',title: '娣疯浇'}
+            // ,{field: 'keepGo$', align: 'center',title: '缁х画鎼滅储'}
+
+            ,{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(locRule)', 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(locRule)', 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 = {
+                        'locRule': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/locRule/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(locRule)', 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: '1000px',
+            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+"/locRule/"+(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+"/locRule/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: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']: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}
+     });
+}
diff --git a/src/main/webapp/static/js/saasPakStore/emptyIn.js b/src/main/webapp/static/js/saasPakStore/emptyIn.js
new file mode 100644
index 0000000..ce508e8
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/emptyIn.js
@@ -0,0 +1,62 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function() {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    getInBound();
+    limit();
+
+    // 鑾峰彇鍏ュ簱鍙�
+    function getInBound(){
+        $.ajax({
+            url: baseUrl+"/agv/available/empty/put/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    var tpl = $("#putSiteSelectTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('#inSiteSelect').append(html);
+                    form.render('select');
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+
+    // 绌烘澘鍏ュ簱
+    form.on('submit(inbound)', function (data) {
+        var inSite = $('#inSiteSelect').val();
+        layer.confirm('璇风‘淇濊宸ヤ綔浣嶄笂宸叉斁鏈夌┖鏉�', function(){
+            $.ajax({
+                url: baseUrl+"/agv/empty/plate/in/start",
+                headers: {'token': localStorage.getItem('token')},
+                method: 'POST',
+                data: {sourceStaNo: inSite},
+                async: false,
+                success: function (res) {
+                    if (res.code === 200){
+                        layer.msg("鍏ュ簱鍚姩鎴愬姛锛岀洰鏍囧簱浣嶏細" + res.data);
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg)
+                    }
+                }
+            })
+        });
+
+    });
+
+
+
+})
+
diff --git a/src/main/webapp/static/js/saasPakStore/emptyOut.js b/src/main/webapp/static/js/saasPakStore/emptyOut.js
new file mode 100644
index 0000000..23f2365
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/emptyOut.js
@@ -0,0 +1,204 @@
+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;
+
+    // 鑾峰彇鍑哄簱鍙�
+    function getOutBound(){
+        // $.ajax({
+        //     url: baseUrl+"/agv/available/empty/put/site",
+        //     headers: {'token': localStorage.getItem('token')},
+        //     method: 'POST',
+        //     async: false,
+        //     success: function (res) {
+        //         if (res.code === 200){
+        //             var tpl = $("#takeSiteSelectTemplate").html();
+        //             var template = Handlebars.compile(tpl);
+        //             var html = template(res);
+        //             $('#staNoSelect').append(html);
+        //             form.render('select');
+        //         } else if (res.code === 403){
+        //             top.location.href = baseUrl+"/";
+        //         }else {
+        //             layer.msg(res.msg)
+        //         }
+        //     }
+        // })
+    }
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locMast',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/agv/locMast/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        where: {loc_sts: "D",floor:$('#floorSelect option:selected').val()},
+        even: true,
+        toolbar: '#toolbar',
+        defaultToolbar: ['filter'],
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true}
+            ,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200}
+            // ,{field: 'whsType$', align: 'center',title: '搴撲綅绫诲瀷'}
+            ,{field: 'row1', align: 'center',title: '鎺�'}
+            ,{field: 'bay1', align: 'center',title: '鍒�'}
+            ,{field: 'lev1', align: 'center',title: '灞�'}
+            // ,{field: 'fullPlt', align: 'center',title: '婊℃澘', templet:function(row){
+            //         var html = "<input value='fullPlt' type='checkbox' disabled=鈥榙isabled鈥� lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.fullPlt === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     },width:80}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',event: 'modiUser'}
+            ,{field: 'modiTime$', align: 'center',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(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            getOutBound();
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locMast)', function (obj) {
+        var data = table.checkStatus(obj.config.id).data;
+        switch (obj.event) {
+            case 'outbound':
+                var staNo = $("#staNoSelect").val();
+                if (staNo === "" || staNo === null){
+                    layer.msg("璇烽�夋嫨鍑哄簱鍙�");
+                    return;
+                }
+                var locNos = [];
+                data.forEach(function(elem) {
+                    locNos.push(elem.locNo);
+                });
+                if (data.length === 0){
+                    layer.msg('璇疯嚦灏戦�変腑涓�琛屾暟鎹�');
+                } else {
+                    $.ajax({
+                        url: baseUrl+"/agv/empty/plate/out/start",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: {
+                            stationCode: staNo,
+                            locNos: locNos
+                        },
+                        method: 'POST',
+                        traditional:true,
+                        success: function (res) {
+                            if (res.code === 200){
+                                tableReload(); // 閲嶈浇琛ㄦ牸
+                                getOutBound(); // 閲嶈浇鍑哄簱鍙�
+                                layer.msg(res.msg);
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                }
+                break;
+        }
+    });
+
+    function changeStation(){
+        var floor = $('#floorSelect option:selected').val();
+        $('#staNoSelect').empty();
+        if(floor == 1){
+            $('#staNoSelect').append("<option value=CS-101>CS-101</option>");
+            $('#staNoSelect').append("<option value=CS-102>CS-102</option>")
+        }
+        if(floor == 3){
+            $('#staNoSelect').append("<option value=CS-305>CS-305</option>");
+            $('#staNoSelect').append("<option value=CS-306>CS-306</option>")
+            $('#staNoSelect').append("<option value=CS-307>CS-307</option>")
+        }
+        form.render();
+    }
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+        getOutBound();
+        changeStation();
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+        getOutBound();
+    });
+
+})
+
+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
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
diff --git a/src/main/webapp/static/js/saasPakStore/locCheckOut.js b/src/main/webapp/static/js/saasPakStore/locCheckOut.js
new file mode 100644
index 0000000..ecdc2cc
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/locCheckOut.js
@@ -0,0 +1,163 @@
+var locDetlLayerIdx;
+var tableIns;
+var form;
+var locDetlData = [];
+function getCol() {
+    var cols = [
+        {field: 'locNo', align: 'center',title: '搴撲綅鍙�', merge: true, style: 'font-weight: bold'}
+        ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+    ];
+    arrRemove(detlCols,  'field', 'zpallet');
+    cols.push.apply(cols, detlCols);
+    return cols;
+}
+
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin', 'tableMerge'], function() {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    form = layui.form;
+    var admin = layui.admin;
+    var tableMerge = layui.tableMerge;
+
+    tableIns = table.render({
+        elem: '#chooseData',
+        headers: {token: localStorage.getItem('token')},
+        data: [],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [getCol()],
+        done: function(res, curr, count) {
+            tableMerge.render(this);
+            limit();
+            getOutBound();
+        }
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(chooseData)', function (obj) {
+        switch (obj.event) {
+            case 'outbound':
+                if (locDetlData.length === 0){
+                    layer.msg('璇峰厛娣诲姞鐩樼偣搴撳瓨', {icon: 2});
+                } else {
+                    var staNo = $("#staNoSelect").val();
+                    if (staNo === "" || staNo === null){
+                        layer.msg("璇烽�夋嫨鐩樼偣绔�", {icon: 2});
+                        return;
+                    }
+                    let param = {
+                        station: staNo,
+                        locDetls: locDetlData
+                    }
+                    $.ajax({
+                        url: baseUrl+"/agv/locCheck/out/start",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            if (res.code === 200){
+                                locDetlData = [];
+                                tableIns.reload({data: locDetlData});
+                                layer.msg(res.msg, {icon: 1});
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                }
+                break;
+        }
+    });
+
+    // 鑾峰彇鍑哄簱鍙�
+    function getOutBound(){
+        $.ajax({
+            url: baseUrl+"/available/take/check/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    var tpl = $("#takeSiteSelectTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('#staNoSelect').append(html);
+                    form.render('select');
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+
+    $(document).on('click','#mat-query', function () {
+        let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+        locDetlLayerIdx = layer.open({
+            type: 2,
+            title: false,
+            closeBtn: false,
+            maxmin: false,
+            area: ['90%', '85%'],
+            shadeClose: true,
+            content: 'locDetlCheckQuery.html',
+            success: function(layero, index){
+                layer.close(loadIndex);
+            }
+        });
+    })
+
+})
+
+// 娣诲姞琛ㄦ牸鏁版嵁
+function addTableData(data,floor) {
+    if(locDetlData[0]){
+        if(floor != locDetlData[0].locNo.split('@')[1]){
+            return false;
+        }
+    }
+
+    for (let i=0;i<data.length;i++){
+        let pass = false;
+        for (let j=0;j<locDetlData.length;j++){
+            if (data[i].matnr === locDetlData[j].matnr && data[i].batch === locDetlData[j].batch && data[i].locNo === locDetlData[j].locNo) {
+                pass = true;
+                break;
+            }
+        }
+        if (pass) {
+            data.splice(i--, 1);
+        } else {
+            data[i]["count"] = data[i]["anfme"];
+        }
+
+    }
+    locDetlData.push.apply(locDetlData, data);
+    tableIns.reload({data: locDetlData});
+    layer.close(locDetlLayerIdx);
+    return true;
+}
+
+// 娣诲姞鐩樼偣绔欓�夋嫨
+function addStationData(data) {
+    $('#staNoSelect').empty();
+    if(data == 1){
+        $('#staNoSelect').append("<option value=CS-101>CS-101</option>");
+        $('#staNoSelect').append("<option value=CS-102>CS-102</option>")
+    }
+    if(data == 3){
+        $('#staNoSelect').append("<option value=CS-305>CS-305</option>");
+        $('#staNoSelect').append("<option value=CS-306>CS-306</option>")
+        $('#staNoSelect').append("<option value=CS-307>CS-307</option>")
+    }
+    form.render();
+}
diff --git a/src/main/webapp/static/js/saasPakStore/locMove.js b/src/main/webapp/static/js/saasPakStore/locMove.js
new file mode 100644
index 0000000..4934797
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/locMove.js
@@ -0,0 +1,137 @@
+var pageCurr = 0;
+var tableIns;
+function getCol() {
+    var cols = [
+        {field: 'locNo', align: 'center',title: '搴撲綅鍙�', merge: true, style: 'font-weight: bold'}
+        ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+    ];
+    arrRemove(detlCols,  'field', 'zpallet');
+    cols.push.apply(cols, detlCols);
+    return cols;
+}
+
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'tableMerge'], function() {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var form = layui.form;
+    var tableMerge = layui.tableMerge;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locMatCode',
+        headers: {token: localStorage.getItem('token')},
+        // url: baseUrl+'/locDetl/list/auth',
+        data:[],
+        page: true,
+        limit: 16,
+        limits: [16, 50, 100, 200, 500],
+        even: true,
+        cellMinWidth: 50,
+        cols: [getCol()],
+        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) {
+            tableMerge.render(this);
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            clearSelect();
+        }
+    });
+
+});
+
+// 鎼滅储搴撲綅鐗╂枡
+function getLoc(el) {
+    tableIns.reload({
+        url: baseUrl+'/agv/locDetl/list/auth'
+        , where: {loc_no: el.value}
+        , done:function (res) {
+            limit();
+            clearSelect();
+            // 鑾峰彇鍚屼竴鍫嗗灈鏈虹殑绌哄簱浣�
+            http.post(baseUrl + "/agv/group/empty/stock", {sourceLocNo: el.value}, function (res) {
+                if (res.data != null) {
+                    var tpl = $("#emptyLocStock").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('#targetLocNo').append(html);
+                    layui.form.render('select');
+                }
+            });
+        }
+    });
+}
+
+// 绉诲簱鍚姩
+function locMove() {
+    var sourceLocNo = $("#sourceLocNo").val();
+    var targetLocNo = $("#targetLocNo").val();
+    if (sourceLocNo === null || sourceLocNo === ""){
+        $("#sourceLocNo").css("border-color", "red");
+        setTimeout(function () {
+            $("#sourceLocNo").css("border-color", "#b8b8b8");
+        }, 1000);
+        layer.msg("璇疯緭鍏ユ簮搴撲綅");
+        return;
+    }
+    if (targetLocNo === null || targetLocNo === "") {
+        $(".layui-select-title .layui-input").css("border-color", "red");
+        setTimeout(function () {
+            $(".layui-select-title .layui-input").css("border-color", "#b8b8b8");
+        }, 1000);
+        layer.msg("璇疯緭鍏ョ洰鏍囧簱浣�");
+        return;
+    }
+    $.ajax({
+        url: baseUrl + "/agv/loc/move/start",
+        headers: {'token': localStorage.getItem('token')},
+        dataType: 'json',
+        data: {
+            sourceLocNo: sourceLocNo,
+            targetLocNo: targetLocNo
+        },
+        method: 'POST',
+        success: function (res) {
+            if (res.code === 200) {
+                $("#sourceLocNo").val("");
+                $("#targetLocNo").empty();
+                layui.form.render('select');
+                tableIns.reload({
+                    data: [],
+                    url: '',
+                    done:function (res) {
+                        limit();clearSelect();
+                    }
+                });
+                layer.msg(res.msg);
+            } else if (res.code === 403) {
+                top.location.href = baseUrl + "/";
+            } else {
+                layer.msg(res.msg);
+            }
+        }
+    })
+}
+
+function clearSelect() {
+    $("#targetLocNo").empty();
+    layui.form.render('select');
+}
diff --git a/src/main/webapp/static/js/saasPakStore/pakStore.js b/src/main/webapp/static/js/saasPakStore/pakStore.js
new file mode 100644
index 0000000..dd0f6cb
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/pakStore.js
@@ -0,0 +1,202 @@
+var matCodeLayerIdx;
+var initCountVal = 0;
+var matCodeData = [];
+function getCol() {
+    var cols = [
+        {fixed: 'left', field: 'anfme', title: '鏁伴噺锛堝繀濉級', align: 'center', edit:'text', width: 120,  style:'color: blue;font-weight: bold'},
+        {field: 'batch', title: '搴忓垪鐮侊紙閫夊~锛�', align: 'center', edit:'text', width: 200,  style:'color: block;font-weight: bold'}
+    ];
+    cols.push.apply(cols, matCols);
+    cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80})
+    return cols;
+}
+
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['admin', 'table','laydate', 'form'], function() {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    tableIns = table.render({
+        elem: '#chooseData',
+        data: [],
+        even: true,
+        limit: 500,
+        cellMinWidth: 50,
+        toolbar: '#toolbar',
+        cols: [getCol()],
+        done: function (res, curr, count) {
+            limit();
+            getInBound();
+        }
+    });
+
+    // 椤甸潰淇敼
+    table.on('edit(chooseData)', function (obj) {
+        let index = obj.tr.attr("data-index");
+        let data = matCodeData[index];
+        let modify = true;
+        if (obj.field === 'anfme'){
+            let vle = Number(obj.value);
+            if (isNaN(vle)) {
+                layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                modify = false;
+            } else {
+                if (vle <= 0) {
+                    layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                    modify = false;
+                }
+            }
+        }
+        if (modify) {
+            data[obj.field] = obj.value;
+        }
+        tableIns.reload({data: matCodeData});
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(chooseData)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        var data = checkStatus.data;
+        switch(obj.event) {
+            case 'comb':
+                // 鍒ゆ柇鏄惁瀛樺湪鐗╂枡
+                if (matCodeData.length === 0) {
+                    layer.msg("璇峰厛鎻愬彇鍟嗗搧", {icon: 2});
+                    return;
+                }
+                // 鍒ゆ柇鐗╂枡鏁伴噺鏄惁瀛樺湪寮傚父
+                for (var i=0;i<matCodeData.length;i++){
+                    if (isNaN(matCodeData[i].anfme)) {
+                        layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                        return;
+                    }
+                    if (matCodeData[i].anfme <= 0){
+                        layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                        return;
+                    }
+                }
+                let devpNo = $('#putSiteSelect').val();
+                if (isEmpty(devpNo)) {
+                    layer.msg("璇烽�夋嫨鍏ュ簱绔�", {icon: 2});
+                    return;
+                }
+                $.ajax({
+                    url: baseUrl+"/full/store/put/start",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: JSON.stringify({
+                        devpNo: Number(devpNo),
+                        list: matCodeData
+                    }),
+                    contentType:'application/json;charset=UTF-8',
+                    method: 'POST',
+                    async: false,
+                    success: function (res) {
+                        if (res.code === 200){
+                            layer.msg("鍏ュ簱鍚姩鎴愬姛锛岀洰鏍囧簱浣嶏細" + res.data, {icon: 1});
+                            matCodeData = [];
+                            $('#focusMatByMat').val("");
+                            tableIns.reload({data: matCodeData,done:function (res) { limit(); getInBound();}});
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        }else {
+                            layer.msg(res.msg, {icon: 2})
+                        }
+                    }
+                })
+                break;
+            default:
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(chooseData)', function(obj){
+        switch (obj.event) {
+            case 'remove':
+                let index = obj.tr.attr("data-index");
+                matCodeData.splice(index, 1);
+                tableIns.reload({data: matCodeData});
+                break;
+        }
+    });
+
+    // 鑾峰彇鍙敤鍏ュ簱绔欑偣
+    function getInBound() {
+        $.ajax({
+            url: baseUrl + "/available/put/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200) {
+                    var tpl = $("#putSiteSelectTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('#putSiteSelect').append(html);
+                    form.render('select');
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+    }
+
+    // 鎻愬彇鐗╂枡
+    $(document).on('click','#mat-query', function () {
+        let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+        matCodeLayerIdx = admin.open({
+            type: 2,
+            title: false,
+            closeBtn: false,
+            maxmin: false,
+            area: ['90%', '85%'],
+            shadeClose: true,
+            content: 'matQuery.html',
+            success: function(layero, index){
+                layer.close(loadIndex);
+            }
+        });
+    })
+
+});
+
+
+
+// 鎵爜
+function focusMat(el) {
+    if (isEmpty(el.value)) {
+        return
+    }
+    $.ajax({
+        url: baseUrl + "/mat/" + el.value + "/auth",
+        headers: {'token': localStorage.getItem('token')},
+        method: 'GET',
+        success: function (res) {
+            if (res.code === 200) {
+                matCodeData = [];
+                var param = new Array();
+                param[0] = res.data;
+                addTableData(param);
+            } else if (res.code === 403) {
+                top.location.href = baseUrl + "/";
+            } else {
+                layer.msg(res.msg, {icon: 2})
+            }
+        }
+    })
+}
+
+// 娣诲姞琛ㄦ牸鏁版嵁
+function addTableData(list) {
+    list.map(function (d) {
+        d['anfme'] = initCountVal;
+    })
+    matCodeData.push.apply(matCodeData, list);
+    tableIns.reload({data: matCodeData});
+    layer.close(matCodeLayerIdx);
+}
diff --git a/src/main/webapp/static/js/saasPakStore/stockAdjust.js b/src/main/webapp/static/js/saasPakStore/stockAdjust.js
new file mode 100644
index 0000000..25ca32b
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/stockAdjust.js
@@ -0,0 +1,247 @@
+var initCountVal = 0;
+var initAnfmeVal = "-";
+var matCodeData = [];
+var currLocNo;
+var matCodeLayerIdx;
+function getCol() {
+    var cols = [
+        {fixed: 'left', field: 'count', title: '瀹為檯鏁伴噺', align: 'center', edit:'text', width: 120,  style:'color: blue;font-weight: bold'}
+        ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+        ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', edit: true, style: 'font-weight:bold'}
+        ,{field: 'threeCode', align: 'center',title: '閿�鍞鍗曞彿', edit: true, style: 'font-weight:bold'}
+        ,{field: 'deadTime', align: 'center',title: '閿�鍞鍗曡鍙�', edit: true, style: 'font-weight:bold'}
+        ,{field: 'suppCode', align: 'center',title: '鏂欑鐮�', edit: true, style: 'font-weight:bold'}
+    ];
+    arrRemove(detlCols, "field", "zpallet");
+    arrRemove(detlCols, "field", "anfme");
+    arrRemove(detlCols, "field", "batch");
+    arrRemove(detlCols, "field", "threeCode");
+    arrRemove(detlCols, "field", "deadTime");
+    cols.push.apply(cols, detlCols);
+    cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:80})
+    return cols;
+}
+
+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: '#chooseData',
+        data: [],
+        even: true,
+        limit: 500,
+        cellMinWidth: 50,
+        toolbar: '#toolbar',
+        cols: [getCol()],
+        done: function (res, curr, count) {
+            limit();
+        }
+    });
+
+    // 椤甸潰淇敼
+    table.on('edit(chooseData)', function (obj) {
+        let index = obj.tr.attr("data-index");
+        let data = matCodeData[index];
+        let modify = true;
+        if (obj.field === 'count'){
+            let vle = Number(obj.value);
+            if (isNaN(vle)) {
+                layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                modify = false;
+            } else {
+                if (vle <= 0) {
+                    layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                    modify = false;
+                }
+            }
+        }
+        if (modify) {
+            data[obj.field] = obj.value;
+        }
+        tableIns.reload({data: matCodeData});
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(chooseData)', function (obj) {
+        switch(obj.event) {
+            case 'adjust':
+                if (isEmpty(currLocNo)) {
+                    layer.msg("璇峰厛妫�绱㈠簱浣�", {icon: 2})
+                    inputTip($("#searchLocNo"));
+                    return;
+                }
+                if (matCodeData.length === 0) {
+                    layer.msg("璇峰厛娣诲姞鏄庣粏", {icon: 2});
+                    return;
+                }
+                for (var i=0;i<matCodeData.length;i++){
+                    if (isNaN(matCodeData[i].count)) {
+                        layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                        return;
+                    }
+                    if (matCodeData[i].count < 0){
+                        layer.msg("鏁伴噺涓嶈兘灏忎簬闆�", {icon: 2});
+                        return;
+                    }
+                }
+                layer.confirm('纭畾璋冩暣'+currLocNo+'搴撲綅鐨勬槑缁嗗悧锛�', {shadeClose: true}, function(){
+                    $.ajax({
+                        url: baseUrl+"/manLocDetl/adjust/start",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify({
+                            locNo: currLocNo,
+                            list: matCodeData
+                        }),
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        async: false,
+                        success: function (res) {
+                            if (res.code === 200){
+                                layer.msg(currLocNo + res.msg, {icon: 1});
+                                init(currLocNo)
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    })
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(chooseData)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'remove':
+                let index = obj.tr.attr("data-index");
+                matCodeData.splice(index, 1);
+                tableIns.reload({data: matCodeData});
+                break;
+        }
+    });
+
+    // 妫�绱簨浠�
+    form.on('submit(search)', function (data) {
+        let locNo = data.field.loc_no;
+        if (locNo === "") {
+            inputTip($("#searchLocNo"));
+            layer.msg("璇疯緭鍏ュ簱浣嶅彿");
+            return;
+        }
+        init(locNo);
+    });
+
+    // 閲嶇疆浜嬩欢
+    form.on('submit(reset)', function (data) {
+        reset();
+    });
+
+    function init(locNo) {
+        http.post(baseUrl + "/manLocDetl/list/auth", {locNo: locNo,limit: 1000}, function (res) {
+            matCodeData = [];
+            matCodeData = res.data.records;
+            for (var i = 0; i<matCodeData.length; i++) {
+                matCodeData[i]["count"] = matCodeData[i]["anfme"];
+            }
+            locTips(true, locNo);
+            tableReload();
+        })
+    }
+
+    function reset() {
+        clearFormVal($('#search-box'));
+        matCodeData = [];
+        tableReload();
+        locTips(false);
+    }
+
+    // 閲嶈浇琛ㄦ牸
+    function tableReload() {
+        tableIns.reload({data: matCodeData});
+    }
+
+    // 搴撲綅鎻愮ず妗�
+    function locTips(retrieve, locNo) {
+        if (retrieve) {
+            http.post(baseUrl+"/node/select/"+locNo+"/auth", null, function (res) {
+                let data = res.data;
+                if (data != null) {
+                    $(".retrieve").show();
+                    $("#locMsg").html(locNo + "&nbsp;,搴撲綅鐘舵�侊細" + data.locSts$);
+                    $('.not-retrieve').hide();
+                    currLocNo = locNo;
+                } else {
+                    layer.msg("璇疯緭鍏ユ湁鏁堝簱浣嶅彿", {icon: 2});
+                    $('.not-retrieve').show();
+                    $("#locMsg").html("");
+                    $(".retrieve").hide();
+                    currLocNo = null;
+                    inputTip($("#searchLocNo"));
+                }
+            })
+        } else {
+            $('.not-retrieve').show();
+            $("#locMsg").html("");
+            $(".retrieve").hide();
+            currLocNo = null;
+        }
+    }
+
+    $(document).on('click','#mat-query', function () {
+        if (isEmpty(currLocNo)) {
+            layer.msg("璇峰厛妫�绱㈠簱浣�")
+            inputTip($("#searchLocNo"));
+            return;
+        }
+        let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+        matCodeLayerIdx = admin.open({
+            type: 2,
+            title: false,
+            closeBtn: false,
+            maxmin: false,
+            area: ['90%', '85%'],
+            shadeClose: true,
+            content: 'matQuery.html',
+            success: function(layero, index){
+                layer.close(loadIndex);
+            }
+        });
+    })
+
+})
+
+// 鎼滅储妗嗙┖鍊兼彁绀�
+function inputTip(el) {
+    el.css("border-color", "red");
+    setTimeout(function () {
+        el.css("border-color", "#b8b8b8");
+    }, 1000);
+}
+
+// 娣诲姞琛ㄦ牸鏁版嵁
+function addTableData(data) {
+    for (let i=0;i<data.length;i++){
+        for (let j=0;j<matCodeData.length;j++){
+            if (data[i].matnr === matCodeData[j].matnr && data[i].batch === matCodeData[j].batch) {
+                data.splice(i, 1);
+                break;
+            } else {
+                data[i]['anfme'] = initAnfmeVal;
+                data[i]['count'] = initCountVal;
+            }
+        }
+    }
+    matCodeData.push.apply(matCodeData, data);
+    tableIns.reload({data: matCodeData});
+    layer.close(matCodeLayerIdx);
+}
diff --git a/src/main/webapp/static/js/saasPakStore/stockOut.js b/src/main/webapp/static/js/saasPakStore/stockOut.js
new file mode 100644
index 0000000..d9b2580
--- /dev/null
+++ b/src/main/webapp/static/js/saasPakStore/stockOut.js
@@ -0,0 +1,177 @@
+var locDetlLayerIdx;
+var locDetlData = [];
+function getCol() {
+    var cols = [
+        {field: 'count', align: 'center',title: '鍑哄簱鏁伴噺', edit:'text', width: 130,  style:'color: blue;font-weight: bold'}
+        ,{field: 'anfme', align: 'center',title: '搴撳瓨鏁伴噺'}
+        ,{field: 'locNo$', align: 'center',title: '搴撲綅鍙�'}
+    ];
+    arrRemove(detlCols,  'field', 'anfme');
+    cols.push.apply(cols, detlCols);
+    cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80})
+    return cols;
+}
+
+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 form = layui.form;
+    var admin = layui.admin;
+
+    tableIns = table.render({
+        elem: '#chooseData',
+        headers: {token: localStorage.getItem('token')},
+        data: [],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        limit: 500,
+        cols: [getCol()],
+        done: function(res, curr, count) {
+            limit();
+            getOutBound();
+        }
+    });
+
+    // 椤甸潰淇敼
+    table.on('edit(chooseData)', function (obj) {
+        let index = obj.tr.attr("data-index");
+        let data = locDetlData[index];
+        let modify = true;
+        if (obj.field === 'count'){
+            let vle = Number(obj.value);
+            if (isNaN(vle)) {
+                layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                modify = false;
+            } else {
+                if (vle <= 0) {
+                    layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                    modify = false;
+                }
+                if (vle > Number(data.anfme)) {
+                    layer.msg("鍑哄簱鏁伴噺涓嶅緱澶т簬搴撳瓨鏁伴噺", {icon: 2});
+                    modify = false;
+                }
+            }
+        }
+        if (modify) {
+            data[obj.field] = obj.value;
+        }
+        tableIns.reload({data: locDetlData});
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(chooseData)', function (obj) {
+        switch (obj.event) {
+            case 'outbound':
+                if (locDetlData.length === 0){
+                    layer.msg('璇峰厛鎻愬彇鍟嗗搧搴撳瓨', {icon: 2});
+                } else {
+                    var staNo = $("#staNoSelect").val();
+                    if (staNo === "" || staNo === null){
+                        layer.msg("璇烽�夋嫨鍑哄簱鍙�", {icon: 2});
+                        return;
+                    }
+                    let param = {
+                        outSite: staNo,
+                        locDetls: locDetlData
+                    }
+                    $.ajax({
+                        url: baseUrl+"/plate/out/start",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            if (res.code === 200){
+                                locDetlData = [];
+                                tableIns.reload({data: locDetlData,done:function (res) {limit();getOutBound();}});
+                                layer.msg(res.msg, {icon: 1});
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                }
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(chooseData)', function(obj){
+        switch (obj.event) {
+            case 'remove':
+                let index = obj.tr.attr("data-index");
+                locDetlData.splice(index, 1);
+                tableIns.reload({data: locDetlData});
+                break;
+        }
+    });
+
+    // 鑾峰彇鍑哄簱鍙�
+    function getOutBound(){
+        $.ajax({
+            url: baseUrl+"/available/take/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    var tpl = $("#takeSiteSelectTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('#staNoSelect').append(html);
+                    form.render('select');
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+
+
+    $(document).on('click','#mat-query', function () {
+        let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+        locDetlLayerIdx = layer.open({
+            type: 2,
+            title: false,
+            closeBtn: false,
+            maxmin: false,
+            area: ['90%', '85%'],
+            shadeClose: true,
+            content: 'locDetlQuery.html',
+            success: function(layero, index){
+                layer.close(loadIndex);
+            }
+        });
+    })
+
+})
+
+// 娣诲姞琛ㄦ牸鏁版嵁
+function addTableData(data) {
+    for (var i=0;i<data.length;i++){
+        let pass = false;
+        for (var j=0;j<locDetlData.length;j++){
+            if (data[i].matnr === locDetlData[j].matnr && data[i].batch === locDetlData[j].batch && data[i].locNo$ === locDetlData[j].locNo$) {
+                pass = true;
+                break;
+            }
+        }
+        if (pass) {
+            data.splice(i--, 1);
+        } else {
+            data[i]["count"] = data[i]["anfme"];
+        }
+    }
+    locDetlData.push.apply(locDetlData, data);
+    tableIns.reload({data: locDetlData});
+    layer.close(locDetlLayerIdx);
+}
diff --git a/src/main/webapp/views/locRule/locCodeRule.html b/src/main/webapp/views/locRule/locCodeRule.html
new file mode 100644
index 0000000..de00d88
--- /dev/null
+++ b/src/main/webapp/views/locRule/locCodeRule.html
@@ -0,0 +1,203 @@
+<!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">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </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">
+                            <input class="layui-input" type="text" name="condition" 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="locRule" lay-filter="locRule"></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/locRule/locRule.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="matnr" 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="cstmr" 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>
+                </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>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍏朵粬: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="other" placeholder="璇疯緭鍏ュ叾浠�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">涓婇檺: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="limit" placeholder="璇疯緭鍏ヤ笂闄�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣疯浇: </label>
+                    <div class="layui-input-block">
+                        <select name="mixed">
+                            <option value="1" selected>鏄�</option>
+                            <option value="0">鍚�</option>
+                        </select>
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">
+                    <label class="layui-form-label">娣疯浇鏈壘鍒板簱浣嶇户缁悳绱�: </label>
+                    <div class="layui-input-block">
+                        <select name="keepGo">
+                            <option value="1">鏄�</option>
+                            <option value="0" selected>鍚�</option>
+                        </select>
+                    </div>
+                </div>-->
+
+             </div>
+
+            <div class="layui-col-md6">
+<!--                <div class="layui-inline">-->
+<!--                    <label class="layui-form-label">鎺掕寖鍥�</label>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_min" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-mid">-</div>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_max" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬫帓: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowBeg" placeholder="璇疯緭鍏ュ紑濮嬫帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鎺�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowEnd" placeholder="璇疯緭鍏ョ粨鏉熸帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪垪: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayBeg" placeholder="璇疯緭鍏ュ紑濮嬪垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鍒�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayEnd" placeholder="璇疯緭鍏ョ粨鏉熷垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪眰: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levBeg" placeholder="璇疯緭鍏ュ紑濮嬪眰" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫灞�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levEnd" placeholder="璇疯緭鍏ョ粨鏉熷眰" lay-vertype="tips" lay-verify="required" required="">
+                    </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>
+
diff --git a/src/main/webapp/views/saasPakStore/matQuery.html b/src/main/webapp/views/saasPakStore/matQuery.html
new file mode 100644
index 0000000..433d45c
--- /dev/null
+++ b/src/main/webapp/views/saasPakStore/matQuery.html
@@ -0,0 +1,173 @@
+<!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">
+    <style>
+        body {
+            /*overflow: hidden;*/
+        }
+        .layui-table-box {
+            border-right: 1px solid #9F9F9F;
+            border-left: 1px solid #9F9F9F;
+        }
+    </style>
+</head>
+<body>
+<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" style="padding: 0 20px; overflow: scroll;">
+    <fieldset class="layui-elem-field site-demo-button" style="margin: 20px;">
+        <legend>鎼滅储鏍�</legend>
+        <div id="search-box" class="layui-form layui-card-header">
+            <div class="layui-inline">
+                <div class="layui-input-inline">
+                    <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <div class="layui-input-inline">
+                    <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鍙�" autocomplete="off">
+                </div>
+            </div>
+            <!-- 鏃ユ湡鑼冨洿 -->
+            <div class="layui-inline" style="width: 300px">
+                <div class="layui-input-inline">
+                    <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <div class="layui-input-inline">
+                    <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                </div>
+            </div>
+            <!-- 寰呮坊鍔� -->
+            <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+                <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+            </div>
+        </div>
+    </fieldset>
+
+    <div class="layui-form">
+        <table class="layui-hide" id="mat" lay-filter="mat"></table>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">鎻愬彇</button>
+    </div>
+</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/handlebars/handlebars-v4.5.3.js"></script>
+
+</body>
+<script>
+    function getCol() {
+        let cols = [
+            {type: 'checkbox', fixed: 'left'}
+        ];
+        cols.push.apply(cols, matCols);
+        cols.push(
+            {field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide: true},
+            {field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+        )
+        return cols;
+    }
+
+    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;
+
+        // 鐗╂枡鏌ヨ鏁版嵁琛�
+        matQueryTable = table.render({
+            elem: '#mat',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl + '/mat/list/auth',
+            page: true,
+            limit: 7,
+            limits: [7, 10, 30,50,100],
+            even: true,
+            cellMinWidth: 50,
+            toolbar: '#toolbar',
+            cols: [getCol()],
+            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 + "/";
+                }
+            }
+        });
+
+        // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+        table.on('toolbar(mat)', function (obj) {
+            let checkStatus = table.checkStatus(obj.config.id);
+            let data = checkStatus.data;
+            switch(obj.event) {
+                case 'confirm':
+                    if (data.length === 0){
+                        layer.msg("璇烽�夋嫨鏁版嵁", {icon: 2});
+                        return;
+                    }
+                    parent.addTableData(data);
+                    break;
+            }
+        });
+
+        // 鎼滅储鏍忔悳绱簨浠�
+        form.on('submit(search)', function (data) {
+            tableReload();
+        });
+
+        layDate.render({
+            elem: '.layui-laydate-range'
+            ,type: 'datetime'
+            ,range: true
+        });
+    })
+
+    function tableReload() {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        matQueryTable.reload({
+            where: searchData
+        });
+    }
+
+</script>
+</html>
+
diff --git a/src/main/webapp/views/saasPakStore/stockAdjust.html b/src/main/webapp/views/saasPakStore/stockAdjust.html
index a955381..2ea3b7f 100644
--- a/src/main/webapp/views/saasPakStore/stockAdjust.html
+++ b/src/main/webapp/views/saasPakStore/stockAdjust.html
@@ -126,7 +126,7 @@
 <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/handlebars/handlebars-v4.5.3.js"></script>
-<script type="text/javascript" src="../../static/js/agvPakStore/stockAdjust.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/saasPakStore/stockAdjust.js" charset="utf-8"></script>
 
 </body>
 </html>
diff --git a/src/main/webapp/views/saasRule/locRule.html b/src/main/webapp/views/saasRule/locRule.html
new file mode 100644
index 0000000..00a770b
--- /dev/null
+++ b/src/main/webapp/views/saasRule/locRule.html
@@ -0,0 +1,197 @@
+<!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">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </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">
+                            <input class="layui-input" type="text" name="condition" 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="locRule" lay-filter="locRule"></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/saasLocRule/locRule.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="matnr" 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="cstmr" 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>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍏朵粬: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="other" placeholder="璇疯緭鍏ュ叾浠�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">涓婇檺: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="limit" placeholder="璇疯緭鍏ヤ笂闄�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣疯浇: </label>
+                    <div class="layui-input-block">
+                        <select name="mixed">
+                            <option value="1" selected>鏄�</option>
+                            <option value="0">鍚�</option>
+                        </select>
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">
+                    <label class="layui-form-label">娣疯浇鏈壘鍒板簱浣嶇户缁悳绱�: </label>
+                    <div class="layui-input-block">
+                        <select name="keepGo">
+                            <option value="1">鏄�</option>
+                            <option value="0" selected>鍚�</option>
+                        </select>
+                    </div>
+                </div>-->
+
+             </div>
+
+            <div class="layui-col-md6">
+<!--                <div class="layui-inline">-->
+<!--                    <label class="layui-form-label">鎺掕寖鍥�</label>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_min" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-mid">-</div>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_max" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬫帓: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowBeg" placeholder="璇疯緭鍏ュ紑濮嬫帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鎺�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowEnd" placeholder="璇疯緭鍏ョ粨鏉熸帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪垪: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayBeg" placeholder="璇疯緭鍏ュ紑濮嬪垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鍒�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayEnd" placeholder="璇疯緭鍏ョ粨鏉熷垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪眰: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levBeg" placeholder="璇疯緭鍏ュ紑濮嬪眰" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫灞�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levEnd" placeholder="璇疯緭鍏ョ粨鏉熷眰" lay-vertype="tips" lay-verify="required" required="">
+                    </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>
+

--
Gitblit v1.9.1