Ver código fonte

记录比较人选择情况,下次打开,自动加载

MaiXinRong 5 anos atrás
pai
commit
d1db48fc65

+ 16 - 8
app/controller/stage_controller.js

@@ -1026,11 +1026,11 @@ module.exports = app => {
                 await this._getStageAuditViewData(ctx);
                 const renderData = await this._getDefaultRenderData(ctx);
                 [renderData.ledgerSpread, renderData.posSpread] = getCompareSpreadSetting();
-                renderData.ledger = await ctx.service.ledger.getDataByTenderId(ctx.tender.id, -1);
-                renderData.orgStageLedger = await ctx.service.stageBills.getAuditorStageData(ctx.tender.id, ctx.stage.id, ctx.stage.times, 0);
-                renderData.pos = await ctx.service.pos.getPosData({tid: ctx.tender.id});
-                renderData.orgStagePos = await ctx.service.stagePos.getAuditorStageData(ctx.tender.id,
-                    ctx.stage.id, ctx.stage.times, ctx.stage.curAuditor ? ctx.stage.curAuditor.order : 0);
+                // renderData.ledger = await ctx.service.ledger.getDataByTenderId(ctx.tender.id, -1);
+                // renderData.orgStageLedger = await ctx.service.stageBills.getAuditorStageData(ctx.tender.id, ctx.stage.id, ctx.stage.times, 0);
+                // renderData.pos = await ctx.service.pos.getPosData({tid: ctx.tender.id});
+                // renderData.orgStagePos = await ctx.service.stagePos.getAuditorStageData(ctx.tender.id,
+                //     ctx.stage.id, ctx.stage.times, ctx.stage.curAuditor ? ctx.stage.curAuditor.order : 0);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stage.compare);
                 await this.layout('stage/compare.ejs', renderData, 'stage/compare_modal.ejs');
             } catch (err) {
@@ -1042,12 +1042,20 @@ module.exports = app => {
         async compareAuditor(ctx) {
             try {
                 const data = JSON.parse(ctx.request.body.data);
-                const result = [];
-                for (const order of data.auditors) {
+                const result = {
+                    main: null,
+                    roles: []
+                };
+                if (data.main) {
+                    result.main = {};
+                    result.main.ledger = await ctx.service.ledger.getDataByTenderId(ctx.tender.id, -1);
+                    result.main.pos = await ctx.service.pos.getPosData({tid: ctx.tender.id});
+                }
+                for (const order of data.roles) {
                     const data = { order: order, bills: [], pos: [] };
                     data.bills = await ctx.service.stageBills.getAuditorStageData(ctx.tender.id, ctx.stage.id, ctx.stage.times, order);
                     data.pos = await ctx.service.stagePos.getAuditorStageData(ctx.tender.id, ctx.stage.id, ctx.stage.times, order);
-                    result.push(data);
+                    result.roles.push(data);
                 }
                 ctx.body = {err: 0, msg: '', data: result};
             } catch (err) {

+ 5 - 1
app/lib/pay_calc.js

@@ -173,7 +173,11 @@ class PayCalculate {
                             p.tp = value;
                         }
                     } else if (p.tp && !this.ctx.helper.checkZero(p.tp)) {
-                        p.tp = Math.min(this.ctx.helper.sub(p.rprice, p.pre_total_price), this.ctx.helper.round(p.tp, this.decimal));
+                        if (p.rprice) {
+                            p.tp = Math.min(this.ctx.helper.sub(p.rprice, p.pre_total_price), this.ctx.helper.round(p.tp, this.decimal));
+                        } else {
+                            p.tp = this.ctx.helper.round(p.tp, this.decimal);
+                        }
                     }
                 } else {
                     p.tp = 0;

+ 58 - 32
app/public/js/stage_compare.js

@@ -8,9 +8,7 @@
  * @version
  */
 
-$(document).ready(function () {
-    autoFlashHeight();
-    // 根据设置整理Spread设置
+function initSpreadSettingWithRoles(compareRoles) {
     function setSpreadSettingCols(setting, fieldSufs, Roles) {
         function addExtraCols(fieldSuf, Role) {
             for (const ec of setting.extraCols) {
@@ -28,21 +26,35 @@ $(document).ready(function () {
             addExtraCols(fieldSufs[index], Roles[index]);
         }
     }
-    setSpreadSettingCols(ledgerSpreadSetting, ['0'], ['原报']);
-    setSpreadSettingCols(posSpreadSetting, ['0'], ['原报']);
-
-    function calculateStageLedgerData(datas) {
-        for (const d of datas) {
-            d.gather_qty = ZhCalc.add(d.contract_qty, d.qc_qty);
-            d.gather_tp = ZhCalc.add(d.contract_tp, d.qc_tp);
+    const fieldSufs = ['0'], roles = ['原报'], trs = $('tr[auditorId]');
+    for (let r of compareRoles) {
+        if (r > 0) {
+            const tr = trs[r-1];
+            if (tr) {
+                fieldSufs.push(r + '');
+                roles.push(tr.children[0].textContent);
+            }
         }
     }
-    function calculateStagePosData(datas) {
-        for (const d of datas) {
-            d.gather_qty = ZhCalc.add(d.contract_qty, d.qc_qty);
-        }
+    setSpreadSettingCols(ledgerSpreadSetting, fieldSufs, roles);
+    setSpreadSettingCols(posSpreadSetting, fieldSufs, roles);
+}
+function calculateStageLedgerData(datas) {
+    for (const d of datas) {
+        d.gather_qty = ZhCalc.add(d.contract_qty, d.qc_qty);
+        d.gather_tp = ZhCalc.add(d.contract_tp, d.qc_tp);
     }
+}
+function calculateStagePosData(datas) {
+    for (const d of datas) {
+        d.gather_qty = ZhCalc.add(d.contract_qty, d.qc_qty);
+    }
+}
 
+$(document).ready(function () {
+    autoFlashHeight();
+    // 根据设置整理Spread设置
+    initSpreadSettingWithRoles(scRoles);
     // 初始化台账
     const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
     SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
@@ -72,12 +84,6 @@ $(document).ready(function () {
         calcFields: [],
     };
     const scTree = createNewPathTree('master', scTreeSetting);
-    scTree.loadDatas(ledger);
-    calculateStageLedgerData(orgStageLedger);
-    scTree.loadMinorData(orgStageLedger, '0', ['gather_qty', 'gather_tp'], ['gather_tp']);
-    treeCalc.calculateAll(scTree);
-    scTree.expandByCalcFields();
-    SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, scTree);
     // 加载 部位 数据
     const scPosSetting = {
         id: 'id', ledgerId: 'lid', masterId: 'id', minorId: 'pid',
@@ -86,11 +92,33 @@ $(document).ready(function () {
         pos.gather_qty = ZhCalc.add(pos.contract_qty, pos.qc_qty);
     };
     const scPos = new MasterPosData(scPosSetting);
-    scPos.loadDatas(pos);
-    calculateStagePosData(orgStagePos);
-    scPos.loadMinorData(orgStagePos, '0', ['gather_qty']);
 
-    // 获取项目节数据
+    postData(window.location.pathname + '/load', {main: true, roles: scRoles}, function (result) {
+        scTree.loadDatas(result.main.ledger);
+        scPos.loadDatas(result.main.pos);
+        for (const aData of result.roles) {
+            calculateStageLedgerData(aData.bills);
+            scTree.loadMinorData(aData.bills, aData.order + '', ['gather_qty', 'gather_tp'], ['gather_tp']);
+            treeCalc.calculateAll(scTree);
+            calculateStagePosData(aData.pos);
+            scPos.loadMinorData(aData.pos, aData.order + '', ['gather_qty']);
+        }
+        scTree.expandByCalcFields();
+        SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, scTree);
+        loadPosData(0);
+    });
+
+
+    // scTree.loadDatas(ledger);
+    // calculateStageLedgerData(orgStageLedger);
+    // scTree.loadMinorData(orgStageLedger, '0', ['gather_qty', 'gather_tp'], ['gather_tp']);
+    // treeCalc.calculateAll(scTree);
+    // scTree.expandByCalcFields();
+    // SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, scTree);
+    // scPos.loadDatas(pos);
+    // calculateStagePosData(orgStagePos);
+    // scPos.loadMinorData(orgStagePos, '0', ['gather_qty']);
+    // 获取部位明细数据
     function loadPosData(iRow) {
         const node = ledgerSpread.getActiveSheet().zh_tree.nodes[iRow];
         if (node) {
@@ -100,7 +128,6 @@ $(document).ready(function () {
         }
         SpreadJsObj.resetTopAndSelect(posSpread.getActiveSheet());
     }
-    loadPosData(0);
     // 切换清单行,读取所属项目节数据
     ledgerSpread.getActiveSheet().bind(spreadNS.Events.SelectionChanged, function (e, info) {
         if (info.newSelections) {
@@ -127,20 +154,19 @@ $(document).ready(function () {
     // 选择比较人
     $('#select-qi-ok').click(function () {
         function refreshView () {
-            const fieldSufs = ['0'], roles = ['原报'], trs = $('tr[auditorId]');
+            const compareRoles = [0];
             for (let order = 0, iLength = trs.length; order < iLength; order++) {
                 const tr = trs[order];
                 if ($('input', tr)[0].checked) {
-                    fieldSufs.push((order + 1) + '');
-                    roles.push(tr.children[0].textContent);
+                    compareRoles.push(order + 1);
                 }
             }
-            setSpreadSettingCols(ledgerSpreadSetting, fieldSufs, roles);
+            setLocalCache(scCacheKey, compareRoles.join(','));
+            initSpreadSettingWithRoles(compareRoles);
             SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
             treeCalc.calculateAll(scTree);
             scTree.expandByCalcFields();
             SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, scTree);
-            setSpreadSettingCols(posSpreadSetting, fieldSufs, roles);
             SpreadJsObj.initSheet(posSpread.getActiveSheet(), posSpreadSetting);
             loadPosData(0);
         }
@@ -155,8 +181,8 @@ $(document).ready(function () {
             }
         }
         if (loadData.length > 0) {
-            postData(window.location.pathname + '/load', {auditors: loadData}, function (result) {
-                for (const aData of result) {
+            postData(window.location.pathname + '/load', {roles: loadData}, function (result) {
+                for (const aData of result.roles) {
                     calculateStageLedgerData(aData.bills);
                     scTree.loadMinorData(aData.bills, aData.order + '', ['gather_qty', 'gather_tp'], ['gather_tp']);
                     treeCalc.calculateAll(scTree);

+ 3 - 4
app/view/stage/compare.ejs

@@ -60,8 +60,7 @@
     const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const ledgerSpreadSetting = JSON.parse('<%- JSON.stringify(ledgerSpread) %>');
     const posSpreadSetting = JSON.parse('<%- JSON.stringify(posSpread) %>');
-    const ledger = JSON.parse('<%- JSON.stringify(ledger) %>');
-    const orgStageLedger = JSON.parse('<%- JSON.stringify(orgStageLedger) %>');
-    const pos = JSON.parse('<%- JSON.stringify(pos) %>');
-    const orgStagePos = JSON.parse('<%- JSON.stringify(orgStagePos) %>');
+    const scCacheKey = 'stage-compare-role-' + stage.tid + '-' + stage.order;
+    let scRoles = getLocalCache(scCacheKey);
+    scRoles = scRoles ? scRoles.split(',') : [0];
 </script>