Explorar o código

1.新增工料机页面修改后同步更改数据库
2.修改model基类方法

caiaolin %!s(int64=8) %!d(string=hai) anos
pai
achega
64fe6834cf

+ 18 - 0
modules/common/base/base_model.js

@@ -98,6 +98,24 @@ class BaseModel {
         return result;
     }
 
+    /**
+     * 更新数据
+     *
+     * @param {Number} id
+     * @param {Object} updateData
+     * @return {Promise}
+     */
+    async updateById(id, updateData) {
+        id = parseInt(id);
+        if (isNaN(id) || id <= 0 || Object.keys(updateData).length <= 0) {
+            return false;
+        }
+
+        let result = await this.db.update({id: id}, updateData);
+
+        return result.ok !== undefined && result.ok === 1;
+    }
+
 }
 
 export default BaseModel;

+ 20 - 0
modules/common/helper/mongoose_helper.js

@@ -160,6 +160,26 @@ class MongooseHelper {
         });
     }
 
+    /**
+     * 更新数据
+     *
+     * @param {Object} condition
+     * @param {Object} updateData
+     * @return {Promise}
+     */
+    update(condition, updateData) {
+        let self = this;
+        return new Promise(function(resolve, reject) {
+            self.model.update(condition, {$set: updateData}, function(error, data) {
+                if (error) {
+                    reject(error);
+                } else {
+                    resolve(data);
+                }
+            });
+        });
+    }
+
 }
 
 export default MongooseHelper;

+ 70 - 9
modules/glj/controllers/glj_controller.js

@@ -54,6 +54,67 @@ class GLJController extends BaseController {
     }
 
     /**
+     * 更新数据
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    async updateData(request, response) {
+        let field = request.body.field;
+        let value = request.body.value;
+        value = value === 'true' ? 1 : value;
+        value = value === 'false' ? 0 : value;
+        let id = request.body.id;
+
+        let responseData = {
+            err: 0,
+            msg: ''
+        };
+        try {
+            // 可编辑的字段
+            let editableField = ['is_evaluate', 'unit_price.market_price', 'is_adjust_price'];
+            if (editableField.indexOf(field) < 0) {
+                throw '对应字段不能编辑';
+            }
+
+            let modelString = 'glj';
+            // 切割字段
+            let fieldArray = field.split('.');
+            modelString = fieldArray.length > 1 ? fieldArray[0] : modelString;
+            field = fieldArray.length > 1 ? fieldArray[1] : field;
+
+            let model = null;
+            switch (modelString) {
+                case 'glj':
+                    model = new GLJListModel();
+                    break;
+                case 'unit_price':
+                    model = new UnitPriceModel();
+                    break;
+            }
+
+            if (!model) {
+                throw '创建模块失败!';
+            }
+            // 组合数据
+            let updateData = new Object();
+            updateData[field] = value;
+
+            // 更新数据
+            let result = await model.updateById(id, updateData);
+            if (!result) {
+                throw '更新失败';
+            }
+        } catch (error) {
+            console.log('error:' + error);
+            responseData.err = 1;
+        }
+
+        response.json(responseData);
+    }
+
+    /**
      * 模拟定额插入
      *
      * @param {object} request
@@ -63,17 +124,17 @@ class GLJController extends BaseController {
     async test(request, response) {
         // 从定额库获取的数据
         let data = {
-            glj_repository_id: 1,
+            glj_repository_id: 3,
             project_id: 1,
             tender_id: 1,
-            code: '00010201',
-            name: '土石方综合工日',
-            specs: '',
-            unit: '工日',
-            type: 2,
-            type_of_work: 2,
-            base_price: 38.88,
-            market_price: 38.88
+            code: '01010101',
+            name: '水泥',
+            specs: '32.5',
+            unit: 'kg',
+            type: 5,
+            type_of_work: 5,
+            base_price: 28.76,
+            market_price: 28.76
         };
         try {
             let gljListModel = new GLJListModel();

+ 1 - 1
modules/glj/models/glj_list_model.js

@@ -163,7 +163,7 @@ class GLJListModel extends BaseModel {
         data.id = await counterModel.getId(gljCollectionName);
 
         this.setScene('add');
-        let result = await this.db.model.create(data);
+        let result = await this.db.create(data);
         return result;
     }
 

+ 0 - 24
modules/glj/models/unit_price_model.js

@@ -71,30 +71,6 @@ class UnitPriceModel extends BaseModel {
     }
 
     /**
-     * 新增单价文件
-     *
-     * @param {Object} data
-     * @return {Promise}
-     */
-    async addData(data) {
-        let result = false;
-        try {
-            // 首先查找是否有相同的记录
-            let unitPriceData = await this.db.model.findOne({code: data.code, market_price: data.market_price});
-            if (unitPriceData && unitPriceData.id > 0) {
-                return true;
-            }
-
-            // 没有则新增数据
-            result = this.db.model.create(data);
-        } catch (error) {
-            result = false;
-        }
-
-        return result;
-    }
-
-    /**
      * 更新单价文件(定额中修改价格时调用)
      *
      * @param {Object} data

+ 2 - 0
modules/glj/routes/glj_router.js

@@ -13,6 +13,8 @@ let gljController = new GLJController();
 
 // action定义区域
 router.get('/', gljController.init, gljController.index);
+router.post('/update', gljController.init, gljController.updateData);
+
 router.get('/test', gljController.init, gljController.test);
 router.get('/testModify', gljController.init, gljController.testModify);
 router.get('/testDelete', gljController.init, gljController.delete);

+ 2 - 2
modules/users/models/user_model.js

@@ -150,7 +150,7 @@ class UserModel extends BaseModel {
             create_time: new Date().getTime(),
             area: 0
         };
-        return this.db.model.create(insertData);
+        return this.db.create(insertData);
     }
 
     /**
@@ -163,7 +163,7 @@ class UserModel extends BaseModel {
         if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) {
             return null;
         }
-        return this.db.model.update(condition, updateData);
+        return this.db.update(condition, updateData);
     }
 
 }

+ 1 - 1
server.js

@@ -13,7 +13,7 @@ let path = require('path');
 let session = require('express-session');
 let DBStore = require('connect-mongo')(session);
 
-let URL = require('url')
+let URL = require('url');
 
 dbm.connect();
 //这里现在只引入了定额工料机里的models,当其它模块的models修改后使用:./modules/**/models/*.js引入所有的模块

+ 89 - 6
web/glj/js/glj_index.js

@@ -25,7 +25,10 @@ $(document).ready(function () {
         {name: '交货方式', field: 'delivery', visible: true},
         {name: '送达地点', field: 'delivery_address', visible: true},
         {name: '不调价', field: 'is_adjust_price', visible: true, cellType: new GC.Spread.Sheets.CellTypes.CheckBox()},
+        {name: 'UID', field: 'unit_price.id', visible: false},
     ];
+    // 数据转换格式
+    let sourceData = JSON.parse(jsonData);
 
     let setting = {
         header: []
@@ -34,7 +37,7 @@ $(document).ready(function () {
         setting.header.push({headerName: tmp.name, headerWidth: 120});
     }
 
-    let spread = sheetCommonObj.buildSheet(document.getElementById("test"), setting, 3);
+    let spread = sheetCommonObj.buildSheet(document.getElementById("test"), setting, sourceData.length);
     spread.options.scrollbarShowMax = true;
     spread.options.scrollbarMaxAlign = true;
     spread.options.showHorizontalScrollbar = true;
@@ -63,7 +66,6 @@ $(document).ready(function () {
     sheet.getRange(-1, 16, -1, 1).locked(false);
 
     // 设置json数据
-    let sourceData = JSON.parse(jsonData);
     let rowCounter = 0;
     for(let data of sourceData) {
         let columnCounter = 0;
@@ -82,7 +84,7 @@ $(document).ready(function () {
             }
 
             // 如果不为材料“是否暂估列”根据条件显示
-            if (columnInfo.field === 'is_evaluate' && materialIdList.indexOf(data.type + '') < 0) {
+            if (columnInfo.field === 'is_evaluate' && materialIdList.indexOf(data.unit_price.type + '') < 0) {
                 let string = new GC.Spread.Sheets.CellTypes.Text();
                 sheet.setCellType(rowCounter, columnCounter, string, GC.Spread.Sheets.SheetArea.viewport);
                 cellData = '';
@@ -133,9 +135,61 @@ $(document).ready(function () {
     sheet.bind(GC.Spread.Sheets.Events.EditEnding, function (element, info) {
         initiativeChange = true;
     });
-
+ */
     // 绑定事件
-    sheet.bind(GC.Spread.Sheets.Events.CellChanged, function (element, info) {
+    let isChanging = false;
+    sheet.bind(GC.Spread.Sheets.Events.ValueChanged, function (element, info) {
+        // 获取修改的数据
+        let column = info.col;
+        let row = info.row;
+        let model = 'glj';
+        let idString = 'id';
+        let field = header[column] !== undefined && header[column].field !== undefined ?
+            header[column].field : '';
+        if (field === '') {
+            return false;
+        }
+
+        // 切割字段
+        let fieldArray = field.split('.');
+        idString = fieldArray.length > 1 ? 'unit_price.id' : idString;
+
+        // 防止快速同时提交
+        if (isChanging) {
+            return false;
+        }
+
+        // 获取id
+        let idColumn = getFieldColumn(header, idString);
+        if (idColumn < 0) {
+            return false;
+        }
+        let id = sheet.getValue(row, idColumn);
+
+        $.ajax({
+            url: '/glj/update',
+            type: 'post',
+            data: {id: id, field: field, value: info.newValue, model: model},
+            dataType: 'json',
+            error: function() {
+                alert('数据传输有误!');
+                isChanging = false;
+            },
+            beforeSend: function() {
+                isChanging = true;
+            },
+            success: function(response) {
+                isChanging = false;
+                // 修改失败则恢复原值
+                if (response.err !== 0) {
+                    sheet.setValue(row, column, info.oldValue);
+                    alert('更改数据失败!');
+                } else {
+                    // 成功
+                }
+            }
+        });
+        /*
         // 如果修改了数据且为主动修改,先存库再广播给其他页面
         if (info.newValue !== undefined && info.oldValue !== undefined && initiativeChange) {
             let id = sheet.getCell(info.row, 0).value();
@@ -160,13 +214,42 @@ $(document).ready(function () {
                 }
             });
         }
+        */
     });
-*/
+
 });
 
+/**
+ * 生成样式
+ *
+ * @param {object} setting
+ * @return {object}
+ */
 function getStyle(setting) {
     let style = new GC.Spread.Sheets.Style();
     style.locked = setting.readOnly === undefined ? true : setting.readOnly;
     style.hAlign = setting.hAlign === undefined ? GC.Spread.Sheets.HorizontalAlign.center : setting.hAlign;
     return style;
+}
+
+/**
+ * 查找指定字段的列index
+ *
+ * @param {object} data
+ * @param {String} field
+ * @return {Number}
+ */
+function getFieldColumn(data, field) {
+    let result = -1;
+    if (data.length <= 0) {
+        return result;
+    }
+    for (let tmp in data) {
+        if (data[tmp].field === field) {
+            result = tmp;
+            break;
+        }
+    }
+
+    return result;
 }