Parcourir la source

选项结构改进,预留用户对树节点颜色的相关设置

zhongzewei il y a 7 ans
Parent
commit
0022df9963

+ 59 - 2
modules/options/controllers/optionsController.js

@@ -4,7 +4,7 @@
 
 import BaseController from '../../common/base/base_controller';
 import OptionsDao from '../models/optionsModel';
-import optionsTypes from '../models/optionTypes';
+import optionSetting from '../models/optionTypes';
 
 let optionsDao = new OptionsDao();
 class OptionController extends BaseController {
@@ -13,6 +13,63 @@ class OptionController extends BaseController {
         let resJson = {error: 0, message: '', data: []};
         let user_id = req.session.sessionUser.id,
             compilation_id = req.session.sessionCompilation._id;
+        try{
+            resJson.data = await optionsDao.getOptions(user_id, compilation_id);
+            if(!resJson.data){
+                resJson.data = await optionsDao.saveOptions(user_id, compilation_id, optionSetting);
+            }
+        }
+        catch (err){
+            resJson.error = true;
+            resJson.message = '获取失败';
+            resJson.data = null;
+        }
+        res.json(resJson);
+    }
+    //获得特定选项类型的选项
+    async getOptionsByType(req, res){
+        let resJson = {error: null, message: '', data: null};
+        let user_id = req.session.sessionUser.id,
+            compilation_id = req.session.sessionCompilation._id,
+            optsType = req.body.optsType;
+        try{
+            resJson.data = await optionsDao.getOptionsByType(user_id, compilation_id, optsType);
+        }
+        catch (err){
+            resJson.error = true;
+            resJson.message = '获取失败';
+            resJson.data = null;
+        }
+        res.json(resJson);
+    }
+
+    async saveOptions(req, res){
+        let resJson = {error: 0, message: '', data: null};
+        let data = JSON.parse(req.body.data);
+        let user_id = req.session.sessionUser.id,
+            compilation_id = req.session.sessionCompilation._id,
+            optSetting = data.optSetting;
+        try{
+            resJson.data = await optionsDao.saveOptions(user_id, compilation_id, optSetting);
+        }
+        catch (err){
+            resJson.error = true;
+            resJson.message = '保存失败';
+            resJson.data = null;
+        }
+        res.json(resJson);
+    }
+}
+
+
+
+
+/*class OptionController extends BaseController {
+    //获得所有选项类型的选项
+    async getOptions(req, res){
+        let resJson = {error: 0, message: '', data: []};
+        let user_id = req.session.sessionUser.id,
+            compilation_id = req.session.sessionCompilation._id;
         let defaultOpts = {
             GENERALOPTS: {
                 rationQuanACToBillsQuan: true,//自动根据清单工程量填写定额工程量
@@ -82,6 +139,6 @@ class OptionController extends BaseController {
         }
         res.json(resJson);
     }
-}
+}*/
 
 export default OptionController;

+ 57 - 4
modules/options/models/optionTypes.js

@@ -5,9 +5,62 @@
 /*
 * 用户选项设置的选项类型,目前有常规选项
 * */
-
-const optionsTypes = {
-    GENERALOPTS: 'GENERALOPTS'//常规选项:1.自动根据清单工程量填写定额工程量 2.自动根据定额单位转换定额工程量
+const optionSetting = {
+    GENERALOPTS: {
+        rationQuanACToBillsQuan: true,//自动根据清单工程量填写定额工程量
+        rationQuanACToRationUnit: true//自动根据定额单位转换定额工程量
+    },
+    //色彩相关
+    COLOROPTS: {
+        DEFAULT: {
+            backColor: 'White',
+            foreColor: 'Black',
+            stringFont: '15px Arial',
+            numFont: '13px Arial'
+        },
+        DXFY: {
+            backColor: 'default',
+            foreColor: 'default',
+            stringFont: 'bold 15px Arial',
+            numFont: 'bold 13px Arial'
+        },
+        FB: {
+            backColor: '#C1D3E3',
+            foreColor: 'default',
+            stringFont: 'default',
+            numFont: 'default'
+        },
+        UNLEAFBILL: {
+            backColor: '#C1D3E3',
+            foreColor: 'default',
+            stringFont: 'default',
+            numFont: 'default'
+        },
+        FX: {
+            backColor: '#DAE5EE',
+            foreColor: 'default',
+            stringFont: 'default',
+            numFont: 'default'
+        },
+        UNCBBILL: {
+            backColor: '#DAE5EE',
+            foreColor: 'default',
+            stringFont: 'default',
+            numFont: 'default'
+        },
+        CBBILL: {
+            backColor: '#E5F3F2',
+            foreColor: 'default',
+            stringFont: 'default',
+            numFont: 'default'
+        },
+        ZCSB: {
+            backColor: 'default',
+            foreColor: '#4D7BFF',
+            stringFont: 'default',
+            numFont: 'default'
+        }
+    }
 };
 
-export default optionsTypes;
+export default optionSetting;

+ 29 - 1
modules/options/models/optionsModel.js

@@ -12,6 +12,34 @@ class OptionsDao {
     }
 
     async getOptionsByType(user_id, compilation_id, optsType){
+        let rst = await optionsModel.findOne({user_id: user_id, compilation_id: compilation_id});
+        if(rst){
+            return rst.options[optsType] !== undefined && rst.options[optsType] !== null ? rst.options[optsType] : null;
+        }
+    }
+
+    async saveOptions(user_id, compilation_id, optSetting){
+        let optionsData = await optionsModel.find({user_id: user_id, compilation_id: compilation_id});
+        if(optionsData.length === 0){
+            await optionsModel.create({user_id: user_id, compilation_id: compilation_id, options: optSetting});
+        }
+        await optionsModel.update({user_id: user_id, compilation_id: compilation_id}, optSetting);
+        let rst = await optionsModel.find({user_id: user_id, compilation_id: compilation_id});
+        return rst.length > 0 && typeof rst[0].options !== 'undefined' ? rst[0].options : null;
+    }
+}
+
+
+
+
+/*class OptionsDao {
+    async getOptions(user_id, compilation_id){
+        let rst = await optionsModel.find({user_id: user_id, compilation_id: compilation_id});
+        rst = rst.length > 0 && typeof rst[0].options !== 'undefined' ? rst[0].options : null;
+        return rst;
+    }
+
+    async getOptionsByType(user_id, compilation_id, optsType){
         let rst = await optionsModel.find({user_id: user_id, compilation_id: compilation_id});
         if(rst.length > 0){
             let opts = rst[0].options;
@@ -33,6 +61,6 @@ class OptionsDao {
         let rst = await optionsModel.find({user_id: user_id, compilation_id: compilation_id});
         return rst;
     }
-}
+}*/
 
 export default OptionsDao;

+ 10 - 1
modules/options/models/schemas.js

@@ -10,9 +10,18 @@ let Schema = mongoose.Schema;
 let optionSchema = new Schema({
     user_id: String,
     compilation_id: String,
-    options: Array
+    options: {
+        type: Schema.Types.Mixed,
+        default: {}
+    }
 }, {versionKey: false});
 
+/*let optionSchema = new Schema({
+    user_id: String,
+    compilation_id: String,
+    options: Array
+}, {versionKey: false});*/
+
 let optionsModel = mongoose.model('options', optionSchema);
 
 export default optionsModel;

+ 3 - 3
public/web/tree_sheet/tree_sheet_helper.js

@@ -105,9 +105,9 @@ var TREE_SHEET_HELPER = {
         nodes.forEach(function (node) {
             let iRow = node.serialNo();
             let nodeStyle = projectObj.getNodeColorStyle(node);
-            //test
-            sheet.setStyle(iRow, -1, nodeStyle);
-            //test
+            if(nodeStyle){
+                sheet.setStyle(iRow, -1, nodeStyle);
+            }
             setting.cols.forEach(function (colSetting, iCol) {
                 var cell = sheet.getCell(iRow, iCol, GC.Spread.Sheets.SheetArea.viewport);
                 let boldFontStyle = projectObj.getBoldFontStyle(node, colSetting);

+ 61 - 1
web/building_saas/main/js/views/options_view.js

@@ -3,6 +3,66 @@
  */
 let optionsOprObj = {
     options: null,
+    optionsTypes: {GENERALOPTS: 'GENERALOPTS', COLOROPTS: 'COLOROPTS'},
+    rationQuanACToBillsQuan: $('#generalOpts1'),
+    rationQuanACToRationUnit: $('#generalOpts2'),
+    getOptions: function () {
+        let me = this;
+        CommonAjax.post('/options/getOptions', [], function (rstData) {
+            me.options = rstData;
+            let gOpts = me.options[me.optionsTypes.GENERALOPTS];
+            if(isDef(gOpts)){
+                for(let attr in gOpts){
+                    me[attr][0].checked = gOpts[attr];
+                }
+            }
+        });
+    },
+    saveOptions: function (type, opts) {
+        let optSettingType = 'options.' + type;
+        let postData = Object.create(null);
+        postData[optSettingType] = opts;
+        CommonAjax.post('/options/saveOptions', {optSetting: postData});
+    },
+    //更新optionsOprObj对象options数据
+    updateOptions: function (options, updateObj) {
+        if(isDef(options[updateObj.type])){
+            options[updateObj.type][updateObj.opt] = updateObj.value;
+        }
+    },
+    getOptsByType: function (options, type) {
+        return isDef(options[type]) ? options[type] : null;
+    },
+    getOption: function (type, optionName) {
+        if(!isDef(optionName)){
+            return isDef(this.options[type]) ? this.options[type] : null;
+        }
+        else {
+            return isDef(this.options[type][optionName])
+                ? this.options[type][optionName]
+                    : optionName === this.optionsTypes.GENERALOPTS
+                    ? true
+                : null;
+        }
+    }
+};
+
+optionsOprObj.getOptions();
+optionsOprObj.rationQuanACToBillsQuan.click(function () {
+    let value = this.checked;
+    optionsOprObj.updateOptions(optionsOprObj.options, {type: optionsOprObj.optionsTypes.GENERALOPTS, opt: 'rationQuanACToBillsQuan', value: value});
+    optionsOprObj.saveOptions(optionsOprObj.optionsTypes.GENERALOPTS, optionsOprObj.getOptsByType(optionsOprObj.options, optionsOprObj.optionsTypes.GENERALOPTS));
+});
+optionsOprObj.rationQuanACToRationUnit.click(function () {
+    let value = this.checked;
+    optionsOprObj.updateOptions(optionsOprObj.options, {type: optionsOprObj.optionsTypes.GENERALOPTS, opt: 'rationQuanACToRationUnit', value: value});
+    optionsOprObj.saveOptions(optionsOprObj.optionsTypes.GENERALOPTS, optionsOprObj.getOptsByType(optionsOprObj.options, optionsOprObj.optionsTypes.GENERALOPTS));
+});
+
+
+
+/*let optionsOprObj = {
+    options: null,
     optionsTypes: {GENERALOPTS: 'GENERALOPTS'},
     rationQuanACToBillsQuan: $('#generalOpts1'),
     rationQuanACToRationUnit: $('#generalOpts2'),
@@ -58,4 +118,4 @@ optionsOprObj.rationQuanACToRationUnit.click(function () {
     let value = this.checked;
     optionsOprObj.updateOptions(optionsOprObj.options, {type: optionsOprObj.optionsTypes.GENERALOPTS, opt: 'rationQuanACToRationUnit', value: value});
     optionsOprObj.saveOptions(optionsOprObj.optionsTypes.GENERALOPTS, optionsOprObj.getOptsByType(optionsOprObj.options, optionsOprObj.optionsTypes.GENERALOPTS));
-});
+});*/

+ 54 - 25
web/building_saas/main/js/views/project_view.js

@@ -471,6 +471,7 @@ var projectObj = {
                 that.loadFocusLocation();
                 let endTime = +new Date();
                 console.log("加载完成-----"+endTime);
+                console.log(`时间——${endTime - startTime}`);
             }
             else {
 
@@ -803,63 +804,90 @@ var projectObj = {
         };
  },
 
- //根据节点获取行style(颜色、字体加粗)
-    getNodeColorStyle: function (node) {
-        let type, backColor = null, foreColor = null;
+    //根据节点获取行style(颜色、字体加粗)
+    getNodeColorStyle: function (node, colSetting) {
+        let colorSetting = optionsOprObj.getOption(optionsOprObj.optionsTypes.COLOROPTS);
+        let mapping = {DEFAULT: 'DEFAULT', DXFY: 'DXFY', FB: 'FB', UNLEAFBILL: 'UNLEAFBILL',
+            FX: 'FX', UNCBBILL: 'UNCBBILL', CBBILL: 'CBBILL', ZCSB: 'ZCSB'};
+        let styleMap = null;
+        //中文字段名,由于同一节点中,中文字体大小和数字字体大小不同
+        let stringFields = [
+            'code',
+            'subType',
+            'name',
+            'unit',
+            'itemCharacterText',
+            'jobContentText',
+            'adjustState',
+            'calcBase',
+            'programID',
+            'ruleText'
+        ];
         if(!isDef(node)){
             return null;
         }
         //清单大类
         if(node.sourceType === this.project.Bills.getSourceType()){
+            //大项费用
+            if(node.data.type === billType.DXFY){
+                styleMap = mapping.DXFY;
+            }
             //分部
             if(node.data.type === billType.FB){
-                type = 1;
+                styleMap = mapping.FB;
             }
             //分项
             else if(node.data.type === billType.FX){
-                type = 2;
+                styleMap = mapping.FX;
             }
             //清单
             else if(node.data.type === billType.BILL){
                 //非叶子节点的清单
                 if(node.source.children.length > 0){
-                    type = 1;
+                    styleMap = mapping.UNLEAFBILL;
                 }
                 //未使用基数计算的叶子节点的清单
                 else if(node.source.children.length === 0 && (!isDef(node.data.calcBase) || node.data.calcBase === '')){
-                    type = 2;
+                    styleMap = mapping.UNCBBILL;
                 }
                 //使用基数计算的叶子节点的清单
                 else if(node.source.children.length === 0 && isDef(node.data.calcBase && node.data.calcBaseValue !== '')){
-                    type = 3;
+                    styleMap = mapping.CBBILL;
                 }
             }
         }
         //定额下的主材、设备
         else if(node.sourceType === this.project.ration_glj.getSourceType()){
-            type = 4;
+            styleMap = mapping.ZCSB;
         }
-        switch (type){
-            //case 0: font = 'bold 13px "Arial"'; break;
-            case 1: backColor = '#c1d3e3'; break;
-            case 2: backColor = '#dae5ee'; break;
-            case 3: backColor = '#e5f3f2';  break;
-            case 4: foreColor = '#4D7BFF';   break;
+        else {
+            styleMap = mapping.DEFAULT;
         }
-        if(!backColor && !foreColor){
+        let styleSetting = colorSetting[styleMap];
+        let defaultSetting = colorSetting[mapping.DEFAULT];
+        if(!isDef(styleSetting)){
             return null;
         }
         let style = new GC.Spread.Sheets.Style();
-        if(foreColor){
-            style.foreColor = foreColor;
-        }
-        if(backColor){
-            style.backColor = backColor;
-            style.borderLeft = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
-            style.borderTop = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
-            style.borderRight = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
-            style.borderBottom = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
+        //设置style属性
+        for(let attr in styleSetting){
+            if(attr !== 'stringFont' && attr !== 'numFont'){
+                style[attr] = styleSetting[attr] === 'default' || !isDef(styleSetting[attr]) ? defaultSetting[attr] : styleSetting[attr];
+            }
+            //暂时不开放字体设置,开放的话只能每个单元格进入此方法
+           /* else {
+                if(stringFields.indexOf(colSetting.data.field) > 0){
+                    style.font = styleSetting.stringFont === 'default' || !isDef(styleSetting.stringFont) ? defaultSetting.stringFont : styleSetting.stringFont;
+                }
+                else {
+                    style.font = styleSetting.numFont === 'default' || !isDef(styleSetting.numFont) ? defaultSetting.numFont : styleSetting.numFont;
+                }
+            }*/
         }
+        style.borderLeft = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
+        style.borderTop = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
+        style.borderRight = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
+        style.borderBottom = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
         return style;
     },
     //大项费用则字体加粗,String 15px, Number 13px
@@ -889,6 +917,7 @@ var projectObj = {
         }
         return style;
     }
+    
 };
 // 点击合计框中的复制
 $("body").on("click", "#total-tips a", function() {