Browse Source

1.修改添加规则逻辑
2.修复添加规则bug
3.修改可调整高度样式

olym 7 năm trước cách đây
mục cha
commit
b43a86bdd6

+ 18 - 3
modules/main/controllers/bills_controller.js

@@ -2,7 +2,7 @@
  * Created by jimiz on 2017/4/7.
  */
 var billsData = require('../models/bills');
-
+let ProjectsData = require('../../pm/models/project_model').project;
 //统一回调函数
 var callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
@@ -54,9 +54,24 @@ module.exports = {
         const data = JSON.parse(request.body.data);
         const findSet = data.findSet;
         const updateData = data.updateData;
+        let settingData = {};
+        // 筛选出要保存在项目属性的设置
+        for (const index in updateData) {
+            if (updateData[index].field === 'addRule') {
+                settingData = updateData[index].value;
+                delete updateData[index];
+            }
+        }
+        // 更新项目属性
+        const propertyUpdateData = {
+            property: 'addRule',
+            data: settingData
+        };
+        const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData);
+
         const result = await billsData.updateBill(findSet, updateData);
-        const message = !result ? '修改失败' : '修改成功';
-        const err = !result ? 1 : 0;
+        const message = !result || !projectResult ? '修改失败' : '修改成功';
+        const err = !result || !projectResult ? 1 : 0;
         callback(request, response, err, message, null);
     }
 

+ 3 - 2
modules/main/models/bills.js

@@ -61,8 +61,6 @@ let billsSchema = new Schema({
     // 标记字段
     flags: [subSchema.flagsSchema],
     deleteInfo: deleteSchema,
-    // 添加规则
-    addRule: subSchema.addRuleSchema,
 });
 
 let bills = db.model("bills", billsSchema);
@@ -152,6 +150,9 @@ class billsModel extends baseModel {
         }
 
         for (const tmp of updateData) {
+            if (tmp === undefined) {
+                continue;
+            }
             update[tmp.field] = tmp.value;
         }
 

+ 1 - 16
modules/main/models/bills_sub_schemas.js

@@ -44,20 +44,5 @@ let itemCharacterSchema = new Schema({
     eigenvalue: [eigenvalueSchema],//特征值
     isChecked: Boolean //是否勾选(输出)
 }, {_id: false});
-// 添加规则字段
-let addRuleSchema = new Schema({
-    // 添加位置
-    position: Number,
-    // 添加内容
-    addContent: Number,
-    // 显示格式
-    displayFormat: Number,
-    // 特征生成方式
-    characterFormat: Number,
-    // 子目生成方式
-    childDisplayFormat: Number,
-    // 序号格式
-   serialType: Number,
-}, {_id: false});
 
-module.exports = {feesSchema: feesSchema, flagsSchema: flagsSchema, jobContentSchema: jobContentSchema, itemCharacterSchema: itemCharacterSchema, addRuleSchema};
+module.exports = {feesSchema: feesSchema, flagsSchema: flagsSchema, jobContentSchema: jobContentSchema, itemCharacterSchema: itemCharacterSchema};

+ 19 - 0
modules/pm/models/project_model.js

@@ -594,6 +594,25 @@ ProjectsDAO.prototype.changeUnitPriceFileInfo = async function(projectId, change
     return result.ok === 1;
 };
 
+/**
+ * 更新项目属性
+ *
+ * @param {Number} projectId - 项目id
+ * @param {Object} propertyData - 项目属性数据
+ * @return {Promise}
+ */
+ProjectsDAO.prototype.updateProjectProperty = async function(projectId, propertyData) {
+    projectId = parseInt(projectId);
+    if (isNaN(projectId) || projectId <= 0 || propertyData.property === undefined || propertyData.data === undefined) {
+        return false;
+    }
+    const updateData = {};
+    updateData["property." + propertyData.property] = propertyData.data;
+    let result = await Projects.update({ID: projectId}, updateData);
+
+    return result.ok === 1;
+};
+
 module.exports ={
     project: new ProjectsDAO(),
     projType: projectType,

+ 6 - 0
web/building_saas/css/main.css

@@ -328,4 +328,10 @@ label.title{
 
 .gc-column-header-cell{
     text-align: center!important;
+}
+div.resize{
+    height: 4px;
+    background: #f7f7f9;
+    width: 100%;
+    cursor: s-resize;
 }

+ 1 - 3
web/building_saas/main/html/main.html

@@ -84,6 +84,7 @@
                           <div class="top-content">
                               <div class="main-data-top" id="billsSpread"></div>
                           </div>
+                          <div class="resize"></div>
                           <div class="bottom-content">
                               <ul class="nav nav-tabs" role="tablist">
                                   <li class="nav-item">
@@ -107,9 +108,6 @@
                                   <li class="nav-item">
                                       <a class="nav-link" id="linkTZJNR" data-toggle="tab" href="#subSpread" role="tab">特征及内容</a>
                                   </li>
-                                  <li class="nav-item ml-auto mr-4">
-                                      <a class="nav-link text-muted position-absolute resize" data-toggle="tooltip" data-placement="bottom" title="按住,上下拖动调整高度"><i class="fa fa-arrows-v"></i></a>
-                                  </li>
                               </ul>
                               <!-- Tab panes -->
                               <div class="tab-content" id="tabCon">

+ 2 - 2
web/building_saas/main/js/main.js

@@ -68,7 +68,7 @@ function slideResize(rootElement, callback) {
         // 获取下部分的高度
         bottomContentHeight = bottomContentEle.height();
         // nav高度部分
-        navHeight = bottomContentEle.children('ul.nav').height();
+        navHeight = bottomContentEle.children('ul.nav').height() + 4;
         element.tooltip('hide');
     });
 
@@ -120,7 +120,7 @@ function loadSize(tag, callback) {
     if (topHeight === null || bottomHeight === null) {
         return;
     }
-    const navHeight = $("#"+ tag +" .bottom-content").children('ul.nav').height();
+    const navHeight = $("#"+ tag +" .bottom-content").children('ul.nav').height() + 4;
     topHeight = parseFloat(topHeight);
     bottomHeight = parseFloat(bottomHeight);
     $("#"+ tag +" .main-data-top").height(topHeight);

+ 49 - 102
web/building_saas/main/js/views/character_content_view.js

@@ -118,10 +118,13 @@ let contentOprObj = {
 
     },
     save: function () {
-        let me = contentOprObj;
-        let contentTxt = me.getColData(me.currentCache);
-        let txtObj =  {field: 'jobContentText', text: contentTxt ? contentTxt : ''};
-        pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet, {field: 'jobContent', updateArr: me.currentCache}, txtObj, contentOprObj);
+        let selectedNode = projectObj.mainController.tree.selected;
+        const setting = projectObj.project.property.addRule !== undefined ? projectObj.project.property.addRule : null;
+        pageCCOprObj.setCharacterBySetting(selectedNode, setting);
+        // let me = contentOprObj;
+        // let contentTxt = me.getColData(me.currentCache);
+        // let txtObj =  {field: 'jobContentText', text: contentTxt ? contentTxt : ''};
+        // pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet, {field: 'jobContent', updateArr: me.currentCache}, txtObj, contentOprObj);
     },
     onEditEnded: function (sender, args) {
         let me = contentOprObj;
@@ -348,6 +351,7 @@ let characterOprObj = {
     },
     //显示到清单项目特征列的数据
     getColData: function (itemsArr) {
+        console.log(111);
         let me = characterOprObj;
         let rstStr = "", count = 0;
         for(let i = 0, len = itemsArr.length; i < len; i++){
@@ -489,10 +493,13 @@ let characterOprObj = {
         }
     },
     save: function () {
-        let me = characterOprObj;
-        let characterTxt = me.getColData(me.currentCache);
-        let txtObj =  {field: 'itemCharacterText', text: characterTxt ? characterTxt : ''};
-        pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet, {field: 'itemCharacter', updateArr: me.currentCache}, txtObj, characterOprObj);
+        let selectedNode = projectObj.mainController.tree.selected;
+        const setting = projectObj.project.property.addRule !== undefined ? projectObj.project.property.addRule : null;
+        pageCCOprObj.setCharacterBySetting(selectedNode, setting);
+        // let me = characterOprObj;
+        // let characterTxt = me.getColData(me.currentCache);
+        // let txtObj =  {field: 'itemCharacterText', text: characterTxt ? characterTxt : ''};
+        // pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet, {field: 'itemCharacter', updateArr: me.currentCache}, txtObj, characterOprObj);
     },
     onEditStart: function (sender, args) {
         let me = characterOprObj;
@@ -640,6 +647,7 @@ let characterOprObj = {
 let pageCCOprObj = {
     currentFindSet: null,
     mainActiveCell: null,//mainSpread焦点单元格
+    nameCache: '',
     //获得造价书当前焦点行的类型:清单、定额
     isBillsType: function () {
         let rst = false;
@@ -777,14 +785,13 @@ let pageCCOprObj = {
      *
      * @param {Object} node - 节点数据
      * @param {Object} refreshData - 刷新的数据
-     * @param {Object} defaultData - 默认数据
      * @return {void}
      */
-    refreshView: function(node, refreshData, defaultData) {
+    refreshView: function(node, refreshData) {
         // 更新清单行特征列或内容列
         let updateCol = [
-            { name: 'character', col: 4 },
-            { name: 'content', col: 5 },
+            { name: 'itemCharacterText', col: 4 },
+            { name: 'jobContentText', col: 5 },
             { name: 'name', col: 2 }
         ];
         if (updateCol === '') {
@@ -794,15 +801,10 @@ let pageCCOprObj = {
         // 刷新输出显示
         for (const tmp of updateCol) {
             // 没有默认的数据则跳过刷新
-            if (defaultData[tmp.name] === undefined) {
-                continue;
-            }
-            // 不存在更新的数据则全部用默认数据替代
             if (refreshData[tmp.name] === undefined) {
-                projectObj.mainSpread.getActiveSheet().setValue(row, tmp.col, defaultData[tmp.name] + '');
-            } else {
-                projectObj.mainSpread.getActiveSheet().setValue(row, tmp.col, refreshData[tmp.name] + '');
+                continue;
             }
+            projectObj.mainSpread.getActiveSheet().setValue(row, tmp.col, refreshData[tmp.name] + '');
         }
         projectObj.mainSpread.getActiveSheet().autoFitRow(row);
     },
@@ -819,17 +821,22 @@ let pageCCOprObj = {
 
         // 保存的条件数据
         const findSet = { ID: node.data.ID, projectID: node.data.projectID };
+
         // 获取默认数据
         const defaultData = this.getDataBySetting(node, {
             serialType: "1",
             characterFormat: "2",
         });
-        // console.log(defaultData);return false;
         defaultData.character = defaultData.character.join("\r\n");
         defaultData.content = defaultData.content.join("\r\n");
 
         // 获取当前设置数据
         const currentData = this.getDataBySetting(node, setting);
+        let updateData = {
+            itemCharacterText: '',
+            jobContentText: '',
+            name: '',
+        };
 
         // 组合数据
         let content = '';
@@ -881,55 +888,42 @@ let pageCCOprObj = {
                 break;
         }
         // 添加到对应位置
-        let saveObj = [];
-        let refreshData = {};
-        saveObj.push({ field: 'addRule', value: setting });
         switch (setting.position) {
             case "1":
                 // 添加到项目特征列
-                saveObj.push({field: 'itemCharacterText', value: content});
-                // 还原名称及内容
-                saveObj.push({field: 'name', value: defaultData.name});
-                saveObj.push({field: 'jobContentText', value: defaultData.content});
-                // 刷新数据
-                refreshData = {'character': content};
+                updateData.itemCharacterText = content;
                 break;
             case "2":
                 // 添加到清单名称列
                 content = defaultData.name + "\r\n" + content;
-                saveObj.push({field: 'name', value: content});
-                // 还原特征及内容
-                saveObj.push({field: 'itemCharacterText', value: defaultData.character});
-                saveObj.push({field: 'jobContentText', value: defaultData.content});
-                // 刷新数据
-                refreshData = {'name': content};
+                updateData.name = content;
                 break;
             case "3":
                 // 添加到工作内容列
-                saveObj.push({field: 'jobContentText', value: content});
-                // 还原名称以及特征
-                saveObj.push({field: 'itemCharacterText', value: defaultData.character});
-                saveObj.push({field: 'name', value: defaultData.name});
-                // 刷新数据
-                refreshData = {'content': content};
+                updateData.jobContentText = content;
                 break;
             case "4":
-                // 分别添加到对应列
-                if (Object.keys(defaultData).length <= 0) {
-                    return;
-                }
-                // 特征
-                saveObj.push({field: 'itemCharacterText', value: defaultData.character});
-                // 内容
-                saveObj.push({field: 'jobContentText', value: defaultData.content});
-                // 名称
-                saveObj.push({field: 'name', value: defaultData.name});
-                refreshData = {};
+                updateData = {
+                    itemCharacterText: defaultData.character,
+                    jobContentText: defaultData.content,
+                    name: defaultData.name,
+                };
                 break;
         }
+        let saveObj = [];
+        for (const index in updateData) {
+            saveObj.push({field: index, value: updateData[index]});
+        }
+        saveObj.push({field: 'addRule', value: setting});
         // 更新到数据库
         pageCCOprObj.updateBill(findSet, saveObj, function(response) {
-            self.refreshView(node, refreshData, defaultData);
+            self.refreshView(node, updateData);
+            // 更新项目属性的配置
+            projectObj.project.property.addRule = setting;
+            // 更新节点数据
+            node.data.name = updateData.name;
+            node.data.itemCharacterText = updateData.itemCharacterText;
+            node.data.jobContentText = updateData.jobContentText;
         });
 
     },
@@ -1006,9 +1000,7 @@ let pageCCOprObj = {
                 throw '内部数据错误';
             }
             // 默认名称
-            let nodeNameList = node.data.name.split("\r\n");
-            const nameContent = nodeNameList[0] !== undefined ? nodeNameList[0] : '';
-            result['name'] = nameContent;
+            result['name'] = this.nameCache;
 
             // 特征
             let characterArray = [];
@@ -1057,54 +1049,9 @@ let pageCCOprObj = {
             }
             result['content'] = jobArray;
         } catch (error) {
+            console.log(error);
             result = {};
         }
         return result;
     },
-    /**
-     * 还原数据
-     *
-     * @param {Object} node - 节点数据
-     * @param {String} setType - 当前设置的项
-     * @param {Object} baseData - 需要用到的基础数据
-     * @param {Object} defaultContentInfo - 默认数据
-     * @return {void}
-     */
-    restoreData: function(node, setType, baseData, defaultContentInfo) {
-        if (baseData.findSet === undefined ||
-        baseData.itemJob === undefined || baseData.itemCharacter === undefined) {
-            return;
-        }
-
-        switch (setType) {
-            case "1":
-                // 添加到项目特征列
-                // 把其他字段还原回原来数据
-                // 还原名称
-                projectObj.project.Bills.updateField(node.source, 'name', defaultContentInfo.nameContent, true);
-                projectObj.mainController.refreshTreeNode([node], false);
-                // 还原工作内容
-                pageCCOprObj.updateCharacterContent(baseData.findSet, {field: 'jobContent', updateArr: baseData.itemJob},
-                    {field: 'jobContentText', text: contentOprObj.lastTextCache}, node);
-                break;
-            case "2":
-                // 添加到清单名称
-                // 还原特征
-                pageCCOprObj.updateCharacterContent(baseData.findSet, {field: 'itemCharacter', updateArr: baseData.itemCharacter},
-                    {field: 'itemCharacterText', text: characterOprObj.lastTextCache}, node);
-                // 还原工作内容
-                pageCCOprObj.updateCharacterContent(baseData.findSet, {field: 'jobContent', updateArr: baseData.itemJob},
-                    {field: 'jobContentText', text: contentOprObj.lastTextCache}, node);
-                break;
-            case "3":
-                // 添加到工作内容列
-                // 还原名称
-                projectObj.project.Bills.updateField(node.source, 'name', defaultContentInfo.nameContent, true);
-                projectObj.mainController.refreshTreeNode([node], false);
-                // 还原特征
-                pageCCOprObj.updateCharacterContent(baseData.findSet, {field: 'itemCharacter', updateArr: baseData.itemCharacter},
-                    {field: 'itemCharacterText', text: characterOprObj.lastTextCache}, node);
-                break;
-        }
-    },
 }

+ 14 - 2
web/building_saas/main/js/views/sub_view.js

@@ -104,8 +104,20 @@ $("#linkTZJNR").click(function () {
     pageCCOprObj.active = true;
     refreshSubSpread();
     let selectedNode = projectObj.mainController.tree.selected;
-    if (selectedNode.data.addRule !== undefined) {
-        setRule(selectedNode.data.addRule);
+
+    // 缓存原名称
+    if (pageCCOprObj.nameCache === '') {
+        let libId = projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id;
+        let orgCode = selectedNode.data.code.substr(0, 9);
+        CommonAjax.post('/stdBillsEditor/getStdBillsByCode', {userId: userID, billsLibId: libId, code: orgCode}, function (data) {
+            if (data) {
+                pageCCOprObj.nameCache = data.name;
+            }
+        });
+    }
+
+    if (projectObj.project.property.addRule !== undefined) {
+        setRule(projectObj.project.property.addRule);
     }
 
     pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];