소스 검색

1. 新建项目,小数位数,金额默认0位小数
2. 标段属性,编辑提交后,再次编辑取消,属性丢失
3. 台账分解,部位明细,不在第一空白行新增界面显示问题
4. 台账分解,设计数量,按清单精度保留小数位数
5. 台账分解,单价、经济指标,界面显示2位小数

MaiXinRong 6 년 전
부모
커밋
ddd8222644

+ 1 - 1
app/const/tender_info.js

@@ -59,7 +59,7 @@ const defaultInfo = {
     decimal: {
         up: 2,
         qty: 3,
-        tp: 2,
+        tp: 0,
         pay: false,
         payTp: 0,
     },

+ 2 - 1
app/controller/ledger_controller.js

@@ -66,9 +66,10 @@ module.exports = app => {
                 col.formatter = formatter;
             }
             const tpFormatter = this.ctx.helper.getNumberFormatter(this.ctx.tender.info.decimal.tp);
-            const upFormatter = this.ctx.helper.getNumberFormatter(2);
+            const upFormatter = this.ctx.helper.getNumberFormatter(this.ctx.tender.info.decimal.up);
             const ledger = JSON.parse(JSON.stringify(spreadConst.ledgerSpread));
             setColFormat(ledger.cols, 'unit_price', upFormatter);
+            setColFormat(ledger.cols, 'dgn_price', upFormatter);
             setColFormat(ledger.cols, 'total_price', tpFormatter);
             setColFormat(ledger.cols, 'deal_tp', tpFormatter);
             const pos = JSON.parse(JSON.stringify(spreadConst.ledgerPosSpread));

+ 1 - 1
app/controller/tender_controller.js

@@ -209,7 +209,7 @@ module.exports = app => {
                     throw '提交数据错误';
                 }
                 await ctx.service.tenderInfo.saveTenderInfo(ctx.tender.id, data);
-                ctx.body = { err: 0, msg: '', data };
+                ctx.body = { err: 0, msg: '', data: JSON.parse(ctx.request.body.data) };
             } catch (err) {
                 this.log(err);
                 ctx.body = { err: 1, msg: err.toString(), data: null };

+ 12 - 2
app/public/js/ledger.js

@@ -685,8 +685,18 @@ $(document).ready(function() {
                     data.updateData[col.field] = col.type === 'Number' ? parseFloat(newText) : newText;
                 }
                 postData('/tender/' + getTenderId() + '/pos/update', data, function (result) {
-                    pos.updateDatas(result.pos);
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    const updateRst = pos.updateDatas(result.pos);
+                    // 刷新当前行, 不适用于新增(在非下一空白行新增)
+                    if (updateRst.create.length > 0) {
+                        // info.sheet.addRows(info.row, 1);
+                        // if (info.sheet.zh_data.length === 0) {
+                        //     info.sheet.zh_data = pos.ledgerPos[itemsPre + node.id] || [];
+                        // }
+                        // SpreadJsObj.reLoadRowData(info.sheet, info.sheet.zh_data.length - 1);
+                        posOperationObj.loadCurPosData();
+                    } else {
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    }
                     ledgerTree.loadPostData(result.ledger, function (loadResult) {
                         treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);
                     });

+ 4 - 0
app/public/js/path_tree.js

@@ -47,6 +47,7 @@ class PosData {
      */
     updateDatas(data) {
         const datas = data instanceof Array ? data : [data];
+        const result = { create: [], update: [] };
         for (const d of datas) {
             const key = itemsPre + d[this.setting.id];
             if (!this.items[key]) {
@@ -58,13 +59,16 @@ class PosData {
                     this.ledgerPos[masterKey] = [];
                 }
                 this.ledgerPos[masterKey].push(d);
+                result.create.push(d);
             } else {
                 const pos = this.items[key];
                 for (const prop in d) {
                     pos[prop] = d[prop];
                 }
+                result.update.push(pos);
             }
         }
+        return result;
     }
 
     /**

+ 8 - 6
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -374,18 +374,20 @@ const SpreadJsObj = {
         const sortData = sheet.zh_dataType === 'tree' ? sheet.zh_tree.nodes : sheet.zh_data;
         this.beginMassOperation(sheet);
         try {
-            sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), spreadNS.SheetArea.viewport, spreadNS.StorageType.data)
+            sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), spreadNS.SheetArea.viewport, spreadNS.StorageType.data);
             // 设置总行数
             const totalRow = sortData.length + sheet.zh_setting.emptyRows;
             sheet.setRowCount(totalRow, spreadNS.SheetArea.viewport);
             // 控制空白行
             const emptyRows = sheet.getRange(sortData.length, -1, sheet.zh_setting.emptyRows, -1);
             emptyRows.locked(sheet.zh_dataType === 'tree');
-            // 单元格写入数据
-            sortData.forEach(function (data, i) {
-                self._loadRowData(sheet, data, i);
-                sheet.setRowVisible(i, data.visible);
-            });
+            if (sortData) {
+                // 单元格写入数据
+                sortData.forEach(function (data, i) {
+                    self._loadRowData(sheet, data, i);
+                    sheet.setRowVisible(i, data.visible);
+                });
+            }
             // 设置列单元格格式
             sheet.zh_setting.cols.forEach(function (col, j) {
                 //if (!col.cellType) { return; }

+ 12 - 1
app/service/ledger.js

@@ -22,7 +22,7 @@ const keyFields = {
 };
 // 以下字段仅可通过树结构操作改变,不可直接通过update方式从接口提交,发现时过滤
 const readOnlyFields = ['id', 'tender_id', 'ledger_id', 'ledger_pid', 'order', 'level', 'full_path', 'is_leaf'];
-const calcFields = ['quantity', 'unit_price', 'total_price', 'deal_qty', 'deal_tp'];
+const calcFields = ['quantity', 'unit_price', 'total_price', 'deal_qty', 'deal_tp', 'dgn_qty1', 'dgn_qty2'];
 const upFields = ['unit_price'];
 const qtyFields = ['quantity', 'deal_qty', 'dgn_qty1', 'dgn_qty2'];
 const tpFields = ['total_price', 'deal_tp'];
@@ -1339,6 +1339,16 @@ module.exports = app => {
             return bChanged ? result : undefined;
         }
 
+        _checkField(data, field) {
+            const fields = field instanceof Array ? field : [field];
+            for (const prop in data) {
+                if (fields.indexOf(prop) >= 0) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
         /**
          * 检查data中是否含有计算字段
          * @param {Object} data
@@ -1637,6 +1647,7 @@ module.exports = app => {
                         }
                         updateData = this._filterUpdateInvalidField(updateNode.id, calcData);
                     } else {
+
                         updateData = this._filterUpdateInvalidField(updateNode.id, row);
                     }
                     await this.transaction.update(this.tableName, updateData);