Explorar el Código

0号台账,台账分解,合并起讫桩号

MaiXinRong hace 5 años
padre
commit
fa6e9838c3

+ 23 - 0
app/public/js/ledger.js

@@ -1452,6 +1452,22 @@ $(document).ready(function() {
                 $('#pos-expr').val('').attr('readOnly', true);
             }
         },
+        addPegs: function (pegs) {
+            if (!pegs || pegs.length <= 0) return;
+            const node = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
+            if (!node) return;
+
+            const sheet = posSpread.getActiveSheet();
+            const sortData = sheet.zh_data || [];
+            let order = sortData.length > 0 ? sortData[sortData.length - 1].porder + 1 : 1;
+            pegs.forEach(function (p) {p.porder = ++order; p.lid = node.id});
+
+            postData('/tender/' + getTenderId() + '/pos/paste', pegs, function (result) {
+                pos.updateDatas(result.pos);
+                posOperationObj.loadCurPosData();
+                treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet());
+            });
+        }
     };
     posSpread.bind(spreadNS.Events.SelectionChanged, posOperationObj.selectionChanged);
     if (!posSpreadSetting.readOnly) {
@@ -1496,6 +1512,7 @@ $(document).ready(function() {
         posSpread.bind(spreadNS.Events.EditStarting, posOperationObj.editStarting);
         posSpread.bind(spreadNS.Events.EditEnded, posOperationObj.editEnded);
         posSpread.bind(spreadNS.Events.ClipboardPasted, posOperationObj.clipboardPasted);
+        const mergePeg = NewMergePeg({ callback: posOperationObj.addPegs });
         // 右键菜单
         $.contextMenu({
             selector: '#pos-spread',
@@ -1520,6 +1537,12 @@ $(document).ready(function() {
                         posOperationObj.deletePos(posSpread.getActiveSheet());
                     }
                 },
+                'merge-peg': {
+                    name: '合并起讫桩号',
+                    callback: function (key, opt) {
+                        mergePeg.show();
+                    }
+                }
             }
         });
     } else {

+ 157 - 0
app/public/js/shares/merge_peg.js

@@ -0,0 +1,157 @@
+'use strict';
+
+/**
+ * 依赖jQuery, lodash, spreadjs,请放在spreadjs_zh.js之后
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+const NewMergePeg = function (setting) {
+    const spread = SpreadJsObj.createNewSpread($('#mp-spread')[0]);
+    const sheet = spread.getActiveSheet();
+    const spreadSetting = {
+        cols: [
+            {title: '起始桩号', field: 'start-peg', hAlign: 0, width: 80, formatter: '@'},
+            {title: '终止桩号', field: 'end-peg', hAlign: 0, width: 80, formatter: '@'},
+            {title: '位置', field: 'peg-pos', hAlign: 0, width: 60, formatter: '@'},
+            {title: '合并结果', field: 'peg', hAlign: 0, width: 180, formatter: '@'},
+        ],
+        emptyRows: 3,
+        headRows: 1,
+        headRowHeight: [32],
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+    };
+    const findCol = function (field) {
+        return _.findIndex(spreadSetting.cols, function (c) {return c.field === field});
+    };
+    const spCol = findCol('start-peg'), epCol = findCol('end-peg'), posCol = findCol('peg-pos'), pegCol = findCol('peg');
+    SpreadJsObj.initSheet(sheet, spreadSetting);
+    sheet.setColumnWidth(0, 30, spreadNS.SheetArea.rowHeader);
+    const spreadObj = {
+        mergePeg(row) {
+            const withPos = $('#mp-with-pos')[0].checked
+            const sprChar = '~', withSprChar = $('#mp-with-spr-char')[0].checked;
+            const mergeRow = function (row) {
+                const startPeg = _.trim(sheet.getText(row, spCol));
+                const endPeg = _.trim(sheet.getText(row, epCol));
+                let peg;
+                if (startPeg !== '') {
+                    peg = endPeg !== ''
+                        ? (withSprChar && endPeg.indexOf(sprChar) !== 0 ? startPeg + sprChar + endPeg : startPeg + endPeg)
+                        : startPeg;
+                } else {
+                    peg = endPeg !== '' ? endPeg : '';
+                }
+                if (withPos) {
+                    peg = _.trim(sheet.getText(row, posCol)) + peg;
+                }
+                sheet.setText(row, pegCol, peg);
+            };
+            if (row) {
+                const rows = row instanceof Array ? row : [row];
+                if (row instanceof Array) {
+                    for (const r of rows) {
+                        mergeRow(r)
+                    }
+                }
+            } else {
+                for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
+                    mergeRow(iRow);
+                }
+            }
+        },
+        getPegs() {
+            const result = [];
+            for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
+                const peg = sheet.getText(iRow, pegCol);
+                if (peg !== '') {
+                    result.push({name: peg});
+                }
+            }
+            return result;
+        },
+        editStarting(e, info) {
+            if (!info.sheet.zh_setting) return;
+            const col = info.sheet.zh_setting.cols[info.col];
+            switch (col.field) {
+                case 'peg':
+                    info.cancel = true;
+                    break;
+            }
+        },
+        clipboardPasted: function (e, info) {
+            spreadObj.mergePeg();
+        },
+        deletePress: function (sheet) {
+            if (!sheet.zh_setting) return;
+
+            const sel = sheet.getSelections()[0], row = [];
+            for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
+                for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
+                    if (iCol !== pegCol) {
+                        sheet.setText(iRow, iCol, '');
+                    }
+                }
+                row.push(iRow);
+            }
+            spreadObj.mergePeg(row);
+        },
+        editEnded: function (e, info) {
+            spreadObj.mergePeg(info.row);
+        },
+        cut: function (sheet, sel, callback) {
+            if (!sheet || !sel) return;
+
+            callback();
+            const rows = [];
+            for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
+                for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
+                    sheet.setText(iRow, iCol, '');
+                }
+                rows.push(iRow);
+            }
+            spreadObj.mergePeg(rows);
+        }
+    };
+    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);
+
+    // 勾选位置
+    $('#mp-with-pos').click(() => {spreadObj.mergePeg();});
+    // 勾选桩号连接符
+    $('#mp-with-spr-char').click(function () {
+        if (this.checked) {
+            $('#mp-spr-char').show();
+        } else {
+            $('#mp-spr-char').hide();
+        }
+        spreadObj.mergePeg();
+    });
+    // 选择连接符
+    $('select', '#merge-peg').change(() => {spreadObj.mergePeg()});
+    // 初始化窗口
+    $('#merge-peg').on('show.bs.modal', function () {
+        sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(),
+            spreadNS.SheetArea.viewport, spreadNS.StorageType.data);
+    });
+    $('#merge-peg').on('shown.bs.modal', function () {
+        spread.refresh();
+    });
+    $('#mp-ok').click(() => {
+        if (setting.callback) {
+            setting.callback(spreadObj.getPegs());
+        }
+        $('#merge-peg').modal('hide');
+    });
+
+    const showModal = function () {
+        $('#merge-peg').modal('show');
+    };
+    return {show: showModal};
+};

+ 1 - 1
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -88,7 +88,7 @@ const SpreadJsObj = {
         return spread;
     },
     addCutEvents: function (spread, fun) {
-        const cut = spreadNS.Commands.cut.execute;
+        const cut = spreadNS.Commands.copy.execute;
         spreadNS.Commands.cut.execute = function (context, options, isUndo) {
             const sheet = context.getActiveSheet();
             const sels = sheet.getSelections();

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

@@ -401,3 +401,4 @@
     </div>
 </div>
 <% } %>
+<% include ../shares/merge_peg_modal.ejs %>

+ 45 - 0
app/view/shares/merge_peg_modal.ejs

@@ -0,0 +1,45 @@
+<!--合并起讫桩号-->
+<div class="modal fade" id="merge-peg" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">合并起讫桩号</h5>
+            </div>
+            <div class="modal-body">
+                <div class="mb-2">
+                    <div class="d-inline-block mr-3">
+                        <div class="form-check">
+                            <input class="form-check-input" type="checkbox" value="" id="mp-with-pos">
+                            <label class="form-check-label" for="defaultCheck1">
+                                合并位置
+                            </label>
+                        </div>
+                    </div>
+                    <div class="d-inline-block">
+                        <div class="form-check">
+                            <input class="form-check-input" type="checkbox" value="" id="mp-with-spr-char">
+                            <label class="form-check-label" for="defaultCheck3">
+                                桩号连接符
+                            </label>
+                        </div>
+                    </div>
+                    <div class="d-inline-block" style="display: none;" id="mp-spr-char" style="display: none">
+                        <select class="form-control form-control-sm m-0">
+                            <option value="~">~(半角)</option>
+                            <option value="-">-(半角)</option>
+                            <option value="~">~(全角)</option>
+                            <option value="-">-(全角)</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="modal-height-500" id="mp-spread">
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                <a href="javascript: void(0);" class="btn btn-sm btn-primary" id="mp-ok">确定</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 需引入/common_modal/merge_peg.js-->

+ 1 - 0
config/web.js

@@ -133,6 +133,7 @@ const JsFiles = {
                     "/public/js/div_resizer.js",
                     "/public/js/spreadjs_rela/spreadjs_zh.js",
                     "/public/js/ledger_search.js",
+                    "/public/js/shares/merge_peg.js",
                     "/public/js/zh_calc.js",
                     "/public/js/path_tree.js",
                     "/public/js/ledger_tree_col.js",