浏览代码

1. 合并起讫桩号,定时检测最后空行数
2. 合并起讫桩号,右键菜单,新增行、删除行
3. 合并起讫桩号,编辑模式下,删除数据,出错
4. 计量台账,工程量清单模式,编辑位置失败
5. 中间计量,新增位置数据

MaiXinRong 5 年之前
父节点
当前提交
2930ba367f
共有 6 个文件被更改,包括 86 次插入17 次删除
  1. 6 2
      app/lib/stage_im.js
  2. 52 8
      app/public/js/shares/merge_peg.js
  3. 5 0
      app/public/js/stage.js
  4. 6 2
      app/public/js/stage_im.js
  5. 9 4
      app/service/stage_pos.js
  6. 8 1
      app/view/stage/index.ejs

+ 6 - 2
app/lib/stage_im.js

@@ -61,7 +61,7 @@ class StageIm {
         this.ImData = [];
         this.ImBillsData = [];
         //
-        this.imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_img'];
+        this.imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_img', 'position'];
         this.splitChar = '-';
     }
 
@@ -391,6 +391,7 @@ class StageIm {
                 pre_jl: node.pre_gather_tp, pre_contract_jl: node.pre_contract_tp, pre_qc_jl: node.pre_qc_tp,
                 end_jl: node.end_gather_tp, end_contract_jl: node.end_contract_tp, end_qc_jl: node.end_qc_tp,
                 peg: peg ? this._getPegStr(peg.name) : '', drawing_code: this._getDrawingCode(node),
+                position: '',
             };
             if (this.ctx.stage.im_gather && node.check) {
                 im.bw = this._getZlGatherBw(node, peg);
@@ -497,7 +498,8 @@ class StageIm {
                     jl: 0, contract_jl: 0, qc_jl: 0,
                     pre_jl: 0, pre_contract_jl: 0, pre_qc_jl: 0,
                     end_jl: 0, end_contract_jl: 0, end_qc_jl: 0,
-                    peg: peg ? this._getPegStr(peg.name) : ''
+                    peg: peg ? this._getPegStr(peg.name) : '',
+                    position: '',
                 };
                 if (this.ctx.stage.im_gather && node.check) {
                     im.check = true;
@@ -557,6 +559,7 @@ class StageIm {
                         xm: pp.name,
                         drawing_code: pp.drawing_code,
                         changes: [],
+                        position: pp.position,
                     };
                     im.calc_memo = '本期计量:' + im.jl + ' ' + im.unit;
                     this._checkCustomDetail(im);
@@ -584,6 +587,7 @@ class StageIm {
                     xm: node.name,
                     drawing_code: this._getDrawingCode(p),
                     changes: [],
+                    position: '',
                 };
                 im.calc_memo = '本期计量:' + im.jl + ' ' + im.unit;
                 this._checkCustomDetail(im);

+ 52 - 8
app/public/js/shares/merge_peg.js

@@ -10,6 +10,7 @@
  */
 
 const NewMergePeg = function (setting) {
+    let siHandle;
     const spread = SpreadJsObj.createNewSpread($('#mp-spread')[0]);
     const sheet = spread.getActiveSheet();
     const spreadSetting = {
@@ -115,13 +116,15 @@ const NewMergePeg = function (setting) {
             spreadObj.mergePeg(row);
         },
         editEnded: function (e, info) {
-            if (info.col === spCol || info.col === epCol) {
-                if (info.editingText.length > 10) {
-                    info.sheet.setText(info.row, info.col, info.editingText.substring(0, 10));
-                }
-            } else if (info.col === posCol) {
-                if (info.editingText.length > 50) {
-                    info.sheet.setText(info.row, info.col, info.editingText.substring(0, 50));
+            if (info.editingText) {
+                if (info.col === spCol || info.col === epCol) {
+                    if (info.editingText.length > 10) {
+                        info.sheet.setText(info.row, info.col, info.editingText.substring(0, 10));
+                    }
+                } else if (info.col === posCol) {
+                    if (info.editingText.length > 50) {
+                        info.sheet.setText(info.row, info.col, info.editingText.substring(0, 50));
+                    }
                 }
             }
             spreadObj.mergePeg(info.row);
@@ -138,13 +141,52 @@ const NewMergePeg = function (setting) {
                 rows.push(iRow);
             }
             spreadObj.mergePeg(rows);
-        }
+        },
+        checkEmptyRow: function () {
+            let nonEmptyRow = -1, count = sheet.getRowCount();
+            for (let iRow = count - 1; iRow >= 0; iRow--) {
+                const sp = sheet.getText(iRow, spCol);
+                const ep = sheet.getText(iRow, epCol);
+                const p = sheet.getText(iRow, posCol);
+                if (sp !== '' || ep !== '' || p !== '') {
+                    nonEmptyRow = iRow;
+                    break;
+                }
+            }
+            if (nonEmptyRow >= 0 && count - nonEmptyRow <= 3) {
+                sheet.addRows(nonEmptyRow + 1, 4 + nonEmptyRow - count);
+            }
+        },
     };
     spread.bind(spreadNS.Events.EditStarting, spreadObj.editStarting);
     spread.bind(spreadNS.Events.ClipboardPasted, spreadObj.clipboardPasted);
     spread.bind(spreadNS.Events.EditEnded, spreadObj.editEnded);
     SpreadJsObj.addDeleteBind(spread, spreadObj.deletePress);
     SpreadJsObj.addCutEvents(spread, spreadObj.cut);
+    $.contextMenu({
+        selector: '#mp-spread',
+        build: function ($trigger, e) {
+            const target = SpreadJsObj.safeRightClickSelection($trigger, e, spread);
+            return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
+        },
+        items: {
+            'create': {
+                name: '新增行',
+                icon: 'fa-sign-in',
+                callback: function (key, opt) {
+                    sheet.addRows(sheet.getRowCount(), 1);
+                },
+            },
+            'delete': {
+                name: '删除行',
+                icon: 'fa-remove',
+                callback: function (key, opt) {
+                    const sel = sheet.getSelections()[0];
+                    sheet.deleteRows(sel.row, sel.rowCount);
+                },
+            },
+        }
+    });
 
     // 勾选位置
     $('#mp-with-pos').click(() => {spreadObj.mergePeg();});
@@ -171,11 +213,13 @@ const NewMergePeg = function (setting) {
         if (setting.callback) {
             setting.callback(spreadObj.getPegs());
         }
+        clearInterval(siHandle);
         $('#merge-peg').modal('hide');
     });
 
     const showModal = function () {
         $('#merge-peg').modal('show');
+         siHandle = setInterval(spreadObj.checkEmptyRow, 500);
     };
     return {show: showModal};
 };

+ 5 - 0
app/public/js/stage.js

@@ -2243,6 +2243,7 @@ $(document).ready(() => {
                 updateData.bw = $('#bw-name').val();
                 updateData.peg = $('#peg').val();
                 updateData.xm = $('#xm-name').val();
+                updateData.position = $('#position').val();
                 updateData.drawing_code = $('#drawing-code').val();
                 updateData.calc_memo = $('#calc-memo').val();
                 postData(window.location.pathname + '/detail/save', updateData, function (result) {
@@ -2470,6 +2471,10 @@ $(document).ready(() => {
             $('#show-bw-name').text(bwName);
             $('#bw-name').val(bwName);
 
+            const position = data && data.position ? data.position : '';
+            $('#show-position').text(position);
+            $('#position').val(position);
+
             const peg = data && data.peg ? data.peg : '';
             $('#show-peg').text(peg);
             $('#peg').val(peg);

+ 6 - 2
app/public/js/stage_im.js

@@ -9,7 +9,7 @@
  */
 
 const stageIm = (function () {
-    const imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_img'];
+    const imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_img', 'position'];
     const splitChar = '-';
     const mergeChar = ';';
     let stage, imType, details, changes, ImData, pre;
@@ -411,6 +411,7 @@ const stageIm = (function () {
                 jl: node.gather_tp, contract_jl: node.contract_tp, qc_jl: node.qc_tp,
                 //im_code: getNewImCode(),
                 peg: peg ? getPegStr(peg.name) : '', drawing_code: getDrawingCode(node),
+                position: '',
             };
             if (stage.im_gather && node.check) {
                 im.bw = getZlGatherBw(node, peg);
@@ -512,7 +513,8 @@ const stageIm = (function () {
                 im = {
                     lid: node.id, pid: '', code: p.b_code, name: p.name, unit: p.unit, unit_price: p.unit_price,
                     jl: 0, contract_jl: 0, qc_jl: 0,
-                    peg: peg ? getPegStr(peg.name) : ''
+                    peg: peg ? getPegStr(peg.name) : '',
+                    position: '',
                 };
                 if (stage.im_gather && node.check) {
                     im.bw = getZlGatherBw(node, peg);
@@ -557,6 +559,7 @@ const stageIm = (function () {
                         xm: pp.name,
                         drawing_code: pp.drawing_code,
                         changes: [],
+                        position: pp.position,
                     };
                     im.calc_memo = '本期计量:' + im.jl + ' ' + im.unit;
                     checkCustomDetail(im);
@@ -581,6 +584,7 @@ const stageIm = (function () {
                     xm: node.name,
                     drawing_code: getDrawingCode(p),
                     changes: [],
+                    position: '',
                 };
                 im.calc_memo = '本期计量:' + im.jl + ' ' + im.unit;
                 checkCustomDetail(im);

+ 9 - 4
app/service/stage_pos.js

@@ -225,22 +225,26 @@ module.exports = app => {
             const result = {ledger: [], pos: [], stageUpdate: true}, ledgerCalc = [];
             const datas = data instanceof Array ? data : [data];
             const orgPos = await this.ctx.service.pos.getPosDataByIds(this._.map(datas, 'pid'));
-            const orgStagePos = await this.getLastestStageData2(this.ctx.tender.id, this.ctx.stage.id, {pid: this._.map(datas, 'pid')});
+            const orgStagePos = await this.getLastestStageData2(this.ctx.tender.id, this.ctx.stage.id,
+                {pid: this._.map(datas, 'pid')});
 
             const transaction = await this.db.beginTransaction();
             try {
                 for (const d of datas) {
-                    if (d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined || d.contract_qty !== undefined || d.qc_qty !== undefined) {
+                    if (d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined
+                        || d.contract_qty !== undefined || d.qc_qty !== undefined) {
                         if (!bills || bills.id !== data.lid) {
                             bills = await this.ctx.service.ledger.getDataById(d.lid);
                             precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, bills.unit);
                         }
                     }
-                    if (d.name !== undefined || d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined || d.drawing_code !== undefined) {
+                    if (d.name !== undefined || d.drawing_code !== undefined || d.position !== undefined
+                        || d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined) {
                         const op = this._.find(orgPos, {id: d.pid});
                         if (op.add_stage !== this.ctx.stage.id) throw '不可修改数据';
                         const p = {id: d.pid};
                         if (d.name !== undefined) p.name = d.name;
+                        if (d.position !== undefined) p.position = d.position;
                         if (d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined) {
                             p.sgfh_qty = d.sgfh_qty !== undefined ? d.sgfh_qty : op.sgfh_qty;
                             p.sjcl_qty = d.sjcl_qty !== undefined ? d.sjcl_qty : op.sjcl_qty;
@@ -293,7 +297,8 @@ module.exports = app => {
                     }
                     result.pos.push(d.pid);
                     if ((d.sgfh_qty !== undefined || d.qtcl_qty !== undefined || d.sjcl_qty !== undefined ||
-                            d.contract_qty === undefined || d.qc_qty === undefined) && (result.ledger.indexOf(d.lid) === -1)) {
+                            d.contract_qty === undefined || d.qc_qty === undefined)
+                         && (result.ledger.indexOf(d.lid) === -1)) {
                         result.ledger.push(d.lid);
                     }
                 }

+ 8 - 1
app/view/stage/index.ejs

@@ -128,6 +128,7 @@
                                 <tr><th>部位</th><td id="show-bw-name"></td></tr>
                                 <tr><th>起止桩号</th><td id="show-peg"></td></tr>
                                 <tr><th>细目</th><td id="show-xm-name"></td></tr>
+                                <tr><th>位置</th><td id="show-position"></td></tr>
                                 <tr><th>图册号</th><td id="show-drawing-code"></td></tr>
                                 <tr><th colspan="2">计算式说明</th></tr>
                                 <tr><td colspan="2" id="show-calc-memo" style="word-wrap:break-word"></td></tr>
@@ -147,7 +148,7 @@
                                     <div class="input-group-prepend">
                                         <span class="input-group-text" id="type-title-qc">本期变更计量数量</span>
                                     </div>
-                                    <input type="text" class="form-control" value="" id="qc-jl"readonly="">
+                                    <input type="text" class="form-control" value="" id="qc-jl" readonly="">
                                 </div>
                                 <div class="input-group input-group-sm mb-2">
                                     <div class="input-group-prepend">
@@ -181,6 +182,12 @@
                                 </div>
                                 <div class="input-group input-group-sm mb-2">
                                     <div class="input-group-prepend">
+                                        <span class="input-group-text"style="width: 66px">位置</span>
+                                    </div>
+                                    <input type="text" class="form-control" value="" id="position">
+                                </div>
+                                <div class="input-group input-group-sm mb-2">
+                                    <div class="input-group-prepend">
                                         <span class="input-group-text" style="width: 66px">图册号</span>
                                     </div>
                                     <input type="text" class="form-control" value="" id="drawing-code">