4
0
Fork 0
dcat-admin/resources/assets/dcat/extra/Grid/Orderable.js

111 lines
3.3 KiB
PHP

/**
* 行排序
*/
export default class Orderable {
constructor(Helper, opts) {
this.options = $.extend({
button: null,
url: '',
}, opts);
this.helper = Helper;
this.direction = this.key = this.depth = this.row = this._req = null;
this._init();
}
_init() {
let _this = this;
$(_this.options.button).off('click').click(function () {
if (_this._req) {
return;
}
_this._req = 1;
Dcat.loading();
let $this = $(this);
_this.key = $this.data('id');
_this.direction = $this.data('direction');
_this.row = $this.closest('tr');
_this.depth = _this.helper.getDepth(_this.row);
_this.request();
})
}
request() {
var _this = this,
helper = _this.helper,
key = _this.key,
row = _this.row,
depth = _this.depth,
direction = _this.direction,
prevAll = row.prevAll(),
nextAll = row.nextAll(),
prev = row.prevAll('tr').first(),
next = row.nextAll('tr').first();
$.put({
url: _this.options.url.replace(':key', key),
data: {_orderable: direction},
success: function(data){
Dcat.loading(false);
_this._req = 0;
if (! data.status) {
return data.data.message && Dcat.warning(data.data.message);
}
Dcat.success(data.data.message);
if (direction) {
var prevRow = helper.sibling(prevAll, depth);
if (helper.swapable(prevRow, depth) && prev.length && helper.getDepth(prev) >= depth) {
prevRow.before(row);
// 把所有子节点上移
helper.getChildren(nextAll, row).forEach(function (v) {
prevRow.before(v)
});
}
} else {
var nextRow = helper.sibling(nextAll, depth),
nextRowChildren = nextRow ? helper.getChildren(nextRow.nextAll(), nextRow) : [];
if (helper.swapable(nextRow, depth) && next.length && helper.getDepth(next) >= depth) {
nextAll = row.nextAll();
if (nextRowChildren.length) {
nextRow = $(nextRowChildren.pop())
}
// 把所有子节点下移
var all = [];
helper.getChildren(nextAll, row).forEach(function (v) {
all.unshift(v)
});
all.forEach(function(v) {
nextRow.after(v)
});
nextRow.after(row);
}
}
},
error: function (a, b, c) {
_this._req = 0;
Dcat.loading(false);
Dcat.handleAjaxError(a, b, c)
}
});
}
}