Переглянути джерело

导出重庆接口压缩包

zhangweicheng 5 роки тому
батько
коміт
8e858713b3

+ 13 - 14
web/building_saas/main/html/main.html

@@ -2148,7 +2148,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title"><%= region %>指标成果文件接口<!-- 重庆其他电子招投标数据接口 --></h5>
+                <h5 class="modal-title"><%= region %>指标成果接口文件<!-- 重庆其他电子招投标数据接口 --></h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -2157,7 +2157,7 @@
                 <!--检测提醒-->
                 <div class="card">
                     <div class="card-body">
-                        <h5 class="card-title">导出<%= region %>电子招投标数据接口文件</h5>
+                        <h5 class="card-title">导出<%= region %>指标成果接口文件</h5>
                         <p class="card-text">导出之前,建议您执行项目自检功能,避免出现错误。</p>
                         <a id="export-index-check" href="javascript:void(0);" class="btn btn-primary">自检</a>
                     </div>
@@ -2187,25 +2187,24 @@
                 <div class="modal-auto-height" style="overflow: hidden" id="exportSpread">
                 </div>
                 <p>*工程编号作为单项、单位工程的标识,要求在建设项目下唯一。</p>
-
-
-                <div class="form-group" style="">
+                <div class="form-group" id="export_index_checkbox" style="display: none">
                     <div class="form-check ml-4">
-                        <input class="form-check-input" type="checkbox"  id="sei1" checked>
+                        <input class="form-check-input" type="checkbox" disabled id="sei1" checked>
                         <label class="form-check-label" for="sei1">
-                            投标文件
+                            数据交换文件
                         </label>
-                        <small class="form-text text-muted">投标工程数据文件</small>
-                        <input class="form-check-input" type="checkbox"  id="sei2" checked>
+                    </div>
+                    <div class="form-check ml-4">
+                        <input class="form-check-input" type="checkbox" disabled id="sei2" checked>
                         <label class="form-check-label" for="sei2">
-                            投标文件
+                            项目文件
                         </label>
-                        <small class="form-text text-muted">投标工程数据文件</small>
-                        <input class="form-check-input" type="checkbox"  id="sei3" checked>
+                    </div>
+                    <div class="form-check ml-4">
+                        <input class="form-check-input" type="checkbox" disabled id="sei3" checked>
                         <label class="form-check-label" for="sei3">
-                            标文件
+                            造价指标文件
                         </label>
-                        <small class="form-text text-muted">投标工程数据文件</small>
                     </div>
                 </div>
             </div>

+ 32 - 19
web/building_saas/main/js/views/export_view.js

@@ -76,7 +76,7 @@ const ExportView = (() => {
         }
     }
     // 确定导出
-    async function handleExportConfirm() {
+    async function handleExportConfirm(codes) {
         if (!spread || !_exportCache || !_exportCache.length) {
             return false;
         }
@@ -86,18 +86,6 @@ const ExportView = (() => {
         STATE.confirming = true;
         let pr = new SCComponent.InitProgressBar();
         try {
-            // 工程编号
-            let codes = getCodeFromSheet(spread.getSheet(0));
-            if (codes.includes('')) {
-                alert('单项、单位工程工程编号不可为空。');
-                STATE.confirming = false;
-                return false;
-            }
-            if ([...new Set(codes)].length !== codes.length) {
-                alert('单项、单位工程工程编号必须唯一。');
-                STATE.confirming = false;
-                return false;
-            }
             pr.start('导出数据接口', '正在导出文件,请稍候……');
             // 导出文件
             await _base.exportFile(codes, _exportCache, XMLStandard.resetContentCode, XMLStandard.saveAsFile);
@@ -216,17 +204,42 @@ const ExportView = (() => {
         //工程编号设置窗口-----
         //设置工程编号
         $('#exportCode').on('shown.bs.modal', function () {
-            if (!_exportCache || !_exportCache.length) {
-                alert('数据错误!');
-                $(this).modal('hide');
-                return false;
+            let projectData = null;
+            if(SEIObject.exporting == true){//如果是重庆指标接口调用的
+                if(SEIObject.fileCache && SEIObject.fileCache.length == 2){
+                    projectData = SEIObject.fileCache[0].projectData;
+                }else{
+                    alert('数据错误!');
+                    $(this).modal('hide');
+                    return false;
+                }
+                $("#export_index_checkbox").show();
+            }else {
+                if (!_exportCache || !_exportCache.length) {
+                    alert('数据错误!');
+                    $(this).modal('hide');
+                    return false;
+                }
+                projectData = _cache.getItem('projectData');
+                $("#export_index_checkbox").hide();
             }
-            let projectData = _cache.getItem('projectData');
             initSpread(XML_EXPORT_BASE.UTIL.getCodeSheetData(projectData));
         });
         //设置完工程编号后,导出数据。如果选中多个文件,导出压缩包
         $('#exportCode-confirm').click(async function () {
-            await handleExportConfirm();
+            // 工程编号
+            let codes = getCodeFromSheet(spread.getSheet(0));
+            if (codes.includes('')) {
+                alert('单项、单位工程工程编号不可为空。');
+                STATE.confirming = false;
+                return false;
+            }
+            if ([...new Set(codes)].length !== codes.length) {
+                alert('单项、单位工程工程编号必须唯一。');
+                STATE.confirming = false;
+                return false;
+            }
+            SEIObject.exporting?await exportUtil.exprotZBFX(codes):await handleExportConfirm(codes);
         });
         //导出窗口--------
         $('#export').on('hide.bs.modal', function() {

+ 1 - 0
web/building_saas/main/js/views/project_info.js

@@ -25,6 +25,7 @@ var projectInfoObj = {
                 '<span data-toggle="tooltip" data-placement="bottom" data-original-title="当前的工程状态为“协作”,可直接编辑分享人的原始数据。">(协作)</span>'
                 : ''}`;
             fullPath.push(newHtml);
+            fullPath.push(`<input id="rootProjectName" value="${projectName}" type="hidden">`);
 
         }
         return fullPath.join('');

+ 109 - 45
web/over_write/js/chongqing_2018_export_sei.js

@@ -23,72 +23,127 @@ let exportUtil = {
     },
     getIndexBills:function (bills) {
         return gljUtil.getIndexBills(bills,fixedFlag,_,scMathUtil);
+    },
+    getProjectInfo :async function (data) {
+        let result = await ajaxPost("/pm/api/exportProject",data);
+        return result;
+    },
+    getProjectFile:async function(projectID,projectName){
+        let spString = "|----|";
+        let sumString = "";
+        let result = await exportUtil.getProjectInfo({projectID:projectID,type:"main",user_id: userID});
+        let result_arr = result.split(spString);
+        sumString = result_arr[0];
+        if(result_arr.length == 2){
+            let tenders = JSON.parse(result_arr[1]);
+            for(let t of tenders){
+                let tenderString = await exportUtil.getProjectInfo({projectID:t,rootProjectID:projectID,type:"sub",user_id: userID});
+                await  setTimeoutSync(null,500);//设置间隔
+                sumString = sumString + spString +tenderString;
+            }
+        }else {
+            throw new Error("数据错误 导出建设项目失败!");
+        }
+        let blob = new Blob([sumString], {type: 'text/plain;charset=utf-8'});
+        return {
+            blob: blob,
+            fileName: projectName+".ybp"
+        }
+    },
+    exprotZBFX:async function (codes) {
+        let pr = new SCComponent.InitProgressBar();
+        pr.start('导出数据接口', '正在导出,请稍候……');
+        try {
+            if(SEIObject.fileCache.length== 2){
+                let tem = SEIObject.fileCache.shift();
+                let fileArry =await XML_EXPORT_BASE.getExtractFile(codes,tem.extractData);
+                //添加招投标数据文件
+                SEIObject.fileCache = SEIObject.fileCache.concat(fileArry);
+
+                //导出建设项目数据
+                let projectFile = await exportUtil.getProjectFile(projectObj.project.property.rootProjectID,$("#rootProjectName").val());
+                //导出压缩包
+                SEIObject.fileCache.push(projectFile);
+                await saveZBFX(SEIObject.fileCache);
+            }
+        }catch (e){
+            console.log(e);
+            alert(e.message);
+        }finally {
+            pr.end();
+            $('#exportCode').modal('hide');
+            $('#exportIndex').modal('hide');
+        }
+
+        async function saveZBFX(fileData) {
+            let zip = new JSZip();
+            for (let file of fileData) {
+                zip.file(file.fileName, file.blob, {binary: true});
+            }
+            let zipFile = await zip.generateAsync({type: 'blob'});
+            saveAs(zipFile, '经济指标.ZBFX');
+        }
     }
 };
 
-let SEIObject = {};
+let SEIObject = {
+    exporting:false,
+    fileCache:[],
+    errorMap:{},
+    selfChecked:false
+};
 
 async function selfChecking(projectID,exprotCall=false) {//自检和正式导出共用接口
-    let pr = new SCComponent.InitProgressBar();
-   if(!exprotCall) pr.start('导出数据接口', '正在自检,请稍候……');
-
-    //先检查招投标数据  - todo
-
-    //检查重庆指标接口数量
-    if(_.isEmpty(SEIObject.errorMap)){
-        let [errorMap,SEIFile] = await getSEIIndexFile(projectID);
-        if(errorMap) {
-            SEIObject.errorMap = errorMap;
-        }else {
-            SEIObject.fileCache.push(SEIFile);
+    if(SEIObject.selfChecked == false){//自检过了就不用重复自检了
+        let extraData = await XML_EXPORT_BASE.getExtractData();
+        SEIObject.errorMap = extraData.failList;
+        SEIObject.fileCache.push(extraData);
+        //检查重庆指标接口数量
+        if(_.isEmpty(SEIObject.errorMap)){
+            let [errorMap,SEIFile] = await getSEIIndexFile(projectID);
+            if(errorMap) {
+                SEIObject.errorMap = errorMap;
+            }else {
+                SEIObject.fileCache.push(SEIFile);
+            }
         }
     }
-    _.isEmpty(SEIObject.errorMap)?alert("自检完成,未检测到错误数据。"): showExportError(SEIObject.errorMap);
+    if(_.isEmpty(SEIObject.errorMap)){
+        if(!exprotCall) alert("自检完成,未检测到错误数据。")
+    }else{
+        showExportError(SEIObject.errorMap);
+    }
     SEIObject.selfChecked = true;
-    if(!exprotCall) pr.end();
 }
 
 
 async function exportSEI(projectID){
     if(!_.isEmpty(SEIObject.errorMap)) return showExportError(SEIObject.errorMap);//如果自检的时候已经有错误,直接提示;
     let pr = new SCComponent.InitProgressBar();
-    pr.start('导出数据接口', '正在导出文件,请稍候……');
     SEIObject.exporting = true;
     try {
-        if(!SEIObject.selfChecked){//没有经过自检,则从招投标接口开始取数据
-            await selfChecking(projectID,true);
-            if(!_.isEmpty(SEIObject.errorMap)) return  pr.end();
-        }
-        //导出建设项目数据
-        //导出压缩包
-       // saveZBFX(SEIObject.fileCache);
-
+        if(!SEIObject.selfChecked)  pr.start('导出数据接口', '正在自检,请稍候……');
+        await selfChecking(projectID,true);
+        pr.end();
+        await setTimeoutSync(null,300);//设置间隔
+        $('#exportCode').modal('show');
     }catch (e){
         console.log(e);
-    }finally {
         pr.end();
-        $('#exportCode').modal('show');
-        //SEIObject.exporting = false;
+        alert(e.message);
     }
-
-
-    async function saveZBFX(fileData) {
-        let zip = new JSZip();
-        for (let file of fileData) {
-            zip.file(file.fileName, file.blob, {binary: true});
-        }
-        let zipFile = await zip.generateAsync({type: 'blob'});
-        saveAs(zipFile, '经济指标.ZBFX');
-    }
-
 }
 
-function showExportError(errorMap) {
+function showExportError(errorMap) {//errorMap 如果是一个数组,则是招投标接口传过来的
     let infoList = [];
-    for(let name in errorMap){
-        infoList.push(`<span style="font-weight: bold">单位工程“${name}”下:</span>`);
-        for(let err of errorMap[name]){
-            infoList.push(err);
+    if(Array.isArray(errorMap)){
+        infoList = errorMap;
+    }else {
+        for(let name in errorMap){
+            infoList.push(`<span style="font-weight: bold">单位工程“${name}”下:</span>`);
+            for(let err of errorMap[name]){
+                infoList.push(err);
+            }
         }
     }
     if(infoList.length > 20){
@@ -578,8 +633,17 @@ async function getSEIIndexFile(projectID) {
 
 $(function () {
 
-    $("#export-index-check").click( function (){
-        selfChecking(projectObj.project.property.rootProjectID);
+    $("#export-index-check").click(async function (){
+        let pr = new SCComponent.InitProgressBar();
+        pr.start('导出数据接口', '正在自检,请稍候……');
+        try {
+           await selfChecking(projectObj.project.property.rootProjectID);
+        }catch (e){
+            console.log(e);
+        }finally {
+            pr.end();
+        }
+
     });
     $("#export-index-confirm").click(async function (){
         await  exportSEI(projectObj.project.property.rootProjectID);

+ 2 - 2
web/users/html/index.html

@@ -8,7 +8,7 @@
       <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
       <link rel="stylesheet" href="/web/building_saas/css/all.css">
       <link rel="stylesheet" href="/web/building_saas/css/style.css">
-      <title>大司空云计价 - 远程办公,用免费正版市政计价软件</title>
+      <title>大司空云计价 - 正版软件永久免费</title>
       <link rel="shortcut icon" href="/web/building_saas/css/favicon.ico" />
    </head>
    <body>
@@ -33,7 +33,7 @@
       <!--banner-->
       <div class="hero bg-dark section " style="background-image: url(/web/users/images/bg_01.png);" id="home">
          <div class="container text-center">
-            <h1 class="text-white mb-4 f-50 ">远程办公,用免费正版市政计价软件</h1>
+            <h1 class="text-white mb-4 f-50 ">大司空市政云计价,正版软件永久免费</h1>
             <p class="lead text-white mb-5">跨平台,打开浏览器即可使用,全新在线计价体验。
             <!-- <div class="btn_hero mb-5">
                <a href="#" class="btn btn-primary btn-round mr-2">GET THIS APP</a>