Jelajahi Sumber

调差上下移功能

laiguoran 3 tahun lalu
induk
melakukan
593cfc7852

+ 5 - 1
app/controller/material_controller.js

@@ -238,7 +238,7 @@ module.exports = app => {
                 searchsql.mid = midList;
             }
             // 取所有工料表
-            return await ctx.service.materialBills.getAllDataByCondition({ where: searchsql });
+            return await ctx.service.materialBills.getAllDataByCondition({ where: searchsql, orders: [['order', 'asc']] });
         }
 
         /**
@@ -261,6 +261,7 @@ module.exports = app => {
                         unit: mbd.unit,
                         origin: mbd.origin,
                         mb_id: mbd.id,
+                        order: mbd.order,
                     };
                     for (const m of material_month) {
                         const mb_id = ctx.material.highOrder !== ctx.material.order ? mbd.mb_id : mbd.id;
@@ -572,6 +573,9 @@ module.exports = app => {
                     case 'del':
                         responseData.data.m_tp = await ctx.service.materialBills.del(data.id);
                         break;
+                    case 'changeOrder':
+                        responseData.data = await ctx.service.materialBills.changeOrder(data.id1, data.id2);
+                        break;
                     case 'update':
                         if (data.updateData.code === '' || data.updateData.code === null) {
                             throw '请先输入编号';

+ 71 - 1
app/public/js/material.js

@@ -226,6 +226,8 @@ $(document).ready(() => {
             const select = SpreadJsObj.getSelectObject(sheet);
             // 还需判断是否已被调差清单调用
             setObjEnable($('#del'), !readOnly && select && materialBase.isUsed(select) && rowCount === 1);
+            setObjEnable($('#up-move'), !readOnly && select && materialBillsData.indexOf(select) > 0);
+            setObjEnable($('#down-move'), !readOnly && select && materialBillsData.indexOf(select) < materialBillsData.length - 1);
         },
         add: function () {
             const sheet = materialSpread.getActiveSheet();
@@ -239,7 +241,7 @@ $(document).ready(() => {
                     materialSpreadObj.refreshActn();
                     // 月信息价需要同时添加空白的list
                     if (months.length > 0) {
-                        const one_month ={ mb_id: result.id, code: '', name: null, unit: null, };
+                        const one_month ={ mb_id: result.id, code: '', name: null, origin: null, unit: null, order: result.order };
                         for (const m of months) {
                             one_month[m] = null;
                         }
@@ -271,6 +273,72 @@ $(document).ready(() => {
                 }
             });
         },
+        upMove: function () {
+            const sheet = materialSpread.getActiveSheet();
+            const cur = SpreadJsObj.getSelectObject(sheet);
+            const up = materialBillsData[materialBillsData.indexOf(cur) - 1];
+            const mbIndex = materialBillsData.indexOf(cur);
+            postData(window.location.pathname + '/save', {type: 'changeOrder', id1: cur.id, id2: up.id}, function () {
+                const order = cur.order;
+                cur.order = up.order;
+                up.order = order;
+                materialBillsData.sort(function (a, b) {
+                    return a.order - b.order
+                });
+                SpreadJsObj.reLoadSheetData(sheet);
+                const sel = sheet.getSelections();
+                const index = materialBillsData.indexOf(cur);
+                sheet.setSelection(index, sel.length > 0 ? sel[0].col : 0, 1, 1);
+                materialSpreadObj.refreshActn();
+                if (months.length > 0) {
+                    const monthCur = monthsList[mbIndex];
+                    const monthUp = monthsList[mbIndex - 1];
+                    const monthOrder = monthCur.order;
+                    monthCur.order = monthUp.order;
+                    monthUp.order = monthOrder;
+                    monthsList.sort(function (a, b) {
+                        return a.order - b.order
+                    });
+                    const materialMonthSheet = materialMonthSpread.getActiveSheet();
+                    SpreadJsObj.reLoadSheetData(materialMonthSheet);
+                }
+            });
+        },
+        downMove: function () {
+            const sheet = materialSpread.getActiveSheet();
+            const cur = SpreadJsObj.getSelectObject(sheet);
+            const down = materialBillsData[materialBillsData.indexOf(cur) + 1];
+            const mbIndex = materialBillsData.indexOf(cur);
+            postData(window.location.pathname + '/save', {
+                type: 'changeOrder',
+                id1: cur.id,
+                id2: down.id
+            }, function () {
+                const order = cur.order;
+                cur.order = down.order;
+                down.order = order;
+                materialBillsData.sort(function (a, b) {
+                    return a.order - b.order
+                });
+                SpreadJsObj.reLoadSheetData(sheet);
+                const sel = sheet.getSelections();
+                const index = materialBillsData.indexOf(cur);
+                sheet.setSelection(index, sel.length > 0 ? sel[0].col : 0, 1, 1);
+                materialSpreadObj.refreshActn();
+                if (months.length > 0) {
+                    const monthCur = monthsList[mbIndex];
+                    const monthDown = monthsList[mbIndex + 1];
+                    const monthOrder = monthCur.order;
+                    monthCur.order = monthDown.order;
+                    monthDown.order = monthOrder;
+                    monthsList.sort(function (a, b) {
+                        return a.order - b.order
+                    });
+                    const materialMonthSheet = materialMonthSpread.getActiveSheet();
+                    SpreadJsObj.reLoadSheetData(materialMonthSheet);
+                }
+            });
+        },
         selectionChanged: function (e, info) {
             const sel = info.sheet.getSelections()[0];
             const col = info.sheet.zh_setting.cols[sel.col];
@@ -858,6 +926,8 @@ $(document).ready(() => {
     if (!readOnly) {
         $('#add').click(materialSpreadObj.add);
         $('#del').click(materialSpreadObj.del);
+        $('#up-move').click(materialSpreadObj.upMove);
+        $('#down-move').click(materialSpreadObj.downMove);
         materialSpread.bind(spreadNS.Events.EditEnded, materialSpreadObj.editEnded);
         materialSpread.bind(spreadNS.Events.ButtonClicked, materialSpreadObj.buttonClicked);
         materialMonthSpread.bind(spreadNS.Events.EditEnded, materialMonthSpreadObj.editEnded);

+ 40 - 0
app/service/material_bills.js

@@ -33,11 +33,13 @@ module.exports = app => {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
+            const order = await this._getMaxOrder(this.ctx.material.id);
             const transaction = await this.db.beginTransaction();
             try {
                 const newBills = {
                     tid: this.ctx.tender.id,
                     mid: this.ctx.material.id,
+                    order: order + 1,
                     in_time: new Date(),
                 };
                 // 新增工料
@@ -67,6 +69,13 @@ module.exports = app => {
             }
         }
 
+        async _getMaxOrder(materialId) {
+            const sql = 'SELECT Max(??) As value FROM ?? Where mid = ' + materialId;
+            const sqlParam = ['order', this.tableName];
+            const queryResult = await this.db.queryOne(sql, sqlParam);
+            return queryResult.value ? queryResult.value : 0;
+        }
+
         /**
          * 删除工料
          * @param {int} id 工料id
@@ -99,6 +108,37 @@ module.exports = app => {
         }
 
         /**
+         * 交换两个工料的顺序
+         * @param {Number} id1 - 工料1的id
+         * @param {Number} id2 - 工料2的id
+         * @returns {Promise<void>}
+         */
+        async changeOrder(id1, id2) {
+            if (!this.ctx.tender || !this.ctx.material) {
+                throw '数据错误';
+            }
+            const bill1 = await this.getDataByCondition({ tid: this.ctx.tender.id, id: id1 });
+            const bill2 = await this.getDataByCondition({ tid: this.ctx.tender.id, id: id2 });
+            if (!bill1 || !bill2) {
+                throw '数据错误';
+            }
+
+            const transaction = await this.db.beginTransaction();
+            try {
+                const order = bill1.order;
+                bill1.order = bill2.order;
+                bill2.order = order;
+                await transaction.update(this.tableName, { id: bill1.id, order: bill1.order });
+                await transaction.update(this.tableName, { id: bill2.id, order: bill2.order });
+                await transaction.commit();
+                return true;
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+        }
+
+        /**
          * 修改工料信息
          * @param {Object} data 工料内容
          * @return {void}

+ 2 - 0
app/view/material/info.ejs

@@ -8,6 +8,8 @@
                     <div class="d-inline-block">
                         <a href="javascript: void(0);" id="add" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增材料"><i class="fa fa-plus" aria-hidden="true"></i></a>
                         <a href="javascript: void(0);" id="del" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除材料"><i class="fa fa-remove" aria-hidden="true"></i></a>
+                        <a href="javascript: void(0);" id="down-move" class="btn btn-sm btn-light text-primary" 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);" id="up-move" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
                     </div>
                 <% } %>
                 <div class="d-inline-block ml-3">