Browse Source

清单固定类别

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

+ 64 - 0
modules/common/const/bills_fixed.js

@@ -0,0 +1,64 @@
+/**
+ * Created by Mai on 2017/8/29.
+ */
+
+const fixedFlag = {
+    // 分部分项工程
+    SUB_ENGINERRING: 1,
+    // 措施项目
+    MEASURE: 2,
+    // 施工技术措施项目
+    CONSTRUCTION_TECH: 3,
+    // 安全文明施工按实计算费用
+    SAFETY_CONSTRUCTION_ACTUAL: 4,
+    // 施工组织措施专项费用
+    CONSTRUCTION_ORGANIZATION: 5,
+    // 安全文明施工专项费用
+    SAFETY_CONSTRUCTION: 6,
+    // 其他项目
+    OTHER: 7,
+    // 暂列金额
+    PROVISIONAL: 8,
+    // 暂估价
+    ESTIMATE: 9,
+    // 材料(工程设备)暂估价
+    MATERIAL_PROVISIONAL: 10,
+    // 专业工程暂估价
+    ENGINEERING_ESITIMATE: 11,
+    // 计日工
+    DAYWORK: 12,
+    // 总承包服务费
+    TURN_KEY_CONTRACT: 13,
+    // 索赔与现场签证
+    CLAIM_VISA: 14,
+    // 规费
+    CHARGE: 15,
+    // 社会保险费及住房公积金 Social insurance fee and housing accumulation fund
+    SOCIAL_INSURANCE_HOUSING_FUND: 16,
+    // 工程排污费 charges for disposing pollutants
+    POLLUTANTS: 17,
+    // 税金
+    TAX: 18
+};
+const fixedFlagList = [
+    {name: "分部分项工程", value: fixedFlag.SUB_ENGINERRING},
+    {name: "措施项目", value: fixedFlag.MEASURE},
+    {name: "施工技术措施项目", value: fixedFlag.CONSTRUCTION_TECH},
+    {name: "安全文明施工按实计算费用", value: fixedFlag.SAFETY_CONSTRUCTION_ACTUAL},
+    {name: "施工组织措施专项费用", value: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    {name: "安全文明施工专项费用", value: fixedFlag.SAFETY_CONSTRUCTION},
+    {name: "其他项目", value: fixedFlag.OTHER},
+    {name: "暂列金额", value: fixedFlag.PROVISIONAL},
+    {name: "暂估价", value: fixedFlag.ESTIMATE},
+    {name: "材料(工程设备)暂估价", value: fixedFlag.MATERIAL_PROVISIONAL},
+    {name: "专业工程暂估价", value: fixedFlag.ENGINEERING_ESITIMATE},
+    {name: "计日工", value: fixedFlag.DAYWORK},
+    {name: "总承包服务费", value: fixedFlag.TURN_KEY_CONTRACT},
+    {name: "索赔与现场签证", value: fixedFlag.CLAIM_VISA},
+    {name: "规费", value: fixedFlag.CHARGE},
+    {name: "社会保险费及住房公积金", value: fixedFlag.SOCIAL_INSURANCE_HOUSING_FUND},
+    {name: "工程排污费", value: fixedFlag.POLLUTANTS},
+    {name: "税金", value: fixedFlag.TAX}
+];
+
+export {fixedFlag as default, fixedFlagList as List};

+ 2 - 1
modules/users/controllers/compilation_controller.js

@@ -12,6 +12,7 @@ import STDBillLibListsModel from "../../common/std/std_bills_lib_lists_model";
 import STDGLJLibMapModel from "../../common/std/std_glj_lib_map_model";
 import {default as EngineeringConst, List as EngineeringList} from "../../common/const/engineering";
 import BillsTemplateModel from "../models/bills_template_model";
+import {default as BillsFixedFlagConst, List as BillsFixedFlagList} from "../../common/const/bills_fixed.js";
 
 class CompilationController extends BaseController {
 
@@ -362,6 +363,7 @@ class CompilationController extends BaseController {
         let renderData = {
             billList: JSON.stringify(billList),
             billsTemplateData: JSON.stringify(billsTemplateData),
+            billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
             valuationData: valuationData,
             valuationList: valuationList,
             selectedCompilation: selectedCompilation,
@@ -383,7 +385,6 @@ class CompilationController extends BaseController {
         let section = request.params.section;
         let data = JSON.parse(request.body.data);
 
-        console.log(data);
         let billsTemplateModel = new BillsTemplateModel();
         let result = await billsTemplateModel.updateTemplate(valuationId, data);
 

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

@@ -24,7 +24,7 @@ class BillsTemplateModel extends BaseModel {
      */
     async getTemplateData (valuationId) {
         // 筛选字段
-        let field = {_id: 1, valuationId: 1, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1};
+        let field = {_id: 1, valuationId: 1, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1};
         let data = await this.findDataByCondition({valuationId: valuationId}, field, false);
 
         return data === null ? [] : data;
@@ -37,7 +37,7 @@ class BillsTemplateModel extends BaseModel {
      */
     async getTemplateDataForNewProj (valuationId) {
         // 筛选字段
-        let field = {ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1};
+        let field = {ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1};
         let data = await this.findDataByCondition({valuationId: valuationId}, field, false);
 
         return data === null ? [] : data;

+ 10 - 0
modules/users/models/schemas/bills_template.js

@@ -6,6 +6,11 @@ let Schema = mongoose.Schema;
 
 let collectionName = 'temp_bills';
 
+// 标记字段
+let flagsSchema = new Schema({
+    fieldName: String,
+    flag: Number
+});
 let BillsTemplateSchema = {
     // 树结构所需ID
     ID: Number,
@@ -17,6 +22,11 @@ let BillsTemplateSchema = {
     name: String,
     // 单位
     unit: String,
+    // 标记
+    flags:{
+        type: [flagsSchema],
+        default: []
+    },
     // 所属计价ID
     valuationId: String
 };

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

@@ -109,6 +109,9 @@ var TREE_SHEET_HELPER = {
                 } else {
                     cell.value(getFieldText2());
                 }
+                if (colSetting.data.cellType) {
+                    cell.cellType(colSetting.data.cellType);
+                }
             });
             if (recursive) {
                 TREE_SHEET_HELPER.refreshTreeNodeData(setting, sheet, node.children, recursive);

+ 83 - 7
web/users/js/template.js

@@ -9,7 +9,7 @@ let TEMPLATE_BILLS_SETTING = {
     "treeCol": 0,
     "cols":[{
         "width":200,
-        "readOnly":null,
+        "readOnly":false,
         "head":{
             "titleNames":["编号"],
             "spanCols":[1],
@@ -26,7 +26,7 @@ let TEMPLATE_BILLS_SETTING = {
         }
     }, {
         "width":300,
-        "readOnly":null,
+        "readOnly":false,
         "head":{
             "titleNames":["名称"],
             "spanCols":[1],
@@ -43,7 +43,7 @@ let TEMPLATE_BILLS_SETTING = {
         }
     }, {
         "width":50,
-        "readOnly":null,
+        "readOnly":false,
         "head":{
             "titleNames":["单位"],
             "spanCols":[1],
@@ -59,6 +59,23 @@ let TEMPLATE_BILLS_SETTING = {
             "font":"Arail"
         }
     }, {
+        "width":200,
+        "readOnly":false,
+        "head":{
+            "titleNames":["清单固定类别"],
+            "spanCols":[1],
+            "spanRows":[1],
+            "vAlign":[1],
+            "hAlign":[1],
+            "font":["Arial"]
+        },
+        "data":{
+            "field":"flagsIndex.fixed.flag",
+            "vAlign":0,
+            "hAlign":3,
+            "font":"Arail",
+        }
+    }, {
         "width":50,
         "readOnly":true,
         "head":{
@@ -135,6 +152,52 @@ $(document).ready(function () {
             }
         });
     };
+    let getFixedFlagCellType = function () {
+        let billsFixedFlagData = JSON.parse(billsFixedFlagList);
+        let comboItems = [];
+        for (let data of billsFixedFlagData) {
+            comboItems.push({text: data.name, value: data.value});
+        }
+        let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
+        combo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value)
+            .items(comboItems);
+        return combo;
+    };
+    let setFee = function (data, fullField, value) {
+        let fields = fullField.split('.'), valueField = data;
+        for (let i in fields) {
+            if (valueField[fields[i]]) {
+                if (i == fields.length - 1) {
+                    valueField[fields[i]] = value;
+                } else {
+                    valueField = valueField[fields[i]];
+                }
+            } else {
+                if (i == fields.length - 1) {
+                    valueField[fields[i]] = value;
+                } else {
+                    valueField[fields[i]] = {};
+                };
+                valueField = valueField[fields[i]];
+            }
+        }
+    }
+
+    let templateData = JSON.parse(billsTemplateData);
+    for (let data of templateData) {
+        if (data.flags) {
+            data.flagsIndex = {};
+            for (let flag of data.flags) {
+                data.flagsIndex[flag.fieldName] = flag;
+            }
+        }
+    }
+
+    for (col of TEMPLATE_BILLS_SETTING.cols) {
+        if (col.data.field === 'flagsIndex.fixed.flag' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
+            col.data.cellType = getFixedFlagCellType();
+        }
+    }
 
     let tree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
     let billsSpread = TREE_SHEET_HELPER.createNewSpread($('#billsSpread')[0]);
@@ -146,10 +209,16 @@ $(document).ready(function () {
         var node = controller.tree.items[info.row];
         var fieldName = controller.setting.cols[info.col].data.field;
         var data = {type: 'update', data: {ID: node.getID()}};
-        data.data[fieldName] = info.editingText;
+        if (/flagsIndex/.test(fieldName)) {
+            data.data.flags = [];
+            let flagField = fieldName.split('.');
+            data.data.flags.push({fieldName: flagField[1], flag: info.editingText});
+        } else {
+            setFee(data.data, fieldName, info.editingText);
+        }
         var updateData = [data];
         CommonAjax.post(updateUrl, updateData, function (data) {
-            node.data[fieldName] = info.editingText;
+            setFee(node.data, fieldName, info.editingText);
             controller.refreshTreeNode([node], false);
         }, function () {
             controller.refreshTreeNode([node], false);
@@ -166,7 +235,14 @@ $(document).ready(function () {
                 for (iCol = 0; iCol < info.cellRange.colCount; iCol++) {
                     curCol = info.cellRange.col + iCol;
                     fieldName = controller.setting.cols[curCol].data.field;
-                    data.data[fieldName] = info.sheet.getText(curRow, curCol);
+
+                    if (/flagsIndex/.test(fieldName)) {
+                        data.data.flags = [];
+                        let flagField = fieldName.split('.');
+                        data.data.flags.push({fieldName: flagField[1],flag: info.sheet.getText(curRow, curCol)});
+                    } else {
+                        setFee(data.data, fieldName, info.sheet.getText(curRow, curCol));
+                    }
                 }
                 datas.push(data);
             }
@@ -179,7 +255,7 @@ $(document).ready(function () {
         });
     });
 
-    tree.loadDatas(JSON.parse(billsTemplateData));
+    tree.loadDatas(templateData);
     controller.showTreeData();
     RefreshBaseActn(tree);
 

+ 1 - 0
web/users/views/compilation/template.html

@@ -52,6 +52,7 @@
 </div>
 <script>
     let billsTemplateData = '<%- billsTemplateData %>';
+    let billsFixedFlagList = '<%- billsFixedFlagList %>';
     let updateUrl = '/compilation/template/<%= section %>/<%= valuationId %>/update';
 </script>
 <script type="text/javascript" src="/public/web/id_tree.js"></script>