فهرست منبع

上下移fullPath计算调整

MaiXinRong 3 سال پیش
والد
کامیت
48a8e2e1d6
1فایلهای تغییر یافته به همراه11 افزوده شده و 8 حذف شده
  1. 11 8
      app/base/base_tree_service.js

+ 11 - 8
app/base/base_tree_service.js

@@ -737,7 +737,7 @@ class TreeService extends Service {
             selfOperate: '-',
         });
         this.sqlBuilder.setUpdateData(this.setting.fullPath, {
-            value: [this.setting.fullPath, this.db.escape(select[this.setting.pid] + '-'), this.db.escape('')],
+            value: [this.setting.fullPath, this.db.escape(`-${select[this.setting.pid]}-`), this.db.escape('-')],
             literal: 'Replace',
         });
         const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
@@ -842,7 +842,7 @@ class TreeService extends Service {
                 updateData[this.setting.pid] = parent[this.setting.pid];
                 updateData[this.setting.order] = parent[this.setting.order] + i + 1;
                 updateData[this.setting.level] = s[this.setting.level] - 1;
-                updateData[this.setting.fullPath] = s[this.setting.fullPath].replace(s[this.setting.pid] + '-', '');
+                updateData[this.setting.fullPath] = s[this.setting.fullPath].replace(`-${s[this.setting.pid]}-`, '-');
                 newPath.push(updateData[this.setting.fullPath]);
                 if (s.is_leaf && s.id === last.id) {
                     const nexts = await this.getNextsData(mid, parent[this.setting.kid], last[this.setting.order]);
@@ -881,7 +881,7 @@ class TreeService extends Service {
      * @return {Promise<*>}
      * @private
      */
-    async _syncDownlevelChildren(select, pre) {
+    async _syncDownlevelChildren(select, newFullPath) {
         this.initSqlBuilder();
         this.sqlBuilder.setAndWhere(this.setting.mid, {
             value: select[this.setting.mid],
@@ -896,7 +896,7 @@ class TreeService extends Service {
             selfOperate: '+',
         });
         this.sqlBuilder.setUpdateData(this.setting.fullPath, {
-            value: [this.setting.fullPath, this.db.escape(select[this.setting.kid] + '-'), this.db.escape(pre[this.setting.kid] + '-' + select[this.setting.kid] + '-')],
+            value: [this.setting.fullPath, this.db.escape(select[this.setting.fullPath] + '-'), this.db.escape(newFullPath + '-')],
             literal: 'Replace',
         });
         const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
@@ -933,13 +933,16 @@ class TreeService extends Service {
                 updateData[this.setting.pid] = pre[this.setting.kid];
                 updateData[this.setting.order] = preLastChild ? preLastChild[this.setting.order] + i + 1 : i + 1;
                 updateData[this.setting.level] = s[this.setting.level] + 1;
-                const orgLastPath = s[this.setting.level] === 1 ? s[this.setting.kid] : '-' + s[this.setting.kid];
-                const newLastPath = s[this.setting.level] === 1 ? pre[this.setting.kid] + '-' + s[this.setting.kid] : '-' + pre[this.setting.kid] + '-' + s[this.setting.kid];
-                updateData[this.setting.fullPath] = s[this.setting.fullPath].replace(orgLastPath, newLastPath);
+                if (s[this.setting.level] === 1) {
+                    updateData[this.setting.fullPath] = pre[this.setting.kid] + '-' + s[this.setting.kid];
+                } else {
+                    const index = s[this.setting.fullPath].lastIndexOf(s[this.setting.kid]);
+                    updateData[this.setting.fullPath] = s[this.setting.fullPath].substring(0, index) + '-' + pre[this.setting.kid] + '-' + s[this.setting.kid];
+                }
                 newPath.push(updateData[this.setting.fullPath]);
                 await this.transaction.update(this.tableName, updateData);
                 // 选中节点--全部子节点(含孙) level++, full_path
-                await this._syncDownlevelChildren(s, pre);
+                await this._syncDownlevelChildren(s, updateData[this.setting.fullPath]);
             }
             // 选中节点--前兄弟节点 is_leaf应为false, 清空计算相关字段
             const updateData2 = { id: pre.id };