Переглянути джерело

签约清单,可双击添加至台账

MaiXinRong 6 роки тому
батько
коміт
be81681cb4

+ 33 - 0
app/controller/ledger_controller.js

@@ -371,6 +371,39 @@ module.exports = app => {
         }
 
         /**
+         * 从签约清单添加节点
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async addFromDealBills(ctx) {
+            try {
+                if (ctx.tender.ledgerReadOnly) {
+                    throw '数据错误';
+                }
+                const data = JSON.parse(ctx.request.body.data);
+                if ((isNaN(data.id) || data.id <= 0) || !data.type || !data.dealBills) {
+                    throw '参数错误';
+                }
+                let result;
+                if (data.type === 'child') {
+                    result = await ctx.service.ledger.addChild(ctx.tender.id, data.id, data.dealBills);
+                } else if (data.type === 'next') {
+                    result = await ctx.service.ledger.addNode(ctx.tender.id, data.id, data.dealBills);
+                } else {
+                    throw '参数错误';
+                }
+                ctx.body = {err: 0, msg: '', data: result};
+            } catch (err) {
+                this.log(err);
+                if (err.stack) {
+                    ctx.body = {err: 1, msg: '未知错误', data: null};
+                } else {
+                    ctx.body = {err: 1, msg: err, data: null};
+                }
+            }
+        }
+
+        /**
          * 批量插入数据 (Ajax)
          *
          * data = {id, batchData, batchType}

+ 3 - 1
app/middleware/tender_check.js

@@ -8,7 +8,7 @@
  * @version
  */
 
-const auditConst = require('../const/audit').flow;
+const auditConst = require('../const/audit').ledger;
 
 module.exports = options => {
     /**
@@ -44,6 +44,8 @@ module.exports = options => {
             if (tender.data.project_id !== this.session.sessionProject.id) {
                 throw '您无权查看该项目';
             }
+            tender.ledgerReadOnly = this.session.sessionUser.accountId !== tender.data.user_id ||
+                tender.ledger_status === auditConst.status.checking || tender.ledger_status === auditConst.status.checked;
             this.tender = tender;
             yield next;
         } catch (err) {

+ 42 - 20
app/public/js/ledger.js

@@ -426,10 +426,9 @@ $(document).ready(function() {
                 block: block,
             }, function (data) {
                 pos.updateDatas(data.pos);
-                tree.loadPostData(data.ledger, function (result) {
-                    self.refreshTree(sheet, result);
-                    self.refreshOperationValid(sheet);
-                });
+                const result = tree.loadPostData(data.ledger);
+                self.refreshTree(sheet, result);
+                self.refreshOperationValid(sheet);
             });
         },
         selectionChanged: function (e, info) {
@@ -701,9 +700,8 @@ $(document).ready(function() {
                     } else {
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     }
-                    ledgerTree.loadPostData(result.ledger, function (loadResult) {
-                        treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
-                    });
+                    const loadResult = ledgerTree.loadPostData(result.ledger);
+                    treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
                     treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet());
                 }, function () {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -739,9 +737,8 @@ $(document).ready(function() {
                 postData('/tender/' + getTenderId() + '/pos/update', {updateType: 'update', updateData: datas}, function (result) {
                     pos.updateDatas(result.pos);
                     posOperationObj.loadCurPosData();
-                    ledgerTree.loadPostData(result.ledger, function (loadResult) {
-                        treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
-                    });
+                    const loadResult = ledgerTree.loadPostData(result.ledger);
+                    treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
                     treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet());
                 }, function () {
                     posOperationObj.loadCurPosData();
@@ -766,9 +763,8 @@ $(document).ready(function() {
             postData('/tender/' + getTenderId() + '/pos/update', data, function (result) {
                 pos.removeDatas(result.pos);
                 sheet.deleteRows(row, count);
-                ledgerTree.loadPostData(result.ledger, function (loadResult) {
-                    treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
-                });
+                const loadResult = ledgerTree.loadPostData(result.ledger);
+                treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
                 treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet());
             });
         },
@@ -816,9 +812,8 @@ $(document).ready(function() {
                 postData('/tender/' + getTenderId() + '/pos/paste', data, function (result) {
                     pos.updateDatas(result.pos);
                     posOperationObj.loadCurPosData();
-                    ledgerTree.loadPostData(result.ledger, function (loadResult) {
-                        treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
-                    });
+                    const loadResult = ledgerTree.loadPostData(result.ledger);
+                    treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
                     posOperationObj.loadCurPosData();
                     treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet());
                 });
@@ -1062,6 +1057,34 @@ $(document).ready(function() {
             this.spreadSetting = spreadSetting;
             this.spread = SpreadJsObj.createNewSpread(this.obj);
             SpreadJsObj.initSheet(this.spread.getActiveSheet(), this.spreadSetting);
+            this.spread.bind(spreadNS.Events.CellDoubleClick, function (e, info) {
+                const dealSheet = info.sheet;
+                const mainSheet = ledgerSpread.getActiveSheet();
+
+                const dealBills = SpreadJsObj.getSelectObject(dealSheet);
+                if (!dealBills) { return; }
+                const mainTree = mainSheet.zh_tree;
+                const mainNode = SpreadJsObj.getSelectObject(mainSheet);
+                if (!mainNode || !mainTree) { return; }
+
+                if (mainNode.code && mainNode.code !== '' && !mainTree.isLeafXmj(mainNode)) {
+                    toast('非最底层项目下,不应添加清单', 'error');
+                    return;
+                }
+
+                postData('/tender/' + getTenderId() + '/ledger/add-by-deal', {
+                    id: mainNode.ledger_id,
+                    type: mainNode.code ? 'child' : 'next',
+                    dealBills: {
+                        b_code: dealBills.code, name: dealBills.name, unit: dealBills.unit,
+                        unit_price: dealBills.unit_price,
+                    },
+                }, function (result) {
+                    const refreshData = mainTree.loadPostData(result);
+                    treeOperationObj.refreshTree(mainSheet, refreshData);
+                    treeOperationObj.refreshOperationValid(mainSheet);
+                });
+            });
             $('#upload-deal-bills').click(function () {
                 const file = $('#deal-bills-file')[0];
                 const formData = new FormData();
@@ -1193,10 +1216,9 @@ $(document).ready(function() {
                     console.log(insertData.batchData);
                     postData('/tender/' + getTenderId() + '/ledger/batch-insert', insertData, function (data) {
                         pos.updateDatas(data.pos);
-                        ledgerTree.loadPostData(data.ledger, function (result) {
-                            treeOperationObj.refreshTree(sheet, result);
-                            treeOperationObj.refreshOperationValid(sheet, selection);
-                        });
+                        const result = ledgerTree.loadPostData(data.ledger);
+                        treeOperationObj.refreshTree(sheet, result);
+                        treeOperationObj.refreshOperationValid(sheet, selection);
                         self.obj.modal('hide');
                     });
                 }

+ 9 - 6
app/public/js/path_tree.js

@@ -832,9 +832,9 @@ const createNewPathTree = function (type, setting) {
          * 因为提交其他数据,引起的树结构数据更新,调用该方法
          *
          * @param data - 更新的数据 {update, create, delete}
-         * @param {function} callback - 界面刷新
+         * @returns {{}}
          */
-        loadPostData(data, callback) {
+        loadPostData(data) {
             const result = {}, reCalcNodes = [];
             if (data.update) {
                 result.update = this._updateData(data.update);
@@ -855,7 +855,7 @@ const createNewPathTree = function (type, setting) {
                 treeCalc.calculateNode(this, node, this.setting.calcFields, this.setting.calcFun);
             }
             result.update = result.update ? result.update.concat(reCalcNodes) : reCalcNodes;
-            callback(result);
+            return result;
         }
 
         /**
@@ -888,7 +888,8 @@ const createNewPathTree = function (type, setting) {
                 postType: type
             };
             postData(url, data, function (datas) {
-                self.loadPostData(datas, callback);
+                const refreshData = self.loadPostData(datas);
+                callback(refreshData);
             });
         };
         /**
@@ -900,7 +901,8 @@ const createNewPathTree = function (type, setting) {
         update (url, updateData, callback) {
             const self = this;
             postData(url, updateData, function (datas) {
-                self.loadPostData(datas, callback);
+                const refreshData = self.loadPostData(datas);
+                callback(refreshData);
             }, function () {
                 if (updateData instanceof Array) {
                     const result = [];
@@ -927,7 +929,8 @@ const createNewPathTree = function (type, setting) {
                 block: block
             };
             postData(url, data, function (datas) {
-                self.loadPostData(datas, callback);
+                const refreshData = self.loadPostData(datas);
+                callback(refreshData);
             });
         };
         /**

+ 1 - 0
app/router.js

@@ -90,6 +90,7 @@ module.exports = app => {
     app.post('/tender/:id/ledger/update-info', sessionAuth, tenderCheck, 'ledgerController.updateInfo');
     app.post('/tender/:id/ledger/paste-block', sessionAuth, tenderCheck, 'ledgerController.pasteBlock');
     app.post('/tender/:id/ledger/add-by-std', sessionAuth, tenderCheck, 'ledgerController.addFromStandardLib');
+    app.post('/tender/:id/ledger/add-by-deal', sessionAuth, tenderCheck, 'ledgerController.addFromDealBills');
     app.post('/tender/:id/ledger/batch-insert', sessionAuth, tenderCheck, 'ledgerController.batchInsert');
     app.post('/tender/:id/ledger/explode/upload-excel', sessionAuth, tenderCheck, 'ledgerController.uploadExcel');
     app.get('/tender/:id/ledger/download/:file', sessionAuth, tenderCheck, 'ledgerController.download');