浏览代码

1. 台账修订,清单对比,清单排序
2. 台账修订,右键插入功能等

MaiXinRong 3 年之前
父节点
当前提交
6016e05b64
共有 4 个文件被更改,包括 104 次插入60 次删除
  1. 2 0
      app/controller/revise_controller.js
  2. 53 59
      app/public/js/revise.js
  3. 2 1
      app/public/js/shares/gcl_gather_compare.js
  4. 47 0
      app/service/revise_pos.js

+ 2 - 0
app/controller/revise_controller.js

@@ -647,6 +647,8 @@ module.exports = app => {
                     return await this.ctx.service.revisePos.deletePos(revise.tid, data.postData);
                 case 'paste':
                     return await this.ctx.service.revisePos.pastePosData(revise.tid, revise.id, data.postData);
+                case 'insert':
+                    return await this.ctx.service.revisePos.insertPos(revise.tid, revise.id, data.postData);
                 default:
                     throw '未知操作';
             }

+ 53 - 59
app/public/js/revise.js

@@ -1590,54 +1590,37 @@ $(document).ready(() => {
             }
 
             const data = {postType: 'pos'};
-            if (col.field === 'name') {
-                if (newText === '' && posData) {
-                    toastr.error('部位名称不可为空', 'error');
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                    return;
-                } else if (!posData) {
-                    if (newText && newText !== '') {
-                        data.posPostType = 'add';
-                        const sortData = info.sheet.zh_data;
-                        const order = (!sortData || sortData.length === 0) ? 1 : Math.max(sortData[sortData.length - 1].porder + 1, sortData.length + 1);
-                        data.postData = { name: newText, lid: node.id, porder: order};
-                    } else {
-                        return;
-                    }
-                } else {
-                    data.posPostType = 'update';
-                    data.postData = {id: posData.id, name: newText};
-                }
-            } else if (!posData) {
-                toastr.warning('新增计量单元请先输入名称');
-                SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                return;
+            if (!posData) {
+                const sortData = info.sheet.zh_data;
+                const order = (!sortData || sortData.length === 0) ? 1 : Math.max(sortData[sortData.length - 1].porder + 1, sortData.length + 1);
+                data.posPostType = 'add';
+                data.postData = { lid: node.id, porder: order };
             } else {
                 data.posPostType = 'update';
-                data.postData = {id: posData.id};
-                if (col.type === 'Number') {
-                    const exprInfo = getExprInfo(col.field);
-                    const num = _.toNumber(newText);
-                    if (_.isFinite(num)) {
-                        data.postData[col.field] = num;
+                data.postData = { id: posData.id };
+            }
+            if (col.type === 'Number') {
+                const exprInfo = getExprInfo(col.field);
+                const num = _.toNumber(newText);
+                if (_.isFinite(num)) {
+                    data.postData[col.field] = num;
+                    if (exprInfo) {
+                        data.postData[exprInfo.expr] = '';
+                    }
+                } else {
+                    try {
+                        data.postData[col.field] = math.evaluate(transExpr(newText));
                         if (exprInfo) {
-                            data.postData[exprInfo.expr] = '';
-                        }
-                    } else {
-                        try {
-                            data.postData[col.field] = math.evaluate(transExpr(newText));
-                            if (exprInfo) {
-                                data.postData[exprInfo.expr] = newText;
-                            }
-                        } catch(err) {
-                            toastr.error('输入的表达式非法');
-                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                            return;
+                            data.postData[exprInfo.expr] = newText;
                         }
+                    } catch(err) {
+                        toastr.error('输入的表达式非法');
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                        return;
                     }
-                } else {
-                    data.postData[col.field] = newText;
                 }
+            } else {
+                data.postData[col.field] = newText;
             }
             postData(window.location.pathname + '/update', data, function (result) {
                 const updateRst = pos.updateDatas(result.pos);
@@ -1671,10 +1654,6 @@ $(document).ready(() => {
                     const data = {id: node.id};
                     for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
                         const colSetting = sheet.zh_setting.cols[iCol];
-                        if (colSetting.field === 'name') {
-                            toastr.error('部位名称不能为空');
-                            return;
-                        }
                         const style = sheet.getStyle(iRow, iCol);
                         if (!style.locked) {
                             const colSetting = sheet.zh_setting.cols[iCol];
@@ -1704,6 +1683,23 @@ $(document).ready(() => {
                 });
             }
         },
+        insertPos: function (sheet) {
+            const selection = sheet.getSelections();
+            const sortData = sheet.zh_data;
+            const row = selection[0].row;
+            const node = SpreadJsObj.getSelectObject(billsSheet);
+            const data = {
+                postType: 'pos',
+                posPostType: 'insert',
+                postData: [ { lid: node.id, porder: Math.min(row + 1, sortData.length + 1) } ],
+            };
+            postData(window.location.pathname + '/update', data, function (result) {
+                const updateRst = pos.updateDatas(result.pos);
+                posSpreadObj.loadCurPosData();
+                billsTreeSpreadObj.refreshOperationValid(billsSheet);
+            });
+
+        },
         /**
          * 删除 计量单元
          * @param sheet
@@ -1765,15 +1761,7 @@ $(document).ready(() => {
 
             const data = [];
             const sortData = info.sheet.zh_data || [];
-            if (sortData.length === 0 || info.cellRange.row + info.cellRange.rowCount > sortData.length) {
-                if (info.cellRange.col !== 0) {
-                    toastr.warning('新增计量单元请先输入名称');
-                    posSpreadObj.loadCurPosData();
-                    return;
-                }
-            }
             const hint = {
-                name: {type: 'warning', msg: '计量单元名称不可为空,已过滤'},
                 expr: {type: 'warning', msg: '粘贴了表达式非法,已过滤'},
             };
             const lastOrder = sortData.length > 0 ? sortData[sortData.length - 1].porder + 1 : 1;
@@ -1803,11 +1791,6 @@ $(document).ready(() => {
                                 bPaste = false;
                             }
                         }
-                    } else if (colSetting.field === 'name') {
-                        if (!posData[colSetting.field]) {
-                            toastMessageUniq(hint.name);
-                            bPaste = false;
-                        }
                     }
                 }
                 if (bPaste) {
@@ -1911,6 +1894,17 @@ $(document).ready(() => {
                 return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
             },
             items: {
+                'insert': {
+                    name: '插入',
+                    icon: 'fa-plus',
+                    disabled: function (key, opt) {
+                        const node = SpreadJsObj.getSelectObject(billsSheet);
+                        return node && node.children && node.children.length > 0;
+                    },
+                    callback: function (key, opt) {
+                        posSpreadObj.insertPos(posSheet);
+                    }
+                },
                 'delete': {
                     name: '删除',
                     icon: 'fa-remove',

+ 2 - 1
app/public/js/shares/gcl_gather_compare.js

@@ -457,7 +457,8 @@ const gclCompareModel = (function () {
      */
     function checkDiffer() {
         gclList.sort((a, b) => {
-            return compareCode(a.b_code, b.b_code);
+            const iCode = compareCode(a.b_code, b.b_code);
+            return iCode ? iCode : (a.unit_price - b.unit_price);
         });
         for (const gcl of gclList) {
             gcl.differ = false;

+ 47 - 0
app/service/revise_pos.js

@@ -114,6 +114,53 @@ module.exports = app => {
             return {pos: data};
         }
 
+        async insertPos(tid, rid, data) {
+            if (!data.length) return;
+
+            let porder = data[0].porder, lid = data[0].lid;
+            for (const d of data) {
+                this._completeInsertPosData(tid, rid, d);
+                porder = Math.min(porder, d.porder);
+            }
+
+            const transaction = await this.db.beginTransaction();
+            try {
+                this.initSqlBuilder();
+                this.sqlBuilder.setAndWhere('lid', {
+                    value: this.db.escape(lid),
+                    operate: '=',
+                });
+                this.sqlBuilder.setAndWhere('porder', {
+                    value: porder,
+                    operate: '>=',
+                });
+                this.sqlBuilder.setUpdateData('porder', {
+                    value: data.length,
+                    selfOperate: '+',
+                });
+                const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
+                const result = await transaction.query(sql, sqlParam);
+                await transaction.insert(this.tableName, data);
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+
+            this.initSqlBuilder();
+            this.sqlBuilder.setAndWhere('lid', {
+                value: this.db.escape(lid),
+                operate: '=',
+            });
+            this.sqlBuilder.setAndWhere('porder', {
+                value: porder,
+                operate: '>=',
+            });
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            const update = await this.db.query(sql, sqlParam);
+            return { pos: update }
+        }
+
         async updatePos(tid, data) {
             if (data.sgfh_qty !== undefined || data.sjcl_qty !== undefined || data.qtcl_qty !== undefined) {
                 const op = await this.getDataById(data.id);