Browse Source

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

TonyKang 5 năm trước cách đây
mục cha
commit
89ad35a14f

+ 3 - 2
app/controller/ledger_controller.js

@@ -21,6 +21,7 @@ const spreadConst = require('../const/spread');
 const fs = require('fs');
 const LzString = require('lz-string');
 const accountGroup = require('../const/account_group').group;
+const path = require('path');
 
 module.exports = app => {
 
@@ -494,8 +495,8 @@ module.exports = app => {
             if (file) {
                 try {
                     let fileName;
-                    if (file === 'template') {
-                        fileName = this.app.baseDir + '/app/public/files/template/ledger/导入分项清单Excel格式.xls';
+                    if (file === '导入分项清单EXCEL格式.xls') {
+                        fileName = path.join(this.app.baseDir, 'app', 'public', 'files', 'template', 'ledger', '导入分项清单EXCEL格式.xls');
                     } else if (file === 'ledger') {
                         const create_time = Date.parse(new Date()) / 1000;
                         fileName = this.app.baseDir + '/app/public/files/downloads/ledger/' + ctx.tender.id + '-' + create_time + '.xlsx';

BIN
app/public/files/template/ledger/导入分项清单EXCEL格式.xls


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

@@ -97,8 +97,12 @@ $(document).ready(function() {
             if (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])
-                        .attr('readOnly', readOnly || cell.locked() || (data.children && data.children.length > 0));
+                    $('#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() || data.b_code);
+                    } else {
+                        $('#bills-expr').attr('readOnly', readOnly || cell.locked() || (data.children && data.children.length > 0));
+                    }
                 } else {
                     $('#bills-expr').val('').attr('readOnly', true);
                 }
@@ -883,16 +887,20 @@ $(document).ready(function() {
                 tender_id: select.tender_id,
                 ledger_id: select.ledger_id
             };
-            const num = _.toNumber(newValue);
-            if (num) {
-                data[field] = num;
-            } else {
-                try {
-                    data[field] = math.evaluate(transExpr(newValue));
-                } catch (err) {
-                    toastr.error('输入的表达式非法');
-                    return;
+            if (newValue !== '') {
+                const num = _.toNumber(newValue);
+                if (num) {
+                    data[field] = num;
+                } else {
+                    try {
+                        data[field] = math.evaluate(transExpr(newValue));
+                    } catch (err) {
+                        toastr.error('输入的表达式非法');
+                        return;
+                    }
                 }
+            } else {
+                data[field] = null;
             }
 
             // 更新至服务器
@@ -1375,16 +1383,20 @@ $(document).ready(function() {
             if (orgValue === newValue || (!orgValue && newValue == '')) { return; }
 
             const data = {id: select.id};
-            const num = _.toNumber(newValue);
-            if (num) {
-                data[field] = num;
-            } else {
-                try {
-                    data[field] = math.evaluate(transExpr(newValue));
-                } catch (err) {
-                    toastr.error('输入的表达式非法');
-                    return;
+            if (newValue !== '') {
+                const num = _.toNumber(newValue);
+                if (num) {
+                    data[field] = num;
+                } else {
+                    try {
+                        data[field] = math.evaluate(transExpr(newValue));
+                    } catch (err) {
+                        toastr.error('输入的表达式非法');
+                        return;
+                    }
                 }
+            } else {
+                data[field] = null;
             }
 
             // 更新至服务器

+ 45 - 23
app/public/js/revise.js

@@ -59,8 +59,15 @@ $(document).ready(() => {
             if (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])
-                        .attr('readOnly', readOnly || cell.locked() || (data.children && data.children.length > 0));
+                    $('#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() || data.b_code);
+                    } else if (col.field === 'unit_price') {
+                        $('#bills-expr').attr('readOnly', readOnly || cell.locked() || (data.children && data.children.length > 0) || node.used);
+                    } else {
+                        $('#bills-expr').attr('readOnly', readOnly || cell.locked() || (data.children && data.children.length > 0));
+                    }
                 } else {
                     $('#bills-expr').val('').attr('readOnly', true);
                 }
@@ -563,6 +570,12 @@ $(document).ready(() => {
         $('a[name="base-opr"]').click(function () {
             billsTreeSpreadObj.baseOpr(billsSheet, this.getAttribute('type'));
         });
+        $('a[name=cpc]').click(function () {
+            billsSpread.commandManager().execute({
+                cmd: this.getAttribute('type'),
+                sheetName: billsSpread.getActiveSheet().name()
+            });
+        });
 
         $('#bills-expr').bind('change mouseleave', function () {
             if (this.readOnly) return;
@@ -577,23 +590,27 @@ $(document).ready(() => {
                 tender_id: select.tender_id,
                 ledger_id: select.ledger_id
             };
-            const num = _.toNumber(newValue);
-            if (num) {
-                data[field] = num;
-            } else {
-                try {
-                    data[field] = math.evaluate(transExpr(newValue));
-                } catch (err) {
-                    toastr.error('输入的表达式非法');
-                    return;
+            if (newValue !== '') {
+                const num = _.toNumber(newValue);
+                if (num) {
+                    data[field] = num;
+                } else {
+                    try {
+                        data[field] = math.evaluate(transExpr(newValue));
+                    } catch (err) {
+                        toastr.error('输入的表达式非法');
+                        return;
+                    }
                 }
+            } else {
+                data[field] = null;
             }
 
             // 更新至服务器
             postData(window.location.pathname + '/update', {postType: 'update', postData: data}, function (result) {
                 const refreshNode = billsTree.loadPostData(result);
                 expr.val(select[field]);
-                billsTreeSpreadObj.refreshTree(info.sheet, refreshNode);
+                billsTreeSpreadObj.refreshTree(billsSheet, refreshNode);
             });
         });
 
@@ -996,28 +1013,33 @@ $(document).ready(() => {
 
             const expr = $(this);
             const select = SpreadJsObj.getSelectObject(posSheet);
+            const row = posSheet.getSelections()[0].row;
             const field = expr.attr('field'), orgValue = expr.attr('org'), newValue = trimInvalidChar(expr.val());
             if (orgValue === newValue || (!orgValue && newValue == '')) { return; }
 
             const data = {id: select.id};
-            const num = _.toNumber(newValue);
-            if (num) {
-                data[field] = num;
-            } else {
-                try {
-                    data[field] = math.evaluate(transExpr(newValue));
-                } catch (err) {
-                    toastr.error('输入的表达式非法');
-                    return;
+            if (newValue !== '') {
+                const num = _.toNumber(newValue);
+                if (num) {
+                    data[field] = num;
+                } else {
+                    try {
+                        data[field] = math.evaluate(transExpr(newValue));
+                    } catch (err) {
+                        toastr.error('输入的表达式非法');
+                        return;
+                    }
                 }
+            } else {
+                data[field] = null;
             }
 
             // 更新至服务器
-            postData(window.location.pathname + '/update', {posPostType: 'update', posData: data}, function (result) {
+            postData(window.location.pathname + '/update', {postType: 'pos', posPostType: 'update', postData: data}, function (result) {
                 const updateRst = pos.updateDatas(result.pos);
                 expr.val(select[field]);
                 // 刷新当前行, 不适用于新增(在非下一空白行新增)
-                SpreadJsObj.reLoadRowData(info.sheet, _.toNumber(row));
+                SpreadJsObj.reLoadRowData(posSheet, row);
                 const loadResult = billsTree.loadPostData(result.ledger);
                 billsTreeSpreadObj.refreshTree(billsSheet, loadResult);
                 billsTreeSpreadObj.refreshOperationValid(billsSheet);

+ 1 - 1
app/view/ledger/explode_modal.ejs

@@ -6,7 +6,7 @@
                 <h5 class="modal-title">导入</h5>
             </div>
             <div class="modal-body">
-                <p>请上传符合格式的 <b>0号台帐</b> 格式的 .xls和.xlsx 文件,<a id="downloadLedgerTemplate" href="/tender/<%- ctx.tender.id %>/ledger/download/template">下载示例</a>。</p>
+                <p>请上传符合格式的 <b>0号台帐</b> 格式的 .xls和.xlsx 文件,<a id="downloadLedgerTemplate" href="/tender/<%- ctx.tender.id %>/ledger/download/导入分项清单EXCEL格式.xls">下载示例</a>。</p>
                 <div class="form-group">
                     <label for="exampleFormControlFile1">选择文件</label><i class="fa fa-spinner fa-pulse fa-lg fa-fw text-primary" id="select-excel-loading" style="display: none;"></i>
                     <input type="file" class="form-control-file" id="upload-ledger-file" accept="*.xls">

+ 3 - 3
app/view/revise/info.ejs

@@ -29,9 +29,9 @@
                     <a href="javascript: void(0);" name="base-opr" type="down-level" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="down-move" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="up-move" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
-                    <a href="javascript: void(0);" id="copy" class="btn btn-sm" data-toggle="tooltip disabled" data-placement="bottom" title="" data-original-title="复制"><i class="fa fa-files-o" aria-hidden="true"></i></a>
-                    <a href="javascript: void(0);" id="cut" class="btn btn-sm" data-toggle="tooltip disabled" data-placement="bottom" title="" data-original-title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
-                    <a href="javascript: void(0);" id="paste" class="btn btn-sm" data-toggle="tooltip disabled" data-placement="bottom" title="" data-original-title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" name="cpc" type="copy" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="复制"><i class="fa fa-files-o" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" name="cpc" type="cut" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" name="cpc" type="paste" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
                 </div>
                 <div class="d-inline-block">
                     <div class="input-group input-group-sm ml-2">

+ 4 - 4
config/config.default.js

@@ -129,17 +129,17 @@ module.exports = appInfo => {
     config.customLogger = {
         // 操作失败日志
         fail: {
-            file: path.join(appInfo.root, 'logs/' + appInfo.name + '-' + config.version + '/fail.log'),
+            file: path.join(appInfo.root, 'logs', appInfo.name + '-' + config.version, 'fail.log'),
         },
         // 以下为业务日志
         ledger: {
-            file: path.join(appInfo.root, 'logs/' + appInfo.name + '-' + config.version + '/ledger.log'),
+            file: path.join(appInfo.root, 'logs', appInfo.name + '-' + config.version, 'ledger.log'),
         },
         stage: {
-            file: path.join(appInfo.root, 'logs/' + appInfo.name + '-' + config.version + 'stage.log'),
+            file: path.join(appInfo.root, 'logs', appInfo.name + '-' + config.version, 'stage.log'),
         },
         mixed: {
-            file: path.join(appInfo.root, 'logs/' + appInfo.name + '-' + config.version + 'mixed.log'),
+            file: path.join(appInfo.root, 'logs', appInfo.name + '-' + config.version, 'mixed.log'),
         }
     };