|
@@ -96,8 +96,13 @@ module.exports = app => {
|
|
|
}
|
|
|
|
|
|
async getLastChild(tree_pid) {
|
|
|
- const result = await this.getAllDataByCondition({ where: { tree_pid }, orders: [['tree_order', 'desc']], limit: 1, offset: 0 });
|
|
|
- return result[0];
|
|
|
+ if (tree_pid === -1) {
|
|
|
+ const result = await this.getAllDataByCondition({ where: { tree_pid, project_id: this.ctx.session.sessionProject.id }, orders: [['tree_order', 'asc']], limit: 1, offset: 0 });
|
|
|
+ return result[0];
|
|
|
+ } else {
|
|
|
+ const result = await this.getAllDataByCondition({ where: { tree_pid }, orders: [['tree_order', 'asc']], limit: 1, offset: 0 });
|
|
|
+ return result[0];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
async getPosterityData(id){
|
|
@@ -122,7 +127,7 @@ module.exports = app => {
|
|
|
step = step + 1;
|
|
|
}
|
|
|
}
|
|
|
- return await this.getAllDataByCondition({ where: { tree_pid: node.tree_pid, tree_order }, orders: [['tree_order', 'desc']]});
|
|
|
+ return await this.getAllDataByCondition({ where: { tree_pid: node.tree_pid, tree_order, project_id: this.ctx.session.sessionProject.id }, orders: [['tree_order', 'desc']]});
|
|
|
}
|
|
|
|
|
|
async addFolder(data) {
|
|
@@ -237,6 +242,34 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async _siblingMoveForce(node, step) {
|
|
|
+ const sibling = await this.getAllDataByCondition({ where: { tree_pid: node.tree_pid, project_id: this.ctx.session.sessionProject.id }, orders: [['tree_order', 'asc']] });
|
|
|
+ const nodeIndex = sibling.findIndex(x => { return x.id === node.id });
|
|
|
+ if (nodeIndex + step < 0) throw '移动数据结构错误';
|
|
|
+ if (nodeIndex + step > sibling.length - 1) throw '移动数据结构错误';
|
|
|
+
|
|
|
+ const conn = await this.db.beginTransaction();
|
|
|
+ try {
|
|
|
+ const updateData = [];
|
|
|
+ updateData.push({ id: node.id, tree_order: sibling[nodeIndex + step].tree_order });
|
|
|
+ while(step) {
|
|
|
+ const stepNode = sibling[nodeIndex + step];
|
|
|
+ if (step > 0) {
|
|
|
+ updateData.push({ id: stepNode.id, tree_order: sibling[nodeIndex + step - 1].tree_order });
|
|
|
+ step = step - 1;
|
|
|
+ } else {
|
|
|
+ updateData.push({ id: stepNode.id, tree_order: sibling[nodeIndex + step + 1].tree_order});
|
|
|
+ step = step + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await conn.updateRows(this.tableName, updateData);
|
|
|
+ await conn.commit();
|
|
|
+ } catch (error) {
|
|
|
+ await conn.rollback();
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
async _topMove(node) {
|
|
|
const lastChild = await this.getLastChild(-1);
|
|
|
const posterity = await this.getPosterityData(node.id);
|
|
@@ -265,8 +298,8 @@ module.exports = app => {
|
|
|
if (!node) throw '移动数据结构错误';
|
|
|
|
|
|
switch(data.type) {
|
|
|
- case 'up': await this._siblingMove(node, -1); break;
|
|
|
- case 'down': await this._siblingMove(node, 1); break;
|
|
|
+ case 'up': await this._siblingMoveForce(node, -1); break;
|
|
|
+ case 'down': await this._siblingMoveForce(node, 1); break;
|
|
|
case 'top': await this._topMove(node); break;
|
|
|
default: throw '未知移动类型';
|
|
|
}
|