src/main/java/com/zy/asrs/controller/NodeController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/NodeMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/NodeService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/utils/TreeUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/NodeMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/nodeLoc/nodeLoc.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/nodeLoc/nodeLocTree.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/nodeLoc/nodeLoc.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/NodeController.java
@@ -13,9 +13,7 @@ import com.core.common.DateUtils; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.ManLocDetl; import com.zy.asrs.entity.Node; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.InitPakoutParam; import com.zy.asrs.entity.param.LocMastInitParam; import com.zy.asrs.entity.param.NodeInitPatam; @@ -67,9 +65,9 @@ @RequestParam(required = false)String orderByType, @RequestParam Map<String, Object> param){ EntityWrapper<Node> wrapper = new EntityWrapper<>(); wrapper.eq("type",3); excludeTrash(param); convert(param, wrapper); hostEq(wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} return R.ok(nodeService.selectPage(new Page<>(curr, limit), wrapper)); } @@ -98,7 +96,6 @@ @RequestParam(required = false)String orderByType, @RequestParam Map<String, Object> param){ EntityWrapper<Node> wrapper = new EntityWrapper<>(); wrapper.ne("type",3); excludeTrash(param); convert(param, wrapper); hostEq(wrapper); @@ -349,12 +346,13 @@ @RequestMapping(value = "/node/init/auth") @ManagerAuth(memo = "初始化库位") // @Transactional @Transactional public R init(NodeInitPatam param) { List<Node> list = new ArrayList<>(); EntityWrapper<Node> nodeEntityWrapper = new EntityWrapper<>(); nodeEntityWrapper.eq("id",param.getValue()); nodeEntityWrapper.eq("name",param.getName()); nodeService.delete(new EntityWrapper<Node>().eq("parent_id",param.getValue())); Node node = nodeService.selectOne(nodeEntityWrapper); for (int r=param.getStartRow(); r<=param.getEndRow(); r++){ for (int b=param.getStartBay(); b<=param.getEndBay(); b++) { @@ -420,4 +418,6 @@ } } src/main/java/com/zy/asrs/mapper/NodeMapper.java
@@ -1,13 +1,21 @@ package com.zy.asrs.mapper; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.ManLocDetl; import com.zy.asrs.entity.Node; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; @Mapper @Repository public interface NodeMapper extends BaseMapper<Node> { Node selectByUuid(@Param("uuid") String uuid, @Param("hostId") Long hostId); List<Node> listByPage(Map<String, Object> map); Integer listByPageCount(Map<String, Object> map); } src/main/java/com/zy/asrs/service/NodeService.java
@@ -1,7 +1,9 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.IService; import com.core.common.R; import com.zy.asrs.entity.ManLocDetl; import com.zy.asrs.entity.Node; import com.zy.asrs.entity.param.InitPakoutParam; import com.zy.asrs.entity.param.PakinParam; @@ -25,4 +27,6 @@ R initPakout(List<InitPakoutParam> params, Long userId, Long hostId); void locMove(String sourceLocNo, String targetLocNo, Long userId); Page<Node> getPage(Page<Node> page); } src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.core.common.R; @@ -25,6 +26,7 @@ import java.beans.Transient; import java.util.Date; import java.util.List; import java.util.Map; @Service("nodeService") public class NodeServiceImpl extends ServiceImpl<NodeMapper, Node> implements NodeService { @@ -214,4 +216,13 @@ } } @Override public Page<Node> getPage(Page<Node> page) { Map<String, Object> condition = page.getCondition(); List<Node> manLocDetls = baseMapper.listByPage(condition); page.setRecords(manLocDetls); page.setTotal(baseMapper.listByPageCount(page.getCondition())); return page; } } src/main/java/com/zy/common/utils/TreeUtils.java
@@ -119,7 +119,8 @@ public void dealNode(Node parent, List<Map> list, Long hostId) { Wrapper<Node> wrapper = new EntityWrapper<Node>() .eq("parent_id", parent.getId()) .eq("status", "1"); .eq("status", "1") .ne("type",3); if (hostId != null) { wrapper.eq("host_id", hostId); } src/main/resources/mapper/NodeMapper.xml
@@ -29,9 +29,58 @@ <result column="lev1" property="lev1" /> </resultMap> <sql id="nodeCondition"> <if test="host_id != null and host_id != ''"> and mld.host_id = #{host_id} </if> <if test="loc_no != null and loc_no != ''"> and mld.loc_no like concat('%',#{loc_no},'%') </if> <if test="locNo != null and locNo != ''"> and mld.loc_no like concat('%',#{loc_no},'%') </if> <if test="matnr != null and matnr != ''"> and mld.matnr like concat('%',#{matnr},'%') </if> <if test="maktx != null and maktx != ''"> and mld.maktx like concat('%',#{maktx},'%') </if> <if test="startTime!=null and endTime!=null"> and mld.update_time between #{startTime} and #{endTime} </if> </sql> <select id="selectByUuid" resultMap="BaseResultMap"> select * from man_node where 1=1 and uuid=#{uuid} and host_id = #{hostId} and status = 1 </select> <select id="listByPage" resultMap="BaseResultMap"> select * from ( SELECT ROW_NUMBER() over (order by mld.create_time desc) as row, mld.* FROM man_loc_detl mld LEFT JOIN man_node mn ON mld.node_id = mn.id LEFT JOIN man_mat mm ON mld.matnr = mm.matnr LEFT JOIN man_tag mt ON mm.tag_id = mt.id WHERE 1=1 AND (CHARINDEX(','+#{node_id}+',', ','+mn.path+',') > 0 OR mn.id = #{node_id}) AND (CHARINDEX(','+#{tag_id}+',', ','+mt.path+',') > 0 OR mt.id = #{tag_id}) <include refid="nodeCondition"></include> ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize}) </select> <select id="listByPageCount" parameterType="java.util.Map" resultType="java.lang.Integer"> select count(1) FROM man_loc_detl mld LEFT JOIN man_node mn ON mld.node_id = mn.id LEFT JOIN man_mat mm ON mld.matnr = mm.matnr LEFT JOIN man_tag mt ON mm.tag_id = mt.id WHERE 1=1 AND (CHARINDEX(','+#{node_id}+',', ','+mn.path+',') > 0 OR mn.id = #{node_id}) AND (CHARINDEX(','+#{tag_id}+',', ','+mt.path+',') > 0 OR mt.id = #{tag_id}) <include refid="nodeCondition"></include> </select> </mapper> src/main/webapp/static/js/nodeLoc/nodeLoc.js
New file @@ -0,0 +1,488 @@ var pageCurr; var printMatCodeNos = []; var admin; function getCol() { var cols = [ {type: 'checkbox'} ,{field: 'tagId$', align: 'center',title: '归类', templet: '#tagTpl'} ]; cols.push.apply(cols, matCols); cols.push( {fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:150} ) return cols; } layui.config({ base: baseUrl + "/static/layui/lay/modules/" }).extend({ dropdown: 'dropdown/dropdown', }).use(['table','laydate', 'form', 'treeTable', 'admin', 'xmSelect', 'dropdown', 'element'], function(){ var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; admin = layui.admin; var treeTable = layui.treeTable; var xmSelect = layui.xmSelect; // 商品分类数据 var insTb = treeTable.render({ elem: '#tag', url: baseUrl+'/node/list/auth', headers: {token: localStorage.getItem('token')}, tree: { iconIndex: 2, // 折叠图标显示在第几列 isPidData: true, // 是否是id、pid形式数据 idName: 'id', // id字段名称 pidName: 'parentId' // pid字段名称 }, cols: [], done: function (data) { $('.ew-tree-table-box').css('height', '100%'); insTb.expandAll(); } }); // 数据渲染 tableIns = table.render({ elem: '#mat', headers: {token: localStorage.getItem('token')}, url: baseUrl+'/node/list/auth', page: true, limit: 16, limits: [16, 30, 50, 100, 200, 500], toolbar: '#toolbar', cellMinWidth: 50, height: 'full-105', cols: [[ {type: 'checkbox'}, {field: 'name', align: 'center',title: '库位名', hide: false}, {field: 'parentName', align: 'center',title: '库区', hide: false}, {field: 'createBy$', align: 'center',title: '创建人', hide: false}, {field: 'createTime$', align: 'center',title: '创建时间', hide: false}, {field: 'type$', align: 'center',title: '类型', templet: '#tagTpl', hide: false} ]], 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(); 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('sort(locMast)', 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 }, done: function (res, curr, count) { if (res.code === 403) { top.location.href = baseUrl+"/"; } pageCurr=curr; limit(); } }); }); // 监听头工具栏事件 table.on('toolbar(mat)', function (obj) { var checkStatus = table.checkStatus(obj.config.id); switch(obj.event) { case 'addData': showEditModel() break; case 'deleteData': var data = checkStatus.data; if (data.length === 0){ layer.msg('请选择数据'); } else { layer.confirm('确定删除'+(data.length===1?'此':data.length)+'条数据吗', function(){ $.ajax({ url: baseUrl+"/node/delete/auth", headers: {'token': localStorage.getItem('token')}, data: {param: JSON.stringify(data)}, method: 'POST', traditional:true, success: function (res) { if (res.code === 200){ layer.closeAll(); tableReload(false); } else if (res.code === 403){ top.location.href = baseUrl+"/"; } else { layer.msg(res.msg) } } }) }); } break; case 'exportData': layer.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 = { 'mat': exportData, 'fields': fields }; $.ajax({ url: baseUrl+"/node/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) } } }); }); break; // 批量打印 case "btnPrintBatch": printMatCodeNos = []; var data = checkStatus.data; if (data.length === 0){ layer.msg('请选择打印数据'); } else { layer.open({ type: 1, title: '批量打印 [数量'+ data.length +']', area: ['500px'], shadeClose: true, content: $('#printDataDiv'), success: function(layero, index){ for (var i = 0; i<data.length;i++) { printMatCodeNos.push(data[i].matnr); } }, end: function () { } }); } break; } }); // 监听行工具事件 table.on('tool(mat)', function(obj){ var data = obj.data; switch (obj.event) { // 打印 case "btnPrint": printMatCodeNos = []; layer.open({ type: 1, title: data.matnr + ' [数量:1]', area: ['500px'], shadeClose: true, content: $('#printDataDiv'), success: function(layero, index){ layer.iframeAuto(index); printMatCodeNos.push(data.matnr); }, end: function () { } }); break; // 编辑 case 'edit': showEditModel(data) break; } }); /* 显示表单弹窗 */ function showEditModel(mData) { admin.open({ type: 1, area: '600px', title: (mData ? '修改' : '添加') + '商品', content: $('#editDialog').html(), success: function (layero, dIndex) { // 回显表单数据 form.val('detail', mData); // 新增自动生成商品编号 if (!mData) { http.get(baseUrl + "/node/auto/matnr/auth", null, function (res) { $('#matnr').val(res.data); }) } // 表单提交事件 form.on('submit(editSubmit)', function (data) { console.log(data) data.field.tagId = insXmSel.getValue('valueStr'); if (isEmpty(data.field.tagId)) { layer.msg('分类不能为空', {icon: 2}); return false; } var loadIndex = layer.load(2); $.ajax({ url: baseUrl+"/node/"+(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}); $(".layui-laypage-btn")[0].click(); } else if (res.code === 403){ top.location.href = baseUrl+"/"; }else { layer.msg(res.msg, {icon: 2}); } } }) return false; }); // 渲染下拉树 var insXmSel = xmSelect.render({ el: '#tagSel', height: '250px', data: insTb.options.data, initValue: mData ? [mData.tagId] : [], model: {label: {type: 'text'}}, prop: { name: 'name', value: 'id' }, radio: true, clickClose: true, tree: { show: true, indent: 15, strict: false, expandedKeys: true } }); // 弹窗不出现滚动条 $(layero).children('.layui-layer-content').css('overflow', 'visible'); layui.form.render('select'); } }); } // 模板选择 form.on('radio(selectTemplateRadio)', function (data) { $('.template-preview').hide(); $('#template-preview-'+data.value).show(); }); // 开始打印 form.on('submit(doPrint)', function (data) { var templateNo = data.field.selectTemplate; $.ajax({ url: baseUrl+"/node/print/auth", headers: {'token': localStorage.getItem('token')}, data: {param: printMatCodeNos}, method: 'POST', async: false, success: function (res) { if (res.code === 200){ layer.closeAll(); for (let i=0;i<res.data.length;i++){ var templateDom = $("#templatePreview"+templateNo); var className = templateDom.attr("class"); if (className === 'template-barcode') { res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1¶m="+res.data[i].matnr; } else { res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2¶m="+res.data[i].matnr; } } var tpl = templateDom.html(); var template = Handlebars.compile(tpl); var html = template(res); var box = $("#box"); box.html(html);box.show(); box.print({mediaPrint:true}); box.hide(); } else if (res.code === 403){ top.location.href = baseUrl+"/"; }else { layer.msg(res.msg) } } }) }); // 搜索栏搜索事件 form.on('submit(search)', function (data) { pageCurr = 1; tableReload(false); }); // 搜索栏重置事件 form.on('submit(reset)', function (data) { pageCurr = 1; clearFormVal($('#search-box')); tableReload(false); }); // 时间选择器 layDate.render({ elem: '#createTime\\$', type: 'datetime' }); layDate.render({ elem: '#updateTime\\$', type: 'datetime' }); }); // excel导入模板下载 function excelMouldDownload(){ layer.load(1, {shade: [0.1,'#fff']}); location.href = baseUrl + "/node/excel/import/mould"; layer.closeAll('loading'); } // excel导入 function importExcel() { $("#importExcel").trigger("click"); } function upload(obj){ if(!obj.files) { return; } var file = obj.files[0]; admin.confirm('确认同步 [' + file.name +'] 文件吗?', function (index) { layer.load(1, {shade: [0.1,'#fff']}); var url = baseUrl + "/node/excel/import/auth"; var form = new FormData(); form.append("file", file); xhr = new XMLHttpRequest(); xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.setRequestHeader('token', localStorage.getItem('token')); xhr.onload = uploadComplete; //请求完成 xhr.onerror = uploadFailed; //请求失败 xhr.onloadend = function () { // // 上传完成重置文件流 layer.closeAll('loading'); $("#importExcel").val(""); }; // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】 xhr.upload.onloadstart = function(){//上传开始执行方法 ot = new Date().getTime(); //设置上传开始时间 oloaded = 0;//设置上传开始时,以上传的文件大小为0 }; xhr.send(form); }, function(index){ $("#importExcel").val(""); }); } function uploadComplete(evt) { var res = JSON.parse(evt.target.responseText); if(res.code === 200) { layer.msg(res.msg, {icon: 1}); loadTree(""); } else { layer.msg(res.msg, {icon: 2}); } } function uploadFailed(evt) { var res = JSON.parse(evt.target.responseText); layer.msg(res.msg, {icon: 2}); } // excel导出 function exportExcel() { } 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); } }); } function clearFormVal(el) { $(':input', el) .val('') .removeAttr('checked') .removeAttr('selected'); } $('body').keydown(function () { if (event.keyCode === 13) { $("#search").click(); } }); src/main/webapp/static/js/nodeLoc/nodeLocTree.js
New file @@ -0,0 +1,86 @@ var currentTemId; var currentTemName; var currentTemSsbm; var init = false; layui.config({ base: baseUrl + "/static/layui/lay/modules/" // 配置模块所在的目录 }).use(['table','laydate', 'form', 'tree', 'xmSelect'], function() { var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; var tree = layui.tree; var xmSelect = layui.xmSelect; var selObj, treeData; // 左树选中数据 var organizationTree; window.loadTree = function(condition){ var loadIndex = layer.load(2); $.ajax({ url: baseUrl+"/node/tree/auth", headers: {'token': localStorage.getItem('token')}, data: { 'condition': condition }, method: 'POST', success: function (res) { if (res.code === 200){ layer.close(loadIndex); // 树形图 organizationTree = tree.render({ elem: '#organizationTree', id: 'organizationTree', onlyIconControl: true, data: res.data, click: function (obj) { currentTemId = obj.data.id; currentTemName = obj.data.title.split(" - ")[0]; currentTemSsbm = obj.data.title.split(" - ")[1]; selObj = obj; $('#organizationTree').find('.ew-tree-click').removeClass('ew-tree-click'); $(obj.elem).children('.layui-tree-entry').addClass('ew-tree-click'); tableIns.reload({ where: {parent_id: obj.data.id}, page: {curr: 1} }); } }); treeData = res.data; if (isEmpty(condition) && init) { tableIns.reload({ where: {parent_id: ""}, page: {curr: 1} }); } if (!init) { init = true; } } else if (res.code === 403){ top.location.href = baseUrl+"/"; } else { layer.msg(res.msg) } } }) } loadTree(); /* 树形图重置 */ $('#treeReset').click(function () { $("#condition").val(""); loadTree(""); }) }) function closeDialog() { layer.closeAll(); } /* 树形图搜索 */ function findData(el) { var condition = $(el).val(); loadTree(condition) } src/main/webapp/views/nodeLoc/nodeLoc.html
New file @@ -0,0 +1,436 @@ <!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/tree.css" media="all"> <style> body { color: #595959; background-color: #f5f7f9; } .layui-fluid { padding: 15px; } .layui-form.layui-border-box.layui-table-view { /*margin: 15px 0 35px 0;*/ width: 100%; border-width: 1px; } .layui-form.layui-border-box.layui-table-view { height: calc(100vh - 160px); } .layui-form.layui-border-box.layui-table-view { margin: 0; } #search-box { padding: 30px 30px 10px 0px; margin-left: 0px; } .layui-form.layui-border-box.layui-table-view { height: 100%; } .admin-form { padding: 25px 30px 0 0 !important; margin: 0 !important; } /* ------------------------- 打印表格 ----------------------- */ .template-preview { height: 200px; display: inline-block; } .contain td { border: 1px solid #000; /*font-family: 黑体;*/ /*font-weight: bold;*/ /*color: #000000;*/ } </style> </head> <body> <div class="layui-fluid"> <!-- 左 --> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-card"> <div class="layui-card-body" style="padding: 10px;"> <!-- 树工具栏 --> <div class="layui-form toolbar" id="organizationTreeBar"> <div class="layui-inline" style="max-width: 200px;"> <input id="condition" onkeyup="findData(this)" type="text" class="layui-input" placeholder="请输入关键字" autocomplete="off"> </div> <div class="layui-inline"> <button class="layui-btn icon-btn layui-btn-sm" id="treeReset" style="padding: 0 10px"> <i class="layui-icon layui-icon-close"></i> </button> </div> </div> <!-- 树 --> <div class="layui-form toolbar" id="organizationTree"></div> </div> </div> </div> <!-- 右 --> <div class="layui-col-md9"> <div class="layui-card"> <div class="layui-card-body" style="padding: 10px;"> <!-- 表格工具栏2 --> <div id="search-box" class="layui-form toolbar" style="padding-top: 5px"> <div class="layui-inline"> <label class="layui-form-label" style="padding: 8px 15px 8px 15px">商品编号:</label> <div class="layui-input-inline"> <input name="matnr" class="layui-input" placeholder="输入商品编号"/> </div> </div> <div class="layui-inline"> <label class="layui-form-label" style="padding: 8px 15px 8px 15px">商品名称:</label> <div class="layui-input-inline"> <input name="maktx" class="layui-input" placeholder="输入商品名称"/> </div> </div> <div class="layui-inline">  <button class="layui-btn icon-btn" lay-filter="search" lay-submit> <i class="layui-icon"></i>搜索 </button> <button class="layui-btn icon-btn" lay-filter="reset" lay-submit> <i class="layui-icon"></i>重置 </button> </div> </div> <table class="layui-hide" id="mat" lay-filter="mat"></table> </div> </div> </div> </div> </div> <script type="text/html" id="tagTpl"> <span name="tagId" class="layui-badge layui-badge-blue">{{d.type$}}</span> </script> <script type="text/html" id="toolbar"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button> <!-- 商品/物料 数据中心 --> <!-- <div class="dropdown-menu" style="float: right">--> <!-- <button class="layui-btn layui-btn-primary layui-border-black icon-btn layui-btn-sm"> 数据同步 <i class="layui-icon layui-icon-drop"></i></button>--> <!-- <ul class="dropdown-menu-nav dark">--> <!-- <div class="dropdown-anchor"></div>--> <!-- <li class="title">1st menu</li>--> <!-- <li><a onclick="excelMouldDownload()" style="font-size: 12px"><i class="layui-icon layui-icon-template-1"></i>模板下载</a></li>--> <!-- <li><a onclick="importExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>导入 Excel</a></li>--> <!-- <li style="display: none"><input id="importExcel" type="file" onchange="upload(this)" ></li>--> <!-- <hr>--> <!-- <li class="title">2nd menu</li>--> <!-- <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>--> <!-- </ul>--> <!-- </div>--> <!-- <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right;margin-right: -10px">导出</button>--> </div> </script> <script type="text/html" id="operate"> <a class="layui-btn layui-btn-xs btn-edit layui-btn-primary" lay-event="edit">修改</a> <button class="layui-btn layui-btn-xs btn-print" lay-event="btnPrint">打印</button> </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/jquery/jQuery.print.js"></script> <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></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/nodeLoc/nodeLoc.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/nodeLoc/nodeLocTree.js" charset="utf-8"></script> <!-- 表单弹窗 --> <script type="text/html" id="editDialog"> <form id="detail" lay-filter="detail" class="layui-form admin-form"> <input name="id" type="hidden"> <input name="uuid" type="hidden"> <input name="nodeId" type="hidden"> <input name="tag_id" type="hidden"> <input name="model" type="hidden"> <input name="name" type="hidden"> <input name="batch" type="hidden"> <input name="docId" type="hidden"> <input name="docNum" type="hidden"> <input name="custName" type="hidden"> <input name="itemNum" type="hidden"> <input name="count" type="hidden"> <input name="weight" type="hidden"> <input name="status" type="hidden"> <input name="createBy" type="hidden"> <input name="updateTime$" type="hidden"> <input name="updateBy" 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"> <div id="tagSel" class="ew-xmselect-tree"></div> </div> </div> <div class="layui-form-item"> <label class="layui-form-label layui-form-required">商品名称</label> <div class="layui-input-block"> <input name="maktx" placeholder="请输入商品名称" class="layui-input" lay-vertype="tips" lay-verify="required" required=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">配置</label> <div class="layui-input-block"> <input name="specs" placeholder="请输入配置" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">单箱净重</label> <div class="layui-input-block"> <input name="weight" placeholder="请输入单箱净重格" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">单箱体积</label> <div class="layui-input-block"> <input name="volume" placeholder="请输入单箱体积" class="layui-input"> </div> </div> </div> <div class="layui-col-md6"> <div class="layui-form-item"> <label class="layui-form-label layui-form-required">商品编号</label> <div class="layui-input-block"> <input id="matnr" name="matnr" placeholder="请输入商品编号" class="layui-input" lay-vertype="tips" lay-verify="required" required=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">规格</label> <div class="layui-input-block"> <input name="specs" placeholder="请输入代码" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">备注</label> <div class="layui-input-block"> <input name="memo" placeholder="请输入备注" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">单箱毛重</label> <div class="layui-input-block"> <input name="length" placeholder="请输入单箱毛重" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">单箱体积</label> <div class="layui-input-block"> <input name="threeCode" placeholder="请输入箱子尺寸" class="layui-input"> </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> <!-- 打印操作弹窗 --> <div id="printDataDiv" style="display: none;padding: 20px"> <div class="layui-form" style="text-align: center"> <hr> <!--单选框--> <div class="layui-form-item" style="display: inline-block; margin-bottom: 10px"> <input type="radio" name="selectTemplate" value="1" title="模板一" lay-filter="selectTemplateRadio" checked=""> <input type="radio" name="selectTemplate" value="2" title="模板二" lay-filter="selectTemplateRadio"> <input type="radio" name="selectTemplate" value="3" title="模板三" lay-filter="selectTemplateRadio"> </div> <fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;text-align: left;"> <legend>打印预览</legend> <div id="template-container" style="margin: 20px;text-align: center"> <!-- 预览图 1 --> <div id="template-preview-1" class="template-preview" style="display: inline-block"> <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> <tr style="height: 74px"> <td colspan="3" align="center" scope="col">商品编码</td> <td class="barcode" colspan="9" align="center" scope="col"> <img class="template-code template-barcode" src="" width="90%;"> <div style="letter-spacing: 2px;margin-top: 1px; text-align: center;"> <span>xxxxxx</span> </div> </td> </tr> <tr style="height: 74px"> <td align="center" colspan="3">商品</td> <td align="center" colspan="5">xxxxxx-xx/xx</td> <td align="center" colspan="2">备注</td> <td align="center" colspan="2">xx</td> </tr> </table> </div> <!-- 预览图 2 --> <div id="template-preview-2" class="template-preview" style="display: none"> <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> <tr style="height: 30px"> <td align="center" width="20%">商品</td> <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td> </tr> <tr style="height: 30px"> <td align="center" width="20%">备注</td> <td align="center" width="80%">xxxxxxxx</td> </tr> <tr style="height: 75px;"> <td align="center" colspan="2" width="100%" style="border: none"> <img class="template-code template-barcode" src="" width="80%"> <div style="letter-spacing: 2px;margin-top: 1px; text-align: center"> <span>xxxxxx</span> </div> </td> </tr> </table> </div> <!-- 预览图 3 --> <div id="template-preview-3" class="template-preview" style="display: none"> <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> <tr style="height: 74px"> <td align="center" scope="col" colspan="1">商品</td> <td align="center" scope="col" colspan="1" style="">xxxxxx-xx/xx</td> <td align="center" scope="col" colspan="2" rowspan="2"> <img class="template-code template-qrcode" src="" width="80%"> <div style="letter-spacing: 1px;margin-top: 1px; text-align: center"> <span>xxxxxx</span> </div> </td> </tr> <tr style="height: 74px"> <td align="center" colspan="1">备注</td> <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td> </tr> </table> </div> </div> </fieldset> <button class="layui-btn" id="doPrint" lay-submit lay-filter="doPrint" style="margin-top: 20px">确定</button> </div> </div> <div id="box" style="display: block"></div> <!-- 初始化打印模板的条形码 --> <script type="text/javascript"> $('.template-barcode').attr("src", baseUrl+"/mac/code/auth?type=1¶m=123"); $('.template-qrcode').attr("src", baseUrl+"/mac/code/auth?type=2¶m=123"); </script> <!-- 模板引擎 --> <!-- 模板1 --> <script type="text/template" id="templatePreview1" class="template-barcode"> {{#each data}} <table class="contain" width="280" style="overflow: hidden;font-size: small;table-layout: fixed;"> <tr style="height: 74px"> <td align="center" colspan="3" scope="col">商品编码</td> <td align="center" class="barcode" colspan="9" scope="col"> <img class="template-code" src="{{this.barcodeUrl}}" width="90%"> <div style="letter-spacing: 2px;margin-top: 1px; text-align: center"> <span>{{this.matnr}}</span> </div> </td> </tr> <tr style="height: 74px"> <td align="center" colspan="3">商品</td> <td align="center" colspan="5" style="overflow: hidden; white-space: nowrap;text-overflow: ellipsis;">{{this.maktx}}</td> <td align="center" colspan="2">备注</td> <td align="center" colspan="2">{{this.memo}}</td> </tr> </table> {{/each}} </script> <!-- 模板2 --> <script type="text/template" id="templatePreview2" class="template-barcode"> {{#each data}} <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> <tr style="height: 35px"> <td align="center" width="20%">商品</td> <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.maktx}}</td> </tr> <tr style="height: 35px"> <td align="center" width="20%">备注</td> <td align="center" width="80%">{{this.memo}}</td> </tr> <tr style="height: 79px;"> <td align="center" colspan="2" width="100%" style="border: none"> <img class="template-code" src="{{this.barcodeUrl}}" width="80%"> <div style="letter-spacing: 2px;margin-top: 1px; text-align: center"> <span>{{this.matnr}}</span> </div> </td> </tr> </table> {{/each}} </script> <!-- 模板3 --> <script type="text/template" id="templatePreview3" class="template-qrcode"> {{#each data}} <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> <tr style="height: 74px" > <td align="center" scope="col" colspan="1">商品</td> <td align="center" scope="col" colspan="1" style=" display: inline-block; line-height: 20px; vertical-align: middle; border: none; border-top: 1px solid #000; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; "> {{this.maktx}} </td> <td align="center" scope="col" colspan="2" rowspan="2"> <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%"> <div style="letter-spacing: 1px;margin-top: 1px; text-align: center"> <span>{{this.matnr}}</span> </div> </td> </tr> <tr style="height: 74px"> <td align="center" colspan="1">备注</td> <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.memo}}</td> </tr> </table> {{/each}} </script> </body> </html>