Bläddra i källkod

导入工程专业可选

zhongzewei 6 år sedan
förälder
incheckning
a137700aa7

+ 1 - 0
config/gulpConfig.js

@@ -121,6 +121,7 @@ module.exports = {
         'web/building_saas/main/js/views/glj_col.js',
         'web/building_saas/main/js/views/main_tree_col.js',
         'web/building_saas/main/js/views/project_info.js',
+        'web/building_saas/main/js/views/export_view.js',
         'web/building_saas/main/js/views/project_view.js',
         'web/building_saas/main/js/views/options_view.js',
         'web/building_saas/main/js/views/project_property_bills_quantity_decimal.js',

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

@@ -33,7 +33,7 @@ class MixRatioModel extends BaseModel {
         switch (scene) {
             // 新增数据的验证规则
             case 'add':
-                this.model.schema.path('glj_id').required(true);
+                //this.model.schema.path('glj_id').required(true);
                 this.model.schema.path('consumption').required(true);
                 this.model.schema.path('unit_price_file_id').required(true);
                 this.model.schema.path('connect_key').required(true);

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

@@ -2190,6 +2190,7 @@
     <script type="text/javascript" src="/web/building_saas/main/js/views/glj_col.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/main_tree_col.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/project_info.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/export_view.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/project_view.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/options_view.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_bills_quantity_decimal.js"></script>

+ 10 - 3
web/building_saas/main/js/models/importStandardInterface.js

@@ -254,7 +254,7 @@ const ImportXML = (() => {
                 return {
                     projType: ProjectType.Tender,
                     name: getValue(src, ['_名称']),
-                    engineering: getValue(src, ['_专业']),
+                    engineering: getValue(src, ['_专业']),    //可能跟我们软件里的工程专业对应不上
                     projectFeature: loadProjectFeature(src),
                     feeSummary: loadFeeSummary(src),     //单位工程费汇总
                     fbfx: loadFBFX(src),
@@ -764,7 +764,7 @@ const ImportXML = (() => {
             }
             return map[`${feeType}-${ratioType}`] || null;
         }
-        //主要材料类别-三材类别映射
+        //主要材料类别-三材类别映射、、
         const MaterialMap = {
             '100': 1,   //钢材钢筋认为钢材,因为文件没细分
             '200': 4,   //水泥
@@ -1566,4 +1566,11 @@ const ImportXML = (() => {
             }
         }
     };
-})();
+})();
+
+let toGet = ['a', 'b', 'c'],
+    getMap = {a: 1, b: 2, c: 3};
+
+function getDataSleep(attr) {
+
+}

+ 91 - 0
web/building_saas/main/js/views/export_view.js

@@ -0,0 +1,91 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Zhong
+ * @date 2019/6/5
+ * @version
+ */
+
+const ExportView = (() => {
+    let xmlObj = null;
+    //导出接口-项目自检
+    function exportListener() {
+        $('#export-check').click(async function () {
+            let checkedDatas = $('#export input[type="checkbox"]:checked');
+            if (!checkedDatas.length) {
+                return;
+            }
+            let pr = new SCComponent.InitProgressBar();
+            pr.start('导出数据接口', '正在自检,请稍候……')
+            try {
+                if (!xmlObj || !xmlObj.fileDatas.length) {
+                    xmlObj = new XMLStandard(userID, 1);
+                    for (let checkedData of checkedDatas) {
+                        let fileKind = $(checkedData).val();
+                        await xmlObj.toXml(projectObj.project.ID(), fileKind);
+                    }
+                }
+                //设置提示弹窗
+                if (xmlObj.failList.length * 20 > 400) {
+                    $('#hintBox_caption').addClass('export-check');
+                }
+                if (xmlObj.failList.length) {
+                    throw xmlObj.failList.join('<br/>');
+                }
+            } catch (err) {
+                alert(err);
+            }
+            pr.end();
+        });
+
+        //导出接口,如果选中多个文件,导出压缩包
+        $('#export-confirm').click(async function () {
+            let checkedDatas = $('#export input[type="checkbox"]:checked');
+            if (!checkedDatas.length) {
+                return;
+            }
+            let pr = new SCComponent.InitProgressBar();
+            pr.start('导出数据接口', '正在导出文件,请稍候……')
+            try {
+                if (!xmlObj || !xmlObj.fileDatas.length) {
+                    xmlObj = new XMLStandard(userID, 1);
+                    for (let checkedData of checkedDatas) {
+                        let fileKind = $(checkedData).val();
+                        await xmlObj.toXml(projectObj.project.ID(), fileKind);
+                    }
+                }
+                console.log(xmlObj);
+                //设置提示弹窗
+                if (xmlObj.failList.length * 20 > 400) {
+                    $('#hintBox_caption').addClass('export-check');
+                }
+                if (xmlObj.failList.length) {
+                    throw xmlObj.failList.join('<br/>');
+                }
+                //可能先执行过自检了,已经有组装好的数据了,可以直接导出
+                pr.end();
+                await xmlObj.exportFile();
+                console.log(xmlObj);
+                $('#export').modal('hide');
+            } catch (err) {
+                pr.end();
+                alert(err);
+            }
+        });
+        $('#export').on('show.bs.modal', function () {
+            xmlObj = null;
+        });
+        $('#export').on('hide.bs.modal', function() {
+            xmlObj = null;
+            //恢复设置提示弹窗 因为是共用的alert
+            $('#hintBox_caption').removeClass('export-check');
+            $('#export input[type="checkbox"]:eq(0)').prop('checked', true);
+        });
+        $('#export input[type="checkbox"]').click(function () {
+            xmlObj = null;
+        });
+    }
+    return {exportListener}
+})();

+ 2 - 75
web/building_saas/main/js/views/project_view.js

@@ -3320,78 +3320,5 @@ $('#menu_index_info').click(function () {
     $('#tab_index').click();
 });
 
-let xmlObj = null;
-//导出接口-项目自检
-$('#export-check').click(async function () {
-    let checkedDatas = $('#export input[type="checkbox"]:checked');
-    if (!checkedDatas.length) {
-        return;
-    }
-    let pr = new SCComponent.InitProgressBar();
-    pr.start('导出数据接口', '正在自检,请稍候……')
-    try {
-        if (!xmlObj || !xmlObj.fileDatas.length) {
-            xmlObj = new XMLStandard(userID, 1);
-            for (let checkedData of checkedDatas) {
-                let fileKind = $(checkedData).val();
-                await xmlObj.toXml(projectObj.project.ID(), fileKind);
-            }
-        }
-        //设置提示弹窗
-        if (xmlObj.failList.length * 20 > 400) {
-            $('#hintBox_caption').addClass('export-check');
-        }
-        if (xmlObj.failList.length) {
-            throw xmlObj.failList.join('<br/>');
-        }
-    } catch (err) {
-        alert(err);
-    }
-    pr.end();
-});
-
-//导出接口,如果选中多个文件,导出压缩包
-$('#export-confirm').click(async function () {
-    let checkedDatas = $('#export input[type="checkbox"]:checked');
-    if (!checkedDatas.length) {
-        return;
-    }
-    let pr = new SCComponent.InitProgressBar();
-    pr.start('导出数据接口', '正在导出文件,请稍候……')
-    try {
-        if (!xmlObj || !xmlObj.fileDatas.length) {
-            xmlObj = new XMLStandard(userID, 1);
-            for (let checkedData of checkedDatas) {
-                let fileKind = $(checkedData).val();
-                await xmlObj.toXml(projectObj.project.ID(), fileKind);
-            }
-        }
-        //设置提示弹窗
-        if (xmlObj.failList.length * 20 > 400) {
-         $('#hintBox_caption').addClass('export-check');
-         }
-         if (xmlObj.failList.length) {
-         throw xmlObj.failList.join('<br/>');
-         }
-        //可能先执行过自检了,已经有组装好的数据了,可以直接导出
-        pr.end();
-        await xmlObj.exportFile();
-        console.log(xmlObj);
-        $('#export').modal('hide');
-    } catch (err) {
-        pr.end();
-        alert(err);
-    }
-});
-$('#export').on('show.bs.modal', function () {
-    xmlObj = null;
-});
-$('#export').on('hide.bs.modal', function() {
-    xmlObj = null;
-    //恢复设置提示弹窗 因为是共用的alert
-    $('#hintBox_caption').removeClass('export-check');
-    $('#export input[type="checkbox"]:eq(0)').prop('checked', true);
-});
-$('#export input[type="checkbox"]').click(function () {
-    xmlObj = null;
-});
+//导出接口
+ExportView.exportListener();

+ 1 - 1
web/building_saas/pm/html/project-management.html

@@ -868,7 +868,7 @@
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">工程专业</label>
                         <div class="col">
-                            <select id="tbc-engineering" class="form-control form-control-sm" readonly>
+                            <select id="tbc-engineering" class="form-control form-control-sm">
                             </select>
                         </div>
                     </div>

+ 90 - 32
web/building_saas/pm/js/pm_import.js

@@ -171,11 +171,57 @@ const importView = (() => {
             $('#tbc-engineering').empty();  //清空工程专业选项
             $('#tbc-feeStandard').empty();  //清空费用标准选项
             $('#tbc-calcProgram').empty();  //清空计算程序选项
+            //
+            //let engineerings = this.engineeringList.filter(data => data.lib.name === tenderData.engineering);
+            let engineerings = [];
+            if (tenderData.temp.engineering) {
+                engineerings = this.engineeringList.filter(data => data.lib.name === tenderData.temp.engineering);
+            } else {
+                engineerings = this.engineeringList.filter(data => data.lib.name === tenderData.engineering);
+                tenderData.temp.engineering = tenderData.engineering;
+            }
+            //文件里的工程专业跟软件里的对应不上,取第一个
+            if (!engineerings.length) {
+                engineerings = this.engineeringList.filter(data => data.lib.seq === 1) || [this.engineeringList[0]];
+                tenderData.temp.engineering = engineerings[0];
+            }
+            if (!engineerings.length) {
+                return;
+            }
+            //工程专业名称去重
+            let engineeringNames = [...new Set(this.engineeringList.map(data => data.lib.name))];
+            let engineeringHtml = engineeringNames.map(name =>
+             `<option ${tenderData.temp.engineering === name ? 'selected' : ''} value="${name}">${name}</option>`);
+             $('#tbc-engineering').html(engineeringHtml);
+            //$('#tbc-engineering').html(`<option selected value="${tenderData.engineering}">${tenderData.engineering}</option>`);
+            //费用标准,若当前工程有费用标准数据(该数据本身没有费用标准数据,选择过了,就会记录),则选中该费用标准
+            let feeOptsHtml = engineerings.map(data =>
+                `<option ${tenderData.temp.feeStandard === data.lib.feeName ? 'selected' : ''} value="${data.lib.feeName}">${data.lib.feeName}</option>`).join('');
+            $('#tbc-feeStandard').html(feeOptsHtml);
+            //记录选中的费用标准
+            tenderData.temp.feeStandard = $('#tbc-feeStandard').val();
+            //根据工程专业及费用标准确定的当前选中的工程专业库
+            let curEngineering = engineerings.find(data => data.lib.feeName === tenderData.temp.feeStandard) || engineerings[0];
+            //根据计税方法过滤出来的计税组合
+            let taxDatas = curEngineering.lib.tax_group.filter(data => data.taxType == this.taxType);
+            //计算程序,若当前工程有计算程序(该数据本身没有计算程序数据,选择过了,就会记录),则选中该计算程序
+            let calcOptsHtml = taxDatas.map(data =>
+                `<option ${tenderData.temp.calcProgram === data.program_lib.name ? 'selected' : ''} value="${data.program_lib.name}">${data.program_lib.name}</option>`);
+            $('#tbc-calcProgram').html(calcOptsHtml);
+            tenderData.temp.calcProgram = $('#tbc-calcProgram').val();
+        }
+        /*initFeeOpts(tenderData) {
+            $('#tbc-engineering').empty();  //清空工程专业选项
+            $('#tbc-feeStandard').empty();  //清空费用标准选项
+            $('#tbc-calcProgram').empty();  //清空计算程序选项
             //工程专业
             let engineerings = this.engineeringList.filter(data => data.lib.name === tenderData.engineering);
             if (!engineerings.length) {
                 return;
             }
+            /!*let engineeringHtml = this.engineeringList.map(data =>
+                `<option ${tenderData.engineering === data.lib.name ? 'selected' : ''} value="${data.lib.name}">${data.lib.name}</option>`);
+            $('#tbc-engineering').html(engineeringHtml);*!/
             $('#tbc-engineering').html(`<option selected value="${tenderData.engineering}">${tenderData.engineering}</option>`);
             //费用标准,若当前工程有费用标准数据(该数据本身没有费用标准数据,选择过了,就会记录),则选中该费用标准
             let feeOptsHtml = engineerings.map(data =>
@@ -195,7 +241,7 @@ const importView = (() => {
             if (!tenderData.temp.calcProgram) {
                 tenderData.temp.calcProgram = $('#tbc-calcProgram').val();
             }
-        }
+        }*/
     }
     /*
      * 根据条件获取计税组合数据
@@ -223,7 +269,7 @@ const importView = (() => {
         }
         //计税数据
         let query = {
-            engineeringName: curData.engineering,
+            engineeringName: curData.temp.engineering || curData.engineering,
             feeStandard: curData.temp.feeStandard,
             taxType: tbcObj.taxType,    //取导入时选择的计税方法,不读取文件中的计税方法
             calcProgram: curData.temp.calcProgram
@@ -350,6 +396,15 @@ const importView = (() => {
                 }
             }
         });
+        //变换专业工程
+        $('#tbc-engineering').change(function () {
+            let curData = tbcObj ? tbcObj.datas[tbcObj.curIdx] : null;
+            if (!curData) {
+                return;
+            }
+            curData.temp.engineering = $(this).val();
+            tbcObj.initFeeOpts(curData);
+        });
         //变换费用标准
         $('#tbc-feeStandard').change(function () {
             let curData = tbcObj ? tbcObj.datas[tbcObj.curIdx] : null;
@@ -357,6 +412,7 @@ const importView = (() => {
                 return;
             }
             curData.temp.feeStandard = $(this).val();
+            tbcObj.initFeeOpts(curData);
         });
         //变换计算程序
         $('#tbc-calcProgram').change(function () {
@@ -365,6 +421,7 @@ const importView = (() => {
                 return;
             }
             curData.temp.calcProgram = $(this).val();
+            tbcObj.initFeeOpts(curData);
         });
         //待确认-下一工程
         $('#tbc-next').click(function () {
@@ -381,37 +438,38 @@ const importView = (() => {
             if (tbcObj && tbcObj.checkValid()) {
                 return;
             }
-            //建设项目设置选择的文件类型和选择的计税方法
-            xmlObj.property.fileKind = tbcObj.fileKind;
-            xmlObj.property.taxType = tbcObj.taxType;
-            //确定使用的计税组合
-            tbcObj.datas.map(data => {
-                data.property = getProperty(tbcObj, data);
-                //默认定额库
-                let curEngineering = tbcObj.engineeringList.find(enData => data.engineering === enData.lib.name &&
-                data.temp.feeStandard === enData.lib.feeName);
-                let defaultLib = curEngineering.lib.ration_lib.find(data => data.isDefault) || curEngineering.lib.ration_lib[0];
-                data.defaultRationLib = parseInt(defaultLib.id);
-                //此费用定额下可用的定额库id,人材机库id
-                data.rationLibIDs = curEngineering.lib.ration_lib.map(data => parseInt(data.id));
-                data.gljLibIDs = curEngineering.lib.glj_lib.map(data => parseInt(data.id));
-            });
-            //确定生成建设项目的父、前、后节点ID
-            let {parentProjectID, preProjectID, nextProjectID} = projTreeObj.getRelProjectID(projTreeObj.tree.selected);
-            xmlObj.ParentID = parentProjectID;
-            xmlObj.preID = preProjectID;
-            xmlObj.NextSiblingID = nextProjectID;
-            //确定建设项目的名称(不允许重复)
-            let sameDepthProjs = getProjs(projTreeObj.tree.selected);
-            if (sameDepthProjs.find(node => node.data.name === xmlObj.name)) {
-                xmlObj.name += `(${moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')})`;
-            }
-            //console.log(xmlObj);
-            $('#importInterface').modal('hide');
-            //let importData = await importXML.transformData(xmlObj);
             let pr = new SCComponent.InitProgressBar($('#progress'), $('#progress-title'), $('#progress-content'), $('#progressBar'));
-            pr.start('导入文件', '正在生成文件,请稍候……');
             try {
+                //建设项目设置选择的文件类型和选择的计税方法
+                xmlObj.property.fileKind = tbcObj.fileKind;
+                xmlObj.property.taxType = tbcObj.taxType;
+                //确定使用的计税组合
+                tbcObj.datas.map(data => {
+                    data.property = getProperty(tbcObj, data);
+                    //默认定额库
+                    let curEngineering = tbcObj.engineeringList.find(enData => data.temp.engineering === enData.lib.name &&
+                    data.temp.feeStandard === enData.lib.feeName);
+                    let defaultLib = curEngineering.lib.ration_lib.find(data => data.isDefault) || curEngineering.lib.ration_lib[0];
+                    data.defaultRationLib = parseInt(defaultLib.id);
+                    //此费用定额下可用的定额库id,人材机库id
+                    data.rationLibIDs = curEngineering.lib.ration_lib.map(data => parseInt(data.id));
+                    data.gljLibIDs = curEngineering.lib.glj_lib.map(data => parseInt(data.id));
+                });
+                //确定生成建设项目的父、前、后节点ID
+                let {parentProjectID, preProjectID, nextProjectID} = projTreeObj.getRelProjectID(projTreeObj.tree.selected);
+                xmlObj.ParentID = parentProjectID;
+                xmlObj.preID = preProjectID;
+                xmlObj.NextSiblingID = nextProjectID;
+                //确定建设项目的名称(不允许重复)
+                let sameDepthProjs = getProjs(projTreeObj.tree.selected);
+                if (sameDepthProjs.find(node => node.data.name === xmlObj.name)) {
+                    xmlObj.name += `(${moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')})`;
+                }
+                //console.log(xmlObj);
+                $('#importInterface').modal('hide');
+                //let importData = await importXML.transformData(xmlObj);
+                pr.start('导入文件', '正在生成文件,请稍候……');
+
                 let importData = await importXML.transformData(xmlObj);
                 let blob = new Blob([JSON.stringify(importData)], {type: 'text/plain;charset=utf-8'});
                 console.log(blob);
@@ -441,7 +499,7 @@ const importView = (() => {
                 pr.end();
                 alert(err);
             }
-    });
+        });
         //导入窗口消失后
         $('#importInterface').on('hidden.bs.modal', function () {
             importXML = null;