diff --git a/docs/数据库更新记录-方便升级.txt b/docs/数据库更新记录-方便升级.txt index e4805552..a8746712 100644 --- a/docs/数据库更新记录-方便升级.txt +++ b/docs/数据库更新记录-方便升级.txt @@ -763,4 +763,11 @@ alter table jsh_user change loginame login_name varchar(255) NOT NULL COMMENT ' -- by jishenghua -- 给功能表增加插件管理 -- ---------------------------- -INSERT INTO `jsh_functions` VALUES (245,'000107', '插件管理', '0001', '/pages/manage/plugin.html', '\0', '0170', '', '电脑版', '', 'icon-notebook', '0'); \ No newline at end of file +INSERT INTO `jsh_functions` VALUES (245,'000107', '插件管理', '0001', '/pages/manage/plugin.html', '\0', '0170', '', '电脑版', '', 'icon-notebook', '0'); + +-- ---------------------------- +-- 时间:2020年04月25日 +-- by jishenghua +-- 给商品扩展表增加 是否默认基础单位 字段 +-- ---------------------------- +alter table jsh_material_extend add default_flag VARCHAR(1) DEFAULT 1 COMMENT '是否为默认单位,1是,0否' after low_decimal; diff --git a/erp_web/js/easyui/datagrid-dnd.js b/erp_web/js/easyui/datagrid-dnd.js new file mode 100644 index 00000000..a15d159f --- /dev/null +++ b/erp_web/js/easyui/datagrid-dnd.js @@ -0,0 +1,448 @@ +(function($){ + $.extend($.fn.datagrid.defaults, { + dropAccept: 'tr.datagrid-row', + dragSelection: false, + dragDelay: 100, + onBeforeDrag: function(row){}, // return false to deny drag + onStartDrag: function(row){}, + onStopDrag: function(row){}, + onDragEnter: function(targetRow, sourceRow){}, // return false to deny drop + onDragOver: function(targetRow, sourceRow){}, // return false to deny drop + onDragLeave: function(targetRow, sourceRow){}, + onBeforeDrop: function(targetRow, sourceRow, point){}, + onDrop: function(targetRow, sourceRow, point){}, // point:'append','top','bottom' + }); + $.extend($.fn.datagrid.methods, { + _appendRows: function(jq, row){ + return jq.each(function(){ + var dg = $(this); + var rows = $.isArray(row) ? row : [row]; + $.map(rows, function(row){ + dg.datagrid('appendRow', row).datagrid('enableDnd', dg.datagrid('getRows').length-1); + }); + }); + }, + _insertRows: function(jq, param){ + return jq.each(function(){ + var dg = $(this); + var index = param.index; + var row = param.row; + var rows = $.isArray(row) ? row : [row]; + $.map(rows, function(row, i){ + dg.datagrid('insertRow', { + index: (index+i), + row: row + }).datagrid('enableDnd', index+i); + }); + }); + }, + _getRowIndexs: function(jq, row){ + var dg = jq; + var rows = $.isArray(row) ? row : [row]; + var indexs = $.map(rows, function(row){ + return dg.datagrid('getRowIndex', row); + }); + return $.grep(indexs, function(index){ + if (index >= 0){return true;} + }); + }, + _deleteRows: function(jq, indexs){ + return jq.each(function(){ + // sort desc + indexs.sort(function(x,y){ + if (parseInt(x)>parseInt(y)){ + return -1; + } else { + return 1; + } + }); + for(var i=0; i= 0){ + var tr = opts.finder.getTr(this, opts.insertingIndex); + tr.removeClass('datagrid-row-top datagrid-row-bottom'); + opts.insertingIndex = -1; + } + }); + } + }); + + var disabledDroppingRows = []; + + function enableDroppable(aa){ + $.map(aa, function(row){ + $(row).droppable('enable'); + }); + } + + $.extend($.fn.datagrid.methods, { + resetDroppable: function(jq){ + return jq.each(function(){ + var c = $(this).datagrid('getPanel')[0]; + var my = []; + var left = []; + for(var i=0; i' + + '.datagrid-row-top>td{border-top:1px solid red}' + + '.datagrid-row-bottom>td{border-bottom:1px solid red}' + + '' + ).appendTo('head'); + } + return jq.each(function(){ + var target = this; + var state = $.data(this, 'datagrid'); + var dg = $(this); + var opts = state.options; + + var draggableOptions = { + disabled: false, + revert: true, + cursor: 'pointer', + proxy: function(source) { + var p = $('
').appendTo('body'); + var draggingRow = getDraggingRow(source); + var rows = $.isArray(draggingRow) ? draggingRow : [draggingRow]; + $.map(rows, function(row,i){ + var index = dg.datagrid('getRowIndex', row); + var tr1 = opts.finder.getTr(target, index, 'body', 1); + var tr2 = opts.finder.getTr(target, index, 'body', 2); + tr2.clone().removeAttr('id').removeClass('droppable').appendTo(p); + tr1.clone().removeAttr('id').removeClass('droppable').find('td').insertBefore(p.find('tr:eq('+i+') td:first')); + $(' ').insertBefore(p.find('tr:eq('+i+') td:first')); + }); + p.find('td').css('vertical-align','middle'); + p.hide(); + return p; + }, + deltaX: 15, + deltaY: 15, + delay: opts.dragDelay, + onBeforeDrag:function(e){ + var draggingRow = getDraggingRow(this); + if (opts.onBeforeDrag.call(target, draggingRow) == false){return false;} + if ($(e.target).parent().hasClass('datagrid-cell-check')){return false;} + if (e.which != 1){return false;} + }, + onStartDrag: function() { + $(this).draggable('proxy').css({ + left: -10000, + top: -10000 + }); + var draggingRow = getDraggingRow(this); + setValid(draggingRow, false); + state.draggingRow = draggingRow; + opts.onStartDrag.call(target, draggingRow); + }, + onDrag: function(e) { + var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY; + var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); + if (d>3){ // when drag a little distance, show the proxy object + $(this).draggable('proxy').show(); + var tr = opts.finder.getTr(target, parseInt($(this).attr('datagrid-row-index')), 'body'); + $.extend(e.data, { + startX: tr.offset().left, + startY: tr.offset().top, + offsetWidth: 0, + offsetHeight: 0 + }); + } + this.pageY = e.pageY; + }, + onEndDrag: function(e){ + var dd = $(this).data('draggable').droppables.filter(function(){ + var dropObj = $(this); + if (dropObj.droppable('options').disabled){return false;} + if (dropObj.hasClass('datagrid-row') && !dropObj.hasClass('datagrid-row-over')){ + return false; + } + var p2 = dropObj.offset(); + if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth() + && e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){ + return true; + } else { + return false; + } + }); + var trs = dd.filter(function(){ + return $(this).hasClass('datagrid-row'); + }); + if (trs.length){ + dd = trs; + } + $(this).data('draggable').droppables = dd; + }, + onStopDrag:function(){ + enableDroppable(disabledDroppingRows); + disabledDroppingRows = []; + setValid(state.draggingRow, true); + opts.onStopDrag.call(target, state.draggingRow); + } + }; + var droppableOptions = { + disabled: false, + accept: opts.dropAccept, + onDragEnter: function(e, source){ + if ($(this).droppable('options').disabled){return;} + var dTarget = getDataGridTarget(this); + var dOpts = $(dTarget).datagrid('options'); + var tr = dOpts.finder.getTr(dTarget, null, 'highlight'); + var sRow = getDraggingRow(source); + var dRow = getRow(this); + if (tr.length && dRow){ + cb(); + } + + function cb(){ + if (opts.onDragEnter.call(target, dRow, sRow) == false){ + $(dTarget).datagrid('clearInsertingFlag'); + tr.droppable('disable'); + tr.each(function(){ + disabledDroppingRows.push(this); + }); + } + } + }, + onDragOver: function(e, source) { + if ($(this).droppable('options').disabled){ + return; + } + if ($.inArray(this, disabledDroppingRows) >= 0){ + return; + } + var dTarget = getDataGridTarget(this); + var dOpts = $(dTarget).datagrid('options'); + var tr = dOpts.finder.getTr(dTarget, null, 'highlight'); + if (tr.length){ + if (!isValid(tr)){ + setProxyFlag(source, false); + return; + } + } + setProxyFlag(source, true); + + var sRow = getDraggingRow(source); + var dRow = getRow(this); + if (tr.length){ + var pageY = source.pageY; + var top = tr.offset().top; + var bottom = tr.offset().top + tr.outerHeight(); + $(dTarget).datagrid('clearInsertingFlag'); + dOpts.insertingIndex = tr.attr('datagrid-row-index'); + if (pageY > top + (bottom - top) / 2) { + tr.addClass('datagrid-row-bottom'); + } else { + tr.addClass('datagrid-row-top'); + } + if (dRow){ + cb(); + } + } + + function cb(){ + if (opts.onDragOver.call(target, dRow, sRow) == false){ + setProxyFlag(source, false); + $(dTarget).datagrid('clearInsertingFlag'); + tr.droppable('disable'); + tr.each(function(){ + disabledDroppingRows.push(this); + }); + } + } + }, + onDragLeave: function(e, source) { + if ($(this).droppable('options').disabled){ + return; + } + setProxyFlag(source, false); + var dTarget = getDataGridTarget(this); + $(dTarget).datagrid('clearInsertingFlag'); + var sRow = getDraggingRow(source); + var dRow = getRow(this); + if (dRow){ + opts.onDragLeave.call(target, dRow, sRow); + } + }, + onDrop: function(e, source) { + if ($(this).droppable('options').disabled){ + return; + } + var sTarget = getDataGridTarget(source); + var dTarget = getDataGridTarget(this); + var dOpts = $(dTarget).datagrid('options'); + var tr = dOpts.finder.getTr(dTarget, null, 'highlight'); + + var point = null; + var sRow = getDraggingRow(source); + var dRow = null; + if (tr.length){ + if (!isValid(tr)){ + return; + } + point = tr.hasClass('datagrid-row-top') ? 'top' : 'bottom'; + dRow = getRow(tr); + } + + $(dTarget).datagrid('clearInsertingFlag'); + if (opts.onBeforeDrop.call(target, dRow, sRow, point) == false){ + return; + } + insert.call(this); + opts.onDrop.call(target, dRow, sRow, point); + + function insert(){ + var destIndex = parseInt(tr.attr('datagrid-row-index')); + + if (!point){ + var indexs = $(sTarget).datagrid('_getRowIndexs', sRow); + $(dTarget).datagrid('_appendRows', sRow); + $(sTarget).datagrid('_deleteRows', indexs); + $(dTarget).datagrid('_setSelections'); + } else if (dTarget != sTarget){ + var index = point == 'top' ? destIndex : (destIndex+1); + if (index >= 0){ + var indexs = $(sTarget).datagrid('_getRowIndexs', sRow); + $(dTarget).datagrid('_insertRows', { + index: index, + row: sRow + }); + $(sTarget).datagrid('_deleteRows', indexs); + $(dTarget).datagrid('_setSelections'); + } + } else { + var dg = $(dTarget); + var index = point == 'top' ? destIndex : (destIndex+1); + if (index >= 0){ + var indexs = dg.datagrid('_getRowIndexs', sRow); + var destIndex = parseInt(tr.attr('datagrid-row-index')); + var index = point == 'top' ? destIndex : (destIndex+1); + if (index >= 0){ + dg.datagrid('_insertRows', { + index: index, + row: sRow + }); + for(var i=0; i index){ + indexs[i] += indexs.length; + } + } + dg.datagrid('_deleteRows', indexs); + dg.datagrid('_setSelections'); + } + } + } + } + } + } + + if (index != undefined){ + var trs = opts.finder.getTr(this, index); + } else { + var trs = opts.finder.getTr(this, 0, 'allbody'); + } + trs.draggable(draggableOptions); + trs.droppable(droppableOptions); + setDroppable(target); + + function setProxyFlag(source, allowed){ + var icon = $(source).draggable('proxy').find('span.tree-dnd-icon'); + icon.removeClass('tree-dnd-yes tree-dnd-no').addClass(allowed ? 'tree-dnd-yes' : 'tree-dnd-no'); + } + function getRow(tr){ + if (!$(tr).hasClass('datagrid-row')){return null} + var target = $(tr).closest('div.datagrid-view').children('table')[0]; + var opts = $(target).datagrid('options'); + return opts.finder.getRow(target, $(tr)); + } + function getDraggingRow(tr){ + if (!$(tr).hasClass('datagrid-row')){return null} + var target = getDataGridTarget(tr); + var opts = $(target).datagrid('options'); + var rows = $(target).datagrid('getRows'); + for(var i=0; i + @@ -1090,9 +1091,21 @@ { reject(); //撤销 } + }, + { + id:'tips', + text:'【注意:基础单位必须排在第一个】' } ], - + onBeforeDrag : function(row) { + //首次进来可以拖动 + if (editIndex !== undefined) { + return false; + } + }, + onLoadSuccess:function(){ + $(this).datagrid('enableDnd'); + }, onLoadError:function() { $.messager.alert('页面加载提示','页面加载异常,请稍后再试!','error'); @@ -1646,6 +1659,8 @@ function accept(objInfo) { append(0); removeit(); + //在更新商品信息的时候更新排序 + var sortList = []; //判断单位是否填写正确 var meList = $("#materialExtendData").datagrid('getRows'); var unit = $("#Unit").val(); @@ -1666,6 +1681,19 @@ } } } + for(var i=0; i", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagGreaterThan(String value) { + addCriterion("default_flag >", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagGreaterThanOrEqualTo(String value) { + addCriterion("default_flag >=", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLessThan(String value) { + addCriterion("default_flag <", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLessThanOrEqualTo(String value) { + addCriterion("default_flag <=", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLike(String value) { + addCriterion("default_flag like", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotLike(String value) { + addCriterion("default_flag not like", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagIn(List values) { + addCriterion("default_flag in", values, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotIn(List values) { + addCriterion("default_flag not in", values, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagBetween(String value1, String value2) { + addCriterion("default_flag between", value1, value2, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotBetween(String value1, String value2) { + addCriterion("default_flag not between", value1, value2, "defaultFlag"); + return (Criteria) this; + } + public Criteria andCreateTimeIsNull() { addCriterion("create_time is null"); return (Criteria) this; diff --git a/src/main/java/com/jsh/erp/service/MaterialExtend/MaterialExtendService.java b/src/main/java/com/jsh/erp/service/MaterialExtend/MaterialExtendService.java index 6009c63a..f6078fa4 100644 --- a/src/main/java/com/jsh/erp/service/MaterialExtend/MaterialExtendService.java +++ b/src/main/java/com/jsh/erp/service/MaterialExtend/MaterialExtendService.java @@ -75,7 +75,7 @@ public class MaterialExtendService { } @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public String saveDetials(String inserted, String deleted, String updated,Long materialId) throws Exception { + public String saveDetials(String inserted, String deleted, String updated, String sortList, Long materialId) throws Exception { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); logService.insertLog("商品价格扩展", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); @@ -83,6 +83,7 @@ public class MaterialExtendService { JSONArray insertedJson = JSONArray.parseArray(inserted); JSONArray deletedJson = JSONArray.parseArray(deleted); JSONArray updatedJson = JSONArray.parseArray(updated); + JSONArray sortJson = JSONArray.parseArray(sortList); if (null != insertedJson) { for (int i = 0; i < insertedJson.size(); i++) { MaterialExtend materialExtend = new MaterialExtend(); @@ -143,7 +144,39 @@ public class MaterialExtendService { if (StringUtils.isNotEmpty(tempUpdatedJson.getString("LowDecimal"))) { materialExtend.setLowDecimal(tempUpdatedJson.getBigDecimal("LowDecimal")); } - this.updateMaterialExtend(materialExtend, request); + this.updateMaterialExtend(materialExtend); + } + } + //处理条码的排序,基础单位排第一个 + if (null != sortJson && sortJson.size()>0) { + //此处为更新的逻辑 + for (int i = 0; i < sortJson.size(); i++) { + JSONObject tempSortJson = JSONObject.parseObject(sortJson.getString(i)); + MaterialExtend materialExtend = new MaterialExtend(); + if(StringUtil.isExist(tempSortJson.get("id"))) { + materialExtend.setId(tempSortJson.getLong("id")); + } + if(StringUtil.isExist(tempSortJson.get("defaultFlag"))) { + materialExtend.setDefaultFlag(tempSortJson.getString("defaultFlag")); + } + this.updateMaterialExtend(materialExtend); + } + } else { + //新增的时候将第一条记录设置为默认基础单位 + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List meList = materialExtendMapper.selectByExample(example); + if(meList!=null) { + for(int i=0; i + @@ -77,7 +78,8 @@ id, material_id, bar_code, commodity_unit, purchase_decimal, commodity_decimal, wholesale_decimal, - low_decimal, create_time, create_serial, update_serial, update_time, tenant_id, delete_Flag + low_decimal, default_flag, create_time, create_serial, update_serial, update_time, + tenant_id, delete_Flag