Browse Source

合同树新增子节点功能

ellisran 10 months ago
parent
commit
e7a672106d

+ 3 - 0
app/controller/contract_controller.js

@@ -273,6 +273,7 @@ module.exports = app => {
                 options.contract_type = ctx.contract_type;
                 switch (data.postType) {
                     case 'add':
+                    case 'add-child':
                     case 'delete':
                     case 'up-move':
                     case 'down-move':
@@ -330,6 +331,8 @@ module.exports = app => {
             switch (type) {
                 case 'add':
                     return await ctx.service.contractTree.addNodeBatch(options, data.id, data.count);
+                case 'add-child':
+                    return await ctx.service.contractTree.addChildNode(options, data.id, data.count);
                 case 'delete':
                     return await ctx.service.contractTree.delete(options, data.id, data.count);
                 case 'up-move':

+ 23 - 2
app/public/js/contract_detail.js

@@ -136,6 +136,7 @@ $(document).ready(function() {
             };
             const invalidAll = function () {
                 setObjEnable($('a[name=base-opr][type=add]'), false);
+                setObjEnable($('a[name=base-opr][type=add-child]'), false);
                 setObjEnable($('a[name=base-opr][type=delete]'), false);
                 setObjEnable($('a[name=base-opr][type=up-move]'), false);
                 setObjEnable($('a[name=base-opr][type=down-move]'), false);
@@ -190,6 +191,7 @@ $(document).ready(function() {
             const valid = !sheet.zh_setting.readOnly;
 
             setObjEnable($('a[name=base-opr][type=add]'), valid && first && first.level > 1);
+            setObjEnable($('a[name=base-opr][type=add-child]'), valid && first && !first.c_code && first.level >= 1);
             setObjEnable($('a[name=base-opr][type=delete]'), valid && first && sameParent && first.level > 1 && childCanDel && this.checkDelete(first));
             setObjEnable($('a[name=base-opr][type=up-move]'), valid && first && sameParent && first.level > 1 && preNode);
             setObjEnable($('a[name=base-opr][type=down-move]'), valid && first && sameParent && first.level > 1 && !tree.isLastSibling(last));
@@ -504,7 +506,7 @@ $(document).ready(function() {
                             sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
                             SpreadJsObj.reloadRowsBackColor(sheet, [sel.row, tree.nodes.indexOf(node)]);
                         }
-                    } else if (type === 'add') {
+                    } else if (type === 'add' || type === 'add-child') {
                         const sel = sheet.getSelections()[0];
                         if (sel) {
                             sheet.setSelection(tree.nodes.indexOf(refreshData.create[0]), sel.col, sel.rowCount, sel.colCount);
@@ -863,7 +865,7 @@ $(document).ready(function() {
 
         contractContextMenuOptions.items.create = {
             name: '新增节点',
-            icon: 'fa-sign-in',
+            icon: 'fa-plus',
             callback: function (key, opt) {
                 contractTreeSpreadObj.baseOpr(contractSheet, 'add');
             },
@@ -879,6 +881,25 @@ $(document).ready(function() {
                 return !(valid && first && first.level > 1);
             }
         };
+
+        contractContextMenuOptions.items.create3 = {
+            name: '新增子节点',
+            icon: 'fa-sign-in',
+            callback: function (key, opt) {
+                contractTreeSpreadObj.baseOpr(contractSheet, 'add-child');
+            },
+            disabled: function (key, opt) {
+                const sheet = contractSheet;
+                const selection = sheet.getSelections();
+                const sel = selection ? selection[0] : sheet.getSelections()[0];
+                const row = sel ? sel.row : -1;
+                const tree = sheet.zh_tree;
+                if (!tree) return true;
+                const first = sheet.zh_tree.nodes[row];
+                const valid = !sheet.zh_setting.readOnly;
+                return !(valid && first && !first.c_code && first.level >= 1);
+            }
+        };
     }
     if (permission_add) {
         contractContextMenuOptions.items.create2 = {

+ 47 - 0
app/service/contract_tree.js

@@ -292,6 +292,53 @@ module.exports = app => {
             }
         }
 
+        async addChildNode(options, kid, count = 1) {
+            if (!options[this.setting.type]) throw '参数有误';
+            const select = kid ? await this.getDataByKid(options, kid) : null;
+            if (!select) throw '新增子节点数据错误';
+            if (select && select.c_code) throw '合同无法新增子节点';
+
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 判断select的父节点是否是变更新增的,如果是则修改自己的表就行了,否则修改2个ledger,changeLedger表
+                // if (select) await this._updateChildrenOrder(options, select[this.setting.pid], select[this.setting.order] + 1, count, transaction);
+                const maxOrder = await this.ctx.service.contract.getMaxOrder(options, select[this.setting.kid], transaction);
+                const newDatas = [];
+                const maxId = await this._getMaxLid(options);
+                for (let i = 1; i < count + 1; i++) {
+                    const newData = [];
+                    if (this.setting.uuid) newData.id = this.uuid.v4();
+                    newData[this.setting.kid] = maxId + i;
+                    newData[this.setting.pid] = select[this.setting.kid];
+                    newData[this.setting.spid] = options.spid || null;
+                    newData[this.setting.type] = options[this.setting.type];
+                    newData[this.setting.mid] = options.tid || null;
+                    newData[this.setting.level] = select[this.setting.level] + 1;
+                    newData[this.setting.order] = maxOrder + i;
+                    newData[this.setting.fullPath] = select[this.setting.fullPath] + '-' + newData[this.setting.kid];
+                    newData[this.setting.isLeaf] = true;
+                    newDatas.push(newData);
+                }
+                const insertResult = await transaction.insert(this.tableName, newDatas);
+                this._cacheMaxLid(options, maxId + count);
+
+                if (insertResult.affectedRows !== count) throw '新增子节点数据错误';
+                if (select[this.setting.isLeaf]) {
+                    select.is_leaf = 0;
+                    await transaction.update(this.tableName, { id: select.id, is_leaf: 0 });
+                }
+
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+
+            let createData = await this.getLastChildData(options, select[this.setting.kid]);
+            let updateData = select;
+            return { create: createData, update: updateData };
+        }
+
         /**
          *  tenderId标段中, 删除选中节点及其子节点
          *

+ 1 - 0
app/view/contract/detail.ejs

@@ -22,6 +22,7 @@
             <% if (ctx.session.sessionUser.is_admin || audit_permission.permission_edit) { %>
                 <div class="d-inline-block">
                     <a href="javascript: void(0);" name="base-opr" type="add" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增"><i class="fa fa-plus" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" name="base-opr" type="add-child" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增子节点"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="delete" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="up-level" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="down-level" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>