瀏覽代碼

广东接口问题
1.导入易达的文件,报无有效数据的问题
2.导入接口cos文件,计算取费方式要默认为“子目单价取费(反算)”
3.隐藏“子目含量取费”
4.导入广联达某cos文件,计算基数为空。(需要处理空费用代号问题)
5.计日工下最底层节点,导出为DayWorkRateItem,改成导出DayWorkRateGroup

vian 5 年之前
父節點
當前提交
2f52ea678f

+ 11 - 3
modules/pm/facade/pm_facade.js

@@ -1912,8 +1912,15 @@ async function getProjectPlaceholder(data) {
 /*
 * 接口导入 项目详细数据都导入完成了,再生成项目数据(项目管理界面数据)
 * */
-async function importProject(importObj, userID, compilationID) {
+async function importProject(importObj, userID, compilationID, overWriteUrl) {
     let toInsertProjects = [importObj];  //待新增项目数据
+    let billsCalcMode = 0;
+    if (overWriteUrl) {
+        const overWrite = require('../../..' + overWriteUrl);
+        if(overWrite.getBillsCalcMode) { // 重写清单计费取费方式
+            billsCalcMode = overWrite.getBillsCalcMode();
+        }
+    }
     await setupProject(importObj);
     //设置项目ID及相关数据
     for (let curEng of importObj.engs) {
@@ -2020,7 +2027,7 @@ async function importProject(importObj, userID, compilationID) {
         //呈现选项
         data.property.displaySetting = displaySetting;
 
-        data.property.billsCalcMode = 0;
+        data.property.billsCalcMode = billsCalcMode;
         data.property.zanguCalcMode = 0;
         //计算选项
         data.property.calcOptions = calcOptions;
@@ -2482,7 +2489,8 @@ async function handleImportInterface(key, session) {
         if (await isTenderOverrun(tenderCount, session)) {
             throw '您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。';
         }
-        const projectID = await importProject(importData, userID, compilationID);
+        const overWriteUrl = session.sessionCompilation.overWriteUrl;
+        const projectID = await importProject(importData, userID, compilationID, overWriteUrl);
         doc.projectID = [projectID];
     } catch (err) {
         doc.errorMsg = typeof err === 'string' ? err : '导入接口失败,请检查接口文件!';

+ 5 - 0
web/over_write/js/guangdong_2018.js

@@ -244,4 +244,9 @@ function getBillsCalcMode() {
 
 function getAreaName() {
     return 'guangdong_2018'
+}
+
+// 隐藏项目属性中:取费方式中的子目含量取费选项
+if ($('#rationContent')) {
+    $('#rationContent').parent().hide();
 }

+ 3 - 2
web/over_write/js/guangdong_2018_export.js

@@ -2621,7 +2621,7 @@ const XMLStandard = (function () {
                     ele = groupFactory(node);
                     // 递归获取子元素
                     ele.children = loadGroupAndItems(node.children, groupFactory, itemFactory);
-                } else { // 无子清单的是分项
+                } else { // 无子清单的是子目(除了计日工,计日工最底层节点也需要是标题,否则检测平台会报错)
                     ele = itemFactory(node);
                 }
                 return ele;
@@ -2679,10 +2679,11 @@ const XMLStandard = (function () {
             if (!isValidDepth) {
                 _failList.push('计日工子项超过两层')
             } else {
+                // 计日工最底层节点也需要是标题,否则检测平台会报错
                 dayworkRate.children = loadGroupAndItems(
                     daywork.children,
                     (node) => new DayWorkRateGroup(node),
-                    (node) => new DayWorkRateItem(node)
+                    (node) => new DayWorkRateGroup(node)
                 );
             }
             // 总承包服务费

+ 6 - 1
web/over_write/js/guangdong_2018_import.js

@@ -1122,7 +1122,8 @@ const importXML = (() => {
     }
     // 检查清单是否引用了自身,比如广联达导出文件中 材料保管费基数为CLBGF
     function isCalcBaseCycle(bills) {
-        return bills.calcBase.match(new RegExp(`\\b${bills.feeCode}\\b`)); // \b: 匹配前一个字符和后一个字符不全为\w的位置
+        const matched = bills.calcBase.match(new RegExp(`\\b${bills.feeCode}\\b`)); // \b: 匹配前一个字符和后一个字符不全为\w的位置
+        return !!(matched && matched[0]);
     }
     // 转换计算基数
     // 1.有子项数据,则清空基数
@@ -1604,9 +1605,13 @@ const importXML = (() => {
             throw '无有效数据';
         }
         const xmlObjMap = {};
+        // 导入易达的文件,经过unzipFile的decodeFileName,xml文件头部变成了<?xml version="1.0" encoding="utf-8"?>,需要将前面的乱码去除,否则DOMParser转换后是null
+        const reg = /.*<\?xml version="1.0" encoding="utf-8"\?>/i;
         for (const fileName in fileMap) {
+            fileMap[fileName] = fileMap[fileName].replace(reg, '<?xml version="1.0" encoding="utf-8"?>');
             // x2js转换xml使用了DomParser接口,会将一些字符实体进行转义。若不想被自动转义,则需要调用escapeXMLEntity
             const xmlStr = escape ? util.escapeXMLEntity(fileMap[fileName]) : fileMap[fileName];
+            console.log(xmlStr);
             //将xml格式良好的字符串转换成对象
             const x2js = new X2JS();
             let xmlObj = x2js.xml_str2json(xmlStr);