111 lines
3.3 KiB
PHP
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)
|
|
}
|
|
});
|
|
}
|
|
} |