给商品扩展表增加‘是否默认基础单位’字段

This commit is contained in:
季圣华
2020-04-25 11:39:16 +08:00
parent 2965a441b7
commit 5774580b0b
9 changed files with 630 additions and 16 deletions

View File

@@ -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<indexs.length; i++){
$(this).datagrid('deleteRow', indexs[i]);
}
});
},
_setSelections: function(jq){
return jq.each(function(){
var rows = $(this).datagrid('getRows');
for(var i=0; i<rows.length; i++){
if (rows[i]._selected){
$(this).datagrid('selectRow', i);
rows[i]._selected = undefined;
}
}
});
},
clearInsertingFlag: function(jq){
return jq.each(function(){
var opts = $(this).datagrid('options');
if (opts.insertingIndex >= 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<disabledDroppingRows.length; i++){
var t = disabledDroppingRows[i];
var p = $(t).closest('div.datagrid-wrap');
if (p.length && p[0] == c){
my.push(t);
} else {
left.push(t);
}
}
disabledDroppingRows = left;
enableDroppable(my);
});
},
enableDnd: function(jq, index){
if (!$('#datagrid-dnd-style').length){
$('<style id="datagrid-dnd-style">' +
'.datagrid-row-top>td{border-top:1px solid red}' +
'.datagrid-row-bottom>td{border-bottom:1px solid red}' +
'</style>'
).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 = $('<div style="z-index:9999999999999"></div>').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'));
$('<td><span class="tree-dnd-icon tree-dnd-no" style="position:static">&nbsp;</span></td>').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<indexs.length; i++){
if (indexs[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<rows.length; i++){
rows[i]._selected = undefined;
}
if (opts.dragSelection){
if ($(tr).hasClass('datagrid-row-selected')){
var rows = $(target).datagrid('getSelections');
$.map(rows, function(row){
row._selected = true;
});
return rows;
}
}
var row = opts.finder.getRow(target, $(tr));
row._selected = $(tr).hasClass('datagrid-row-selected');
return row;
}
function setDroppable(target){
getDroppableBody(target).droppable(droppableOptions).droppable('enable');
}
function getDataGridTarget(el){
return $(el).closest('div.datagrid-view').children('table')[0];
}
function getDroppableBody(target){
var dc = $(target).data('datagrid').dc;
return dc.view;
}
function isValid(tr){
var opts = $(tr).droppable('options');
if (opts.disabled || opts.accept == 'no-accept'){
return false;
} else {
return true;
}
}
function setValid(rows, valid){
var accept = valid ? opts.dropAccept : 'no-accept';
$.map($.isArray(rows)?rows:[rows], function(row){
var index = $(target).datagrid('getRowIndex', row);
opts.finder.getTr(target, index).droppable({accept:accept});
});
}
});
},
disableDnd: function(jq){
return jq.each(function(){
var target = this;
var state = $.data(this, 'datagrid');
var dg = $(this);
var opts = state.options;
var trs = opts.finder.getTr(this, 0, 'allbody');
trs.draggable('disable');
trs.droppable('disable');
});
}
});
})(jQuery);

View File

@@ -15,6 +15,7 @@
<link type="text/css" rel="stylesheet" href="/css/material.css"/>
<script type="text/javascript" src="/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="/js/easyui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="/js/easyui/datagrid-dnd.js"></script>
<script src="/js/handlebars.js"></script>
<script type="text/javascript" src="/js/common/outlook_in.js"></script>
<script type="text/javascript" src="/js/common/common.js"></script>
@@ -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<meList.length;i++) {
var sortObj = {};
if(meList[i].Id) {
sortObj.id=meList[i].Id;
if(i==0) {
sortObj.defaultFlag=1;
} else {
sortObj.defaultFlag=0;
}
sortList.push(sortObj);
}
}
objInfo.sortList = sortList;
if ($("#materialExtendData").datagrid('getChanges').length) {
if (!CheckData())
return false;