Bläddra i källkod

导出多种类型的文件时,提示去重合并相关

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

+ 2 - 1
web/building_saas/main/js/models/exportStandardInterface.js

@@ -951,6 +951,8 @@ const XMLStandard = (function () {
         //@param {Number}tenderID(当前界面的单位工程ID,后台根据这个单位工程,去找其建设项目下所有数据)
         //@return {Object}(eleObj)
         async function loadProject(projectData) {
+            // 标记自检提示的开始(一次性多出多个文件类型,会导出多次)
+            _failList.push(_config.HINT_START);
             console.log(projectData);
             //标段
             let project = new Project({
@@ -1735,7 +1737,6 @@ const XMLStandard = (function () {
                         if (hasBillsClass) {
                             _failList.push(`第${source.row}行清单应是清单分类,其下必须有清单项目。<span style="color: red">(错误清单结构)</span>`);
                         }
-                        debugger;
                         parent.children.push(new TurnKeyContractItem(source));
                     }
                 }

+ 60 - 3
web/building_saas/main/js/models/exportStdInterfaceBase.js

@@ -8,7 +8,8 @@
  * @version
  */
 const XML_EXPORT_BASE = (() => {
-
+    // 自检提示的开始记号,区分提示属于哪一部分的类型(eg: 招标、控制价),便于后续做提示的合并去重
+    const HINT_START = '--start--';
     // 属性类型
     const TYPE = {
         DATE: 1,        //日期类型YYYY-MM-DD
@@ -40,7 +41,7 @@ const XML_EXPORT_BASE = (() => {
         coe: 'priceCoe' // 价格指数调整法
     };
     // 加载数据间隔,减少服务器压力
-    const TIMEOUT_TIME = 500;
+    const TIMEOUT_TIME = 200;
     // 导出粒度
     const GRANULARITY = {
         PROJECT: 1,         //导出建设项目
@@ -55,6 +56,7 @@ const XML_EXPORT_BASE = (() => {
     };
     // 配置项
     const CONFIG = Object.freeze({
+        HINT_START,
         TYPE,
         WHITE_SPACE,
         TAX_TYPE,
@@ -164,7 +166,7 @@ const XML_EXPORT_BASE = (() => {
         let dateReg = /([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/;
         for (let data of datas) {
             // 值统一转换成String
-            data.value = !isDef(data.value)
+            data.value = !hasValue(data.value)
                 ? DEFAULT_VALUE[data.type]
                     ? DEFAULT_VALUE[data.type]
                     : ''
@@ -238,6 +240,60 @@ const XML_EXPORT_BASE = (() => {
         }
         return rst;
     }
+    // 提取各导出类型的自检数据
+    function _extractHintParts(failList) {
+        let rst = [],
+            curPart;
+        for (let hint of failList) {
+            if (hint === HINT_START) {
+                curPart = [];
+                rst.push(curPart);
+                continue;
+            }
+            curPart.push(hint);
+        }
+        return rst;
+    }
+    // 自检提示去重
+    function deWeightHints(failList) {
+        let rst = [];
+        let hintParts = _extractHintParts(failList);
+        // 建设项目提示文本
+        let rootHints = [],
+            // 单位工程提示文本映射
+            tenderMap = {},
+            reg = /^<span style="font-weight: bold">单位工程/;
+        for (let hintPart of hintParts) {
+            // 单位工程xxx提示
+            let curTenderHint;
+            // 提取建设项目提示、各自单位工程提示
+            for (let hint of hintPart) {
+                if (reg.test(hint)) {
+                    curTenderHint = hint;
+                    if (!tenderMap[curTenderHint]) {
+                        tenderMap[curTenderHint] = [];
+                    }
+                    continue;
+                }
+                if (curTenderHint) {
+                    tenderMap[curTenderHint].push(hint);
+                } else {
+                    rootHints.push(hint);
+                }
+            }
+        }
+        // 建设项目提示去重,放入结果中
+        rootHints = [...new Set(rootHints)];
+        rst.push(...rootHints);
+        // 单位工程提示放入结果中
+        for (let tenderHint in tenderMap) {
+            rst.push(tenderHint);
+            // 单位工程提示去重
+            let tenderHints = [...new Set(tenderMap[tenderHint])];
+            rst.push(...tenderHints);
+        }
+        return rst;
+    }
     // 等待一段时间
     function setTimeoutSync(handle, time) {
         return new Promise((resolve, reject) => {
@@ -609,6 +665,7 @@ const XML_EXPORT_BASE = (() => {
     }
 
     const UTIL = Object.freeze({
+        deWeightHints,
         isDef,
         hasValue,
         setTimeoutSync,

+ 4 - 3
web/building_saas/main/js/views/export_view.js

@@ -10,7 +10,8 @@
 //导出接口相关
 const ExportView = (() => {
     let _base = XML_EXPORT_BASE,
-        _cache = _base.CACHE;
+        _cache = _base.CACHE,
+        _util = _base.UTIL;
     // 导出数据缓存
     let _exportCache = [];
     //设置工程编号表格数据设置
@@ -82,7 +83,7 @@ const ExportView = (() => {
                         _exportCache.push(...exportData);
                     }
                 }
-                failList = [...new Set(failList)];
+                failList = _util.deWeightHints(failList);
                 //设置提示弹窗
                 if (failList.length * 20 > 400) {
                     $('#hintBox_caption').addClass('export-check');
@@ -126,7 +127,7 @@ const ExportView = (() => {
                     }
                     pr.end();
                 }
-                failList = [...new Set(failList)];
+                failList = _util.deWeightHints(failList);
                 //错误-设置提示弹窗
                 if (failList.length * 20 > 400) {
                     $('#hintBox_caption').addClass('export-check');