浏览代码

台账分解,表达式相关

MaiXinRong 5 年之前
父节点
当前提交
f75f174079
共有 6 个文件被更改,包括 92 次插入18 次删除
  1. 58 6
      app/public/js/ledger.js
  2. 8 4
      app/service/ledger_revise.js
  3. 2 1
      app/service/pos.js
  4. 8 4
      app/service/revise_audit.js
  5. 3 1
      app/service/revise_pos.js
  6. 13 2
      sql/update.sql

+ 58 - 6
app/public/js/ledger.js

@@ -23,7 +23,14 @@ const invalidFields = {
     posCalc: ['sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp'],
     posXmj: ['code'],
 };
-const exprField = ['sgfh_qty', 'sgfh_tp', 'sjcl_qty'];
+function getExprInfo (field) {
+    const exprField = [
+        {qty: 'sgfh_qty', expr: 'sgfh_expr'},
+        {qty: 'sjcl_qty', expr: 'sjcl_expr'},
+        {qty: 'qtcl_qty', expr: 'qtcl_expr'},
+    ];
+    return _.find(exprField, {qty: field});
+}
 function transExpr(expr) {
     return expr.replace('=', '').replace('%', '/100');
 }
@@ -115,7 +122,13 @@ $(document).ready(function() {
             if (col && col.type === 'Number') {
                 const data = SpreadJsObj.getSelectObject(sheet);
                 if (data) {
-                    $('#bills-expr').val(data[col.field]).attr('field', col.field).attr('org', data[col.field]);
+                    const exprInfo = getExprInfo(col.field);
+                    if (exprInfo) {
+                        $('#bills-expr').val(data[exprInfo.expr] ? data[exprInfo.expr] : data[col.field])
+                            .attr('field', col.field).attr('org', data[col.field]);
+                    } else {
+                        $('#bills-expr').val(data[col.field]).attr('field', col.field).attr('org', data[col.field]);
+                    }
                     if (col.field.indexOf('dgn') >= 0) {
                         $('#bills-expr').attr('readOnly', readOnly || cell.locked() || (_.isString(data.b_code) && data.b_code !== ''));
                     } else {
@@ -476,7 +489,10 @@ $(document).ready(function() {
                         } else {
                             try {
                                 data[col.field] = math.evaluate(transExpr(newValue));
-                                if (exprField.indexOf(col.field) >= 0) data[col.field + '']
+                                const exprInfo = getExprInfo(col.field);
+                                if (exprInfo) {
+                                    data[exprInfo.expr] = newValue;
+                                }
                             } catch(err) {
                                 toastr.error('输入的表达式非法');
                                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -653,6 +669,11 @@ $(document).ready(function() {
                         } else {
                             try {
                                 data[colSetting.field] = math.evaluate(transExpr(value));
+                                const exprInfo = getExprInfo(colSetting.field);
+                                if (exprInfo) {
+                                    data[exprInfo.expr] = value;
+                                }
+                                bPaste = true;
                             } catch(err) {
                                 toastMessageUniq(hint.invalidExpr);
                             }
@@ -722,6 +743,10 @@ $(document).ready(function() {
                             if (!style.locked) {
                                 const colSetting = sheet.zh_setting.cols[iCol];
                                 data[colSetting.field] = null;
+                                const exprInfo = getExprInfo(colSetting.field);
+                                if (exprInfo) {
+                                    data[exprInfo.expr] = '';
+                                }
                                 bDel = true;
                             }
                         }
@@ -735,6 +760,7 @@ $(document).ready(function() {
                     postData(window.location.pathname + '/update', {postType: 'update', postData: datas}, function (result) {
                         const refreshNode = tree.loadPostData(result);
                         treeOperationObj.refreshTree(sheet, refreshNode);
+                        treeOperationObj.loadExprToInput(sheet);
                     });
                 }
             }
@@ -815,6 +841,10 @@ $(document).ready(function() {
                         }
                         const colSetting = sheet.zh_setting.cols[iCol];
                         data[colSetting.field] = null;
+                        const exprInfo = getExprInfo(colSetting.field);
+                        if (exprInfo) {
+                            data[exprInfo.expr] = '';
+                        }
                     }
                     datas.push(data);
                 }
@@ -974,6 +1004,10 @@ $(document).ready(function() {
                 } else {
                     try {
                         data[field] = math.evaluate(transExpr(newValue));
+                        const exprInfo = getExprInfo(field);
+                        if (exprInfo) {
+                            data[exprInfo.expr] = newValue;
+                        }
                     } catch (err) {
                         toastr.error('输入的表达式非法');
                         return;
@@ -986,7 +1020,6 @@ $(document).ready(function() {
             // 更新至服务器
             postData(window.location.pathname + '/update', {postType: 'update', postData: data}, function (result) {
                 const refreshNode = ledgerTree.loadPostData(result);
-                expr.val(select[field]);
                 treeOperationObj.refreshTree(sheet, refreshNode);
             });
         });
@@ -1422,7 +1455,11 @@ $(document).ready(function() {
             if (col && col.type === 'Number') {
                 const data = SpreadJsObj.getSelectObject(sheet);
                 if (data) {
-                    $('#pos-expr').val(data[col.field]).attr('field', col.field).attr('org', data[col.field])
+                    const exprInfo = getExprInfo(col.field);
+                    const value = exprInfo
+                        ? (data[exprInfo.expr] ? data[exprInfo.expr] : data[col.field])
+                        : data[col.field];
+                    $('#pos-expr').val(value).attr('field', col.field).attr('org', data[col.field])
                         .attr('row', sel.row).attr('readOnly', readOnly || cell.locked());
                 } else {
                     $('#pos-expr').val('').attr('readOnly', true);
@@ -1569,6 +1606,10 @@ $(document).ready(function() {
                         } else {
                             try {
                                 data.updateData[col.field] = math.evaluate(transExpr(newText));
+                                const exprInfo = getExprInfo(col.field);
+                                if (exprInfo) {
+                                    data.updateData[exprInfo.expr] = newText;
+                                }
                             } catch(err) {
                                 toastr.error('输入的表达式非法');
                                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -1625,6 +1666,10 @@ $(document).ready(function() {
                             if (!style.locked) {
                                 const colSetting = sheet.zh_setting.cols[iCol];
                                 data[colSetting.field] = null;
+                                const exprInfo = getExprInfo(colSetting.field);
+                                if (exprInfo) {
+                                    data[exprInfo.expr] = '';
+                                }
                                 bDel = true;
                             }
                         }
@@ -1725,6 +1770,10 @@ $(document).ready(function() {
                             } else {
                                 try {
                                     posData[colSetting.field] = math.evaluate(transExpr(posData[colSetting.field]));
+                                    const exprInfo = getExprInfo(colSetting.field);
+                                    if (exprInfo) {
+                                        posData[exprInfo.expr] = trimInvalidChar(info.sheet.getText(curRow, curCol));
+                                    }
                                     bPaste = true;
                                 } catch(err) {
                                     delete posData[colSetting.field];
@@ -1800,6 +1849,10 @@ $(document).ready(function() {
                 } else {
                     try {
                         data[field] = math.evaluate(transExpr(newValue));
+                        const exprInfo = getExprInfo(field);
+                        if (exprInfo) {
+                            data[exprInfo.expr] = newValue;
+                        }
                     } catch (err) {
                         toastr.error('输入的表达式非法');
                         return;
@@ -1812,7 +1865,6 @@ $(document).ready(function() {
             // 更新至服务器
             postData('/tender/' + getTenderId() + '/pos/update', {updateType: 'update', updateData: data}, function (result) {
                 const updateRst = pos.updateDatas(result.pos);
-                expr.val(select[field]);
                 SpreadJsObj.reLoadRowData(posSheet, _.toNumber(row));
                 const loadResult = ledgerTree.loadPostData(result.ledger);
                 treeOperationObj.refreshTree(ledgerSpread.getActiveSheet(), loadResult);

+ 8 - 4
app/service/ledger_revise.js

@@ -87,10 +87,12 @@ module.exports = app => {
             const sql = 'Insert Into ' + this.ctx.service.reviseBills.tableName +
                 '  (id, code, b_code, name, unit, source, remark, ledger_id, ledger_pid, level, `order`, full_path, is_leaf,' +
                 '     quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' +
-                '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp)' +
+                '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp,' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr)' +
                 '  Select id, code, b_code, name, unit, source, remark, ledger_id, ledger_pid, level, `order`, full_path, is_leaf,' +
                 '      quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' +
-                '      sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp' +
+                '      sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp,' +
+                '      sgfh_expr, sjcl_expr, qtcl_expr' +
                 '  From ' + this.ctx.service.ledger.tableName +
                 '  Where `tender_id` = ?';
             const sqlParam = [tid];
@@ -100,9 +102,11 @@ module.exports = app => {
         async _initRevisePos(transaction, tid) {
             const sql = 'Insert Into ' + this.ctx.service.revisePos.tableName +
                 '  (id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position)' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position,' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr)' +
                 '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position,' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr' +
                 '  From ' + this.ctx.service.pos.tableName +
                 '  Where `tid` = ?';
             const sqlParam = [tid];

+ 2 - 1
app/service/pos.js

@@ -25,7 +25,8 @@ module.exports = app => {
         async getPosData(condition) {
             return await this.db.select(this.tableName, {
                 where: condition,
-                columns: ['id', 'tid', 'lid', 'name', 'quantity', 'position', 'drawing_code', 'sgfh_qty', 'sjcl_qty', 'qtcl_qty', 'in_time', 'porder', 'add_stage'],
+                columns: ['id', 'tid', 'lid', 'name', 'quantity', 'position', 'drawing_code', 'sgfh_qty', 'sjcl_qty',
+                    'qtcl_qty', 'in_time', 'porder', 'add_stage', 'sgfh_expr', 'sjcl_expr', 'qtcl_expr'],
                 order: [['porder', 'ASC']],
             });
         }

+ 8 - 4
app/service/revise_audit.js

@@ -248,19 +248,23 @@ module.exports = app => {
             const bSql = 'Insert Into ' + this.ctx.service.ledger.tableName +
                 '  (id, code, b_code, name, unit, source, remark, ledger_id, ledger_pid, level, `order`, full_path, is_leaf,' +
                 '     quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' +
-                '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp)' +
+                '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp,' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr)' +
                 '  Select id, code, b_code, name, unit, source, remark, ledger_id, ledger_pid, level, `order`, full_path, is_leaf,' +
                 '      quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' +
-                '      sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp' +
+                '      sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp, ' +
+                '      sgfh_expr, sjcl_expr, qtcl_expr' +
                 '  From ' + this.ctx.service.reviseBills.tableName +
                 '  Where `tender_id` = ?';
             await transaction.query(bSql, sqlParam);
             await transaction.delete(this.ctx.service.pos.tableName, {tid: revise.tid});
             const pSql = 'Insert Into ' + this.ctx.service.pos.tableName +
                 '  (id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position)' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position, ' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr)' +
                 '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position,' +
+                '     sgfh_expr, sjcl_expr, qtcl_expr' +
                 '  From ' + this.ctx.service.revisePos.tableName +
                 '  Where `tid` = ?';
             await transaction.query(pSql, sqlParam);

+ 3 - 1
app/service/revise_pos.js

@@ -23,7 +23,9 @@ module.exports = app => {
         }
 
         async getPosData(condition) {
-            const sql = 'SELECT p.id, p.tid, p.lid, p.name, p.quantity, p.position, p.drawing_code, p.sgfh_qty, p.sjcl_qty, p.qtcl_qty, p.porder, p.add_stage, p.add_times, p.add_user, s.order As add_stage_order ' +
+            const sql = 'SELECT p.id, p.tid, p.lid, p.name, p.quantity, p.position, p.drawing_code, p.sgfh_qty, ' +
+                '    p.sjcl_qty, p.qtcl_qty, p.porder, p.add_stage, p.add_times, p.add_user, s.order As add_stage_order,' +
+                '    p.sgfh_expr, p.sjcl_expr, p.qtcl_expr ' +
                 '  FROM ' + this.tableName + ' p ' +
                 '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s' +
                 '  ON add_stage = s.id'

+ 13 - 2
sql/update.sql

@@ -21,14 +21,25 @@ MODIFY COLUMN `sgfh_qty`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核
 MODIFY COLUMN `sgfh_tp`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核 - 金额' AFTER `sgfh_qty`,
 ADD COLUMN `sgfh_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '施工复核-公式' AFTER `is_tp`,
 ADD COLUMN `sjcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '设计错漏-公式' AFTER `sgfh_expr`,
-ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_qty`;
+ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_expr`;
 
+ALTER TABLE `zh_pos`
+MODIFY COLUMN `sgfh_qty`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核 - 数量' AFTER `add_user`,
+ADD COLUMN `sgfh_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '' COMMENT '施工复核-公式' AFTER `position`,
+ADD COLUMN `sjcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '' COMMENT '设计错漏-公式' AFTER `sgfh_expr`,
+ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_expr`;
 
 ALTER TABLE `zh_revise_bills`
 MODIFY COLUMN `sgfh_qty`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核 - 数量' AFTER `deal_tp`,
 MODIFY COLUMN `sgfh_tp`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核 - 金额' AFTER `sgfh_qty`,
 ADD COLUMN `sgfh_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '施工复核-公式' AFTER `is_tp`,
 ADD COLUMN `sjcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '设计错漏-公式' AFTER `sgfh_expr`,
-ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_qty`;
+ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_expr`;
+
+ALTER TABLE `zh_revise_pos`
+MODIFY COLUMN `sgfh_qty`  decimal(24,8) NULL DEFAULT NULL COMMENT '施工复核 - 数量' AFTER `add_user`,
+ADD COLUMN `sgfh_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '施工复核-公式' AFTER `position`,
+ADD COLUMN `sjcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '设计错漏-公式' AFTER `sgfh_expr`,
+ADD COLUMN `qtcl_expr`  varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '' COMMENT '其他错漏-公式' AFTER `sjcl_expr`;
 
 ALTER TABLE `zh_project_account` ADD `backdoor_password` VARCHAR(255) NULL DEFAULT NULL COMMENT '副密码' AFTER `password`;