Pārlūkot izejas kodu

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

TonyKang 5 gadi atpakaļ
vecāks
revīzija
d3469927f2
40 mainītis faili ar 1909 papildinājumiem un 1022 dzēšanām
  1. 1 1
      app/const/spread.js
  2. 0 20
      app/controller/change_controller.js
  3. 1 1
      app/controller/deal_bills_controller.js
  4. 2 2
      app/controller/revise_controller.js
  5. 3 1
      app/controller/tender_controller.js
  6. 2 1
      app/extend/helper.js
  7. 0 8
      app/lib/stage_im.js
  8. 5 5
      app/public/css/bootstrap/bootstrap.min.css
  9. 67 0
      app/public/js/gcl_gather.js
  10. 3 3
      app/public/js/ledger_audit.js
  11. 79 0
      app/public/js/ledger_gather.js
  12. 3 3
      app/public/js/material_audit.js
  13. 7 0
      app/public/js/spreadjs_rela/spreadjs_zh.js
  14. 10 4
      app/public/js/stage.js
  15. 3 3
      app/public/js/stage_audit.js
  16. 2 2
      app/public/js/stage_compare.js
  17. 102 10
      app/public/js/stage_gather.js
  18. 3 1
      app/public/js/stage_im.js
  19. 0 33
      app/public/js/tender.js
  20. 1 1
      app/public/js/tender_list.js
  21. 2 1
      app/public/js/tender_list_info.js
  22. 3 2
      app/public/js/tender_list_manage.js
  23. 2 1
      app/public/js/tender_list_progress.js
  24. 2 2
      app/service/ledger_revise.js
  25. 5 0
      app/service/stage_audit.js
  26. 12 1
      app/service/tender.js
  27. 0 100
      app/view/change/info_modal.ejs
  28. 2 108
      app/view/ledger/audit_modal.ejs
  29. 45 16
      app/view/ledger/gather.ejs
  30. 2 2
      app/view/material/audit_modal.ejs
  31. 4 4
      app/view/revise/index.ejs
  32. 251 144
      app/view/revise/info_modal.ejs
  33. 4 6
      app/view/stage/audit_modal.ejs
  34. 1 1
      app/view/stage/compare_modal.ejs
  35. 31 25
      app/view/stage/gather.ejs
  36. 20 1
      app/view/stage/gather_modal.ejs
  37. 80 506
      app/view/tender/detail.ejs
  38. 1144 0
      app/view/tender/detail_modal.ejs
  39. 2 1
      config/config.qa.js
  40. 3 2
      config/web.js

+ 1 - 1
app/const/spread.js

@@ -377,7 +377,7 @@ const stageCompare = {
             {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 230, formatter: '@'},
         ],
         extraCols: [
-            {title: '%s数量', colSpan: '1', rowSpan: '1', field: 'gather_qty%s', hAlign: 2, width: 60, formatter: '@'},
+            {title: '%s', colSpan: '1', rowSpan: '1', field: 'gather_qty%s', hAlign: 2, width: 60, formatter: '@'},
         ],
         emptyRows: 3,
         headRows: 1,

+ 0 - 20
app/controller/change_controller.js

@@ -414,26 +414,6 @@ module.exports = app => {
                     // 展示页左侧审批流程列表和清单审批列表数据
                     const auditList2 = await ctx.service.changeAudit.getListGroupByTimes(change.cid, change.times);
                     renderData.auditList2 = auditList2;
-                    const auditList4 = await ctx.service.changeAudit.getListByStatus(change, 7);
-                    // 展示页右侧审批流程列表
-                    const auditList3 = [];
-                    for (let time = 1; time < change.times; time++) {
-                        const auditTimeList = [];
-                        let max_sort = 1;
-                        for (const al of auditList4) {
-                            if (al.times === time) {
-                                auditTimeList.push(al);
-                                if (al.usite > max_sort) {
-                                    max_sort = al.usite;
-                                }
-                            }
-                        }
-                        for (const i in auditTimeList) {
-                            auditTimeList[i].max_sort = max_sort;
-                        }
-                        auditList3.push(auditTimeList);
-                    }
-                    renderData.auditList3 = auditList3;
                     for (const i in auditList) {
                         auditList[i].max_sort = auditList2.length - 1;
                     }

+ 1 - 1
app/controller/deal_bills_controller.js

@@ -55,7 +55,7 @@ module.exports = app => {
                 stream = await ctx.getFileStream();
                 const create_time = Date.parse(new Date()) / 1000;
                 const fileInfo = path.parse(stream.filename);
-                const fileName = this.app.baseDir + '/app/public/deal_bills/uploads/' + 'deal_bills' + create_time + fileInfo.ext;
+                const fileName = this.app.config.filePath + '/cache/deal_bills/uploads/' + 'deal_bills' + create_time + fileInfo.ext;
                 // 保存文件
                 await ctx.helper.saveStreamFile(stream, fileName);
                 if (loadType === loadExcelType.display) {

+ 2 - 2
app/controller/revise_controller.js

@@ -207,11 +207,11 @@ module.exports = app => {
 
         async _getDefaultReviseInfoData(ctx, revise) {
             const reviseBills = revise.bills_file
-                ? JSON.parse(await fs.readFileSync(this.ctx.app.filePath + revise.bills_file, 'utf8'))
+                ? JSON.parse(await fs.readFileSync(this.ctx.app.config.filePath + revise.bills_file, 'utf8'))
                 : await ctx.service.reviseBills.getData(ctx.tender.id);
 
             const revisePos = revise.pos_file
-                ? JSON.parse(await fs.readFileSync(this.ctx.app.filePath + revise.pos_file, 'utf8'))
+                ? JSON.parse(await fs.readFileSync(this.ctx.app.config.filePath + revise.pos_file, 'utf8'))
                 : await ctx.service.revisePos.getData(ctx.tender.id);
             const [ledgerSpread, posSpread] = this._getSpreadSetting(revise);
             const [stdBills, stdChapters] = await this.ctx.service.valuation.getValuationStdList(ctx.tender.data.valuation);

+ 3 - 1
app/controller/tender_controller.js

@@ -309,8 +309,10 @@ module.exports = app => {
                 });
                 let sum = 0;
                 for (const p of monthProgress) {
+                    p.ratio = ctx.helper.mul(ctx.helper.div(p.tp, tender.sum, 4), 100);
                     sum = ctx.helper.add(sum, p.tp);
                     p.end_tp = sum;
+                    p.end_ratio = ctx.helper.mul(ctx.helper.div(p.end_tp, tender.sum, 4), 100);
                 }
                 const renderData = {
                     tender: tender,
@@ -324,7 +326,7 @@ module.exports = app => {
                     audit: auditConst,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.tenderInfo),
                 };
-                await this.layout('tender/detail.ejs', renderData);
+                await this.layout('tender/detail.ejs', renderData, 'tender/detail_modal.ejs');
             } catch (error) {
                 this.log(error);
                 this.ctx.redirect('/list');

+ 2 - 1
app/extend/helper.js

@@ -504,6 +504,7 @@ module.exports = {
      * @returns {Promise<void>}
      */
     async saveBufferFile(buffer, fileName) {
+        console.log(fileName);
         // 检查文件夹是否存在,不存在则直接创建文件夹
         const pathName = path.dirname(fileName);
         if (!fs.existsSync(pathName)) {
@@ -791,7 +792,7 @@ module.exports = {
             if (!su.sms_type || su.sms_type === '') continue;
 
             const smsType = JSON.parse(su.sms_type);
-            if (smsType[type] && smsType.indexOf(judge) !== -1) {
+            if (smsType[type] && smsType[type].indexOf(judge) !== -1) {
                 mobiles.push(su.auth_mobile);
             }
         }

+ 0 - 8
app/lib/stage_im.js

@@ -596,14 +596,6 @@ class StageIm {
             delete im.changes;
         }
     }
-
-    // 生成中间计量汇总数据
-    async buildImGatherData () {
-        this._loadMainData();
-        if (stage.im_gather) {
-            this._checkGather();
-        }
-    }
 }
 
 module.exports = StageIm;

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 5
app/public/css/bootstrap/bootstrap.min.css


+ 67 - 0
app/public/js/gcl_gather.js

@@ -399,11 +399,78 @@ const gclGatherModel = (function () {
         }
     }
 
+    function _getCalcChapter(chapter) {
+        const gclChapter = [], otherChapter = [];
+        let serialNo = 1;
+        for (const c of chapter) {
+            const cc = { code: c.code, name: c.name, cType: 1 };
+            cc.serialNo = serialNo++;
+            cc.filter = '^' + c.code.substr(0, c.code.length - 2) + '[0-9]{2}-';
+            gclChapter.push(cc);
+        }
+        gclChapter.push({ name: '未计入章节清单合计', cType: 21, serialNo: serialNo++, });
+        otherChapter.push({ name: '清单小计(A)', cType: 11, serialNo: serialNo++ });
+        otherChapter.push({ name: '非清单项费用(B)', cType: 31, serialNo: serialNo++ });
+        otherChapter.push({ name: '合计(C=A+B)', cType: 41, serialNo: serialNo });
+        return [gclChapter, otherChapter];
+    }
+
+    function _gatherChapterFields(chapter, data, fields) {
+        for (const f of fields) {
+            chapter[f] = ZhCalc.add(chapter[f], data[f]);
+        }
+    }
+
+    function _getGclChapter(chapter, data) {
+        for (const c of chapter) {
+            if (c.filter) {
+                const reg = new RegExp(c.filter);
+                if (reg.test(data.b_code)) {
+                    return c;
+                }
+            } else {
+                return c;
+            }
+        }
+    }
+
+    function gatherChapterData(chapter, fields) {
+        const [gclChapter, otherChapter] = _getCalcChapter(chapter);
+        for (const d of gsTree.datas) {
+            if (d.children && d.children.length > 0) continue;
+
+            for (const c of otherChapter) {
+                if (c.cType === 41) {
+                    gatherfields(c, d, fields);
+                } else if (c.cType === 31 && (!d.b_code || d.b_code === '')) {
+                    gatherfields(c, d, fields);
+                } else if (c.cType === 11 && (d.b_code)) {
+                    gatherfields(c, d, fields);
+                }
+            }
+            if (d.b_code) {
+                const c = _getGclChapter(gclChapter, d);
+                gatherfields(c, d, fields);
+            }
+        }
+        for (const d of deal) {
+            for (const c of otherChapter) {
+            if (c.cType === 41 || c.cType === 11) {
+                c.deal_bills_tp = ZhCalc.add(c.deal_bills_tp, d.total_price);
+            }
+        }
+            const c = _getGclChapter(gclChapter, d);
+            c.deal_bills_tp = ZhCalc.add(c.deal_bills_tp, d.total_price);
+        }
+        return gclChapter.concat(otherChapter);
+    }
+
     return {
         loadLedgerData,
         loadPosData,
         loadDealBillsData,
         gatherGclData,
         checkDiffer,
+        gatherChapterData,
     };
 })();

+ 3 - 3
app/public/js/ledger_audit.js

@@ -251,8 +251,8 @@ $(document).ready(() => {
     })('a[name=showLevel]', ledgerSpread.getActiveSheet());
 });
 // texterea换行
-function auditCheck() {
-    const opinion = $('textarea[name="opinion"]').val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
-    $('textarea[name="opinion"]').val(opinion);
+function auditCheck(i) {
+    const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
+    $('textarea[name="opinion"]').eq(i).val(opinion);
     return true;
 }

+ 79 - 0
app/public/js/ledger_gather.js

@@ -76,6 +76,31 @@ $(document).ready(() => {
         }
     });
 
+    function generateChapterHtml(data) {
+        const html = [];
+        if (data) {
+            for (const d of data) {
+                if (['1000', '1100', '1200', '1300'].indexOf(d.code) >= 0) {
+                    if (checkZero(d.total_price) && checkZero(d.deal_bills_tp)) {
+                        continue;
+                    }
+                }
+                html.push('<tr>');
+                if (d.code) {
+                    html.push('<td>', d.code, '</td>');
+                    html.push('<td>', d.name, '</td>');
+                } else {
+                    html.push('<td colspan="2">', d.name, '</td>');
+                }
+                html.push('<td class="text-right">', d.deal_bills_tp ? d.deal_bills_tp : '', '</td>');
+                html.push('<td class="text-right">', d.total_price ? d.total_price : '', '</td>');
+                html.push('<td class="text-right">', d.compare_tp ? d.compare_tp : '', '</td>');
+                html.push('</tr>');
+            }
+        }
+        $('#chapter-list').html(html.join(''));
+    }
+
     postData(window.location.pathname + '/load', {}, function (data) {
         gclGatherModel.loadLedgerData(data.bills);
         gclGatherModel.loadPosData(data.pos);
@@ -88,8 +113,55 @@ $(document).ready(() => {
         }
         SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
         loadLeafXmjData(0);
+
+        const chapterData = gclGatherModel.gatherChapterData(chapter, ['total_price']);
+        for (const c of chapterData) {
+            c.compare_tp = ZhCalc.sub(c.deal_bills_tp, c.total_price);
+        }
+        generateChapterHtml(chapterData);
     }, null, true);
 
+    // 展开收起附件
+    $('a', '.right-nav').bind('click', function () {
+        const tab = $(this), tabPanel = $(tab.attr('content'));
+        const showTools = function (show) {
+            const left = $('#left-view'), right = $('#right-view'), parent = left.parent();
+            if (show) {
+                right.show();
+                autoFlashHeight();
+                /**
+                 * right.show()后, parent被撑开成2倍left.height, 导致parent.width减少了10px
+                 * 第一次left.width调整后,parent的缩回left.height, 此时parent.width又增加了10px
+                 * 故需要通过最终的parent.width再计算一次left.width
+                 *
+                 * Q: 为什么不通过先计算left.width的宽度,以避免计算两次left.width?
+                 * A: 右侧工具栏不一定显示,当右侧工具栏显示过一次后,就必须使用parent和right来计算left.width
+                 *
+                 */
+                    //left.css('width', parent.width() - right.outerWidth());
+                    //left.css('width', parent.width() - right.outerWidth());
+                const percent = 100 - right.outerWidth() /parent.width() * 100;
+                left.css('width', percent + '%');
+            } else {
+                right.hide();
+                left.css('width', '100%');
+            }
+        };
+        if (!tab.hasClass('active')) {
+            $('a', '.side-menu').removeClass('active');
+            $('.tab-content .tab-select-show').removeClass('active');
+            tab.addClass('active');
+            tabPanel.addClass('active');
+            showTools(tab.hasClass('active'));
+        } else {
+            tab.removeClass('active');
+            tabPanel.removeClass('active');
+            showTools(tab.hasClass('active'));
+        }
+        gclSpread.refresh();
+        leafXmjSpread.refresh();
+    });
+
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
@@ -117,4 +189,11 @@ $(document).ready(() => {
             leafXmjSpread.refresh();
         }
     });
+    $.divResizer({
+        select: '#right-spr',
+        callback: function () {
+            gclSpread.refresh();
+            leafXmjSpread.refresh();
+        }
+    });
 });

+ 3 - 3
app/public/js/material_audit.js

@@ -157,8 +157,8 @@ function checkAuditorFrom () {
     $('#hide-all').show();
 }
 // texterea换行
-function auditCheck() {
-    const opinion = $('textarea[name="opinion"]').val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
-    $('textarea[name="opinion"]').val(opinion);
+function auditCheck(i) {
+    const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
+    $('textarea[name="opinion"]').eq(i).val(opinion);
     return true;
 }

+ 7 - 0
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -272,6 +272,13 @@ const SpreadJsObj = {
         if (sheet.zh_setting.font) {
             const vStyle = new spreadNS.Style();
             vStyle.font = sheet.zh_setting.font;
+            vStyle.hAlign = 1;
+            vStyle.locked = false;
+            sheet.setDefaultStyle(vStyle, spreadNS.SheetArea.rowHeader);
+        }
+        if (sheet.zh_setting.font) {
+            const vStyle = new spreadNS.Style();
+            vStyle.font = sheet.zh_setting.font;
             vStyle.locked = false;
             sheet.setDefaultStyle(vStyle, spreadNS.SheetArea.viewport);
         }

+ 10 - 4
app/public/js/stage.js

@@ -1793,7 +1793,7 @@ $(document).ready(() => {
                                 updateData.unit = data.unit;
                                 updateData.unit_price = data.unit_price;
                             }
-                            updateData.doc_code = info.editingText;
+                            updateData.doc_code = info.editingText === null ? '' : info.editingText;
                             postData(window.location.pathname + '/detail/save', updateData, function (result) {
                                 stageIm.loadUpdateDetailData(result);
                                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -2212,7 +2212,7 @@ $(document).ready(() => {
                 updateData.drawing_code = $('#drawing-code').val();
                 updateData.calc_memo = $('#calc-memo').val();
                 postData(window.location.pathname + '/detail/save', updateData, function (result) {
-                    _.assign(data, result);
+                    stageIm.loadUpdateDetailData(result);
                     self.reLoadDetailData();
                 });
             });
@@ -2361,14 +2361,20 @@ $(document).ready(() => {
                     postData(window.location.pathname + '/detail/merge-img', updateData, function (result) {
                         data.calc_img = result.calc_img;
                         data.calc_img_org = result.calc_img_org;
-                        self.reLoadDetailData();
+                        const calcImgSrc = data && data.calc_img ? '/' + data.calc_img : '';
+                        $('#show-calc-img').attr('src', calcImgSrc);
+                        $('#calc-img').attr('src', calcImgSrc);
+                        $('#view-calc-img').attr('src', calcImgSrc);
                         $('#edit-img').modal('hide');
                     });
                 } else if (data.calc_img) {
                     postData(window.location.pathname + '/detail/merge-img', {updateType: 'clear', lid: data.lid, pid: data.pid, uuid: data.uuid}, function (result) {
                         data.calc_img = result.calc_img;
                         data.calc_img_org = result.calc_img_org;
-                        self.reLoadDetailData();
+                        const calcImgSrc = data && data.calc_img ? '/' + data.calc_img : '';
+                        $('#show-calc-img').attr('src', calcImgSrc);
+                        $('#calc-img').attr('src', calcImgSrc);
+                        $('#view-calc-img').attr('src', calcImgSrc);
                         $('#edit-img').modal('hide');
                     });
                 }

+ 3 - 3
app/public/js/stage_audit.js

@@ -157,8 +157,8 @@ function checkAuditorFrom () {
     $('#hide-all').show();
 }
 // texterea换行
-function auditCheck() {
-    const opinion = $('textarea[name="opinion"]').val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
-    $('textarea[name="opinion"]').val(opinion);
+function auditCheck(i) {
+    const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
+    $('textarea[name="opinion"]').eq(i).val(opinion);
     return true;
 }

+ 2 - 2
app/public/js/stage_compare.js

@@ -200,7 +200,7 @@ $(document).ready(function () {
             const compareRoles = [0];
             for (let order = 0, iLength = trs.length; order < iLength; order++) {
                 const tr = trs[order];
-                if ($('input', tr)[0].checked) {
+                if ($('input', tr).length > 0 && $('input', tr)[0].checked) {
                     compareRoles.push(order + 1);
                 }
             }
@@ -216,7 +216,7 @@ $(document).ready(function () {
         let loadData = [], showData = [], trs = $('tr[auditorId]');
         for (let order = 0, iLength = trs.length; order < iLength; order++) {
             const tr = trs[order];
-            if ($('input[type=checkbox]', tr)[0].checked) {
+            if ($('input[type=checkbox]', tr).length > 0 && $('input[type=checkbox]', tr)[0].checked) {
                 if (!scTree.minorData[order + 1]) {
                     loadData.push(order + 1);
                 }

+ 102 - 10
app/public/js/stage_gather.js

@@ -8,6 +8,40 @@
  * @version
  */
 
+function generateChapterHtml(data) {
+    const html = [];
+    if (data) {
+        for (const d of data) {
+            if (['1000', '1100', '1200', '1300'].indexOf(d.code) >= 0) {
+                if (checkZero(d.total_price) && checkZero(d.deal_bills_tp) &&
+                    checkZero(d.contract_tp) && checkZero(d.qc_tp) && checkZero(d.gather_tp) &&
+                    checkZero(d.end_contract_tp) && checkZero(d.end_qc_tp) && checkZero(d.end_gather_tp) &&
+                    checkZero(d.end_final_tp)) {
+                    continue;
+                }
+            }
+            html.push('<tr>');
+            if (d.code) {
+                html.push('<td>', d.code, '</td>');
+                html.push('<td>', d.name, '</td>');
+            } else {
+                html.push('<td colspan="2">', d.name, '</td>');
+            }
+            html.push('<td class="text-right">', d.deal_bills_tp ? d.deal_bills_tp : '', '</td>');
+            html.push('<td class="text-right">', d.total_price ? d.total_price : '', '</td>');
+            html.push('<td class="text-right">', d.contract_tp ? d.contract_tp : '', '</td>');
+            html.push('<td class="text-right">', d.qc_tp ? d.qc_tp : '', '</td>');
+            html.push('<td class="text-right">', d.gather_tp ? d.gather_tp : '', '</td>');
+            html.push('<td class="text-right">', d.end_contract_tp ? d.end_contract_tp : '', '</td>');
+            html.push('<td class="text-right">', d.end_qc_tp ? d.end_qc_tp : '', '</td>');
+            html.push('<td class="text-right">', d.end_gather_tp ? d.end_gather_tp : '', '</td>');
+            html.push('<td class="text-right">', d.end_final_tp ? d.end_final_tp : '', '</td>');
+            html.push('</tr>');
+        }
+    }
+    $('#chapter-list').html(html.join(''));
+}
+
 $(document).ready(function () {
     let per = _.toNumber(getLocalCache('StageGatherOverPercent'));
     if (per && !_.isNaN(per)) {
@@ -46,16 +80,6 @@ $(document).ready(function () {
         }
     });
 
-    // 上下窗口resizer
-    $.divResizer({
-        select: '#main-resize',
-        callback: function () {
-            gclSpread.refresh();
-            let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
-            $(".sp-wrap").height(bcontent-40);
-            leafXmjSpread.refresh();
-        }
-    });
     // 解析清单汇总数据
     gclGatherModel.loadLedgerData(ledger, curLedgerData, preLedgerData);
     gclGatherModel.loadPosData(pos, curPosData, prePosData);
@@ -111,4 +135,72 @@ $(document).ready(function () {
         setLocalCache('StageGatherOverPercent', this.value);
         checkOverRange();
     });
+    const chapterData = gclGatherModel.gatherChapterData(chapter, ['total_price', 'contract_tp', 'qc_tp', 'pre_contract_tp', 'pre_qc_tp']);
+    for (const c of chapterData) {
+        c.gather_tp = ZhCalc.add(c.contract_tp, c.qc_tp);
+        c.end_contract_tp = ZhCalc.add(c.contract_tp, c.pre_contract_tp);
+        c.end_qc_tp = ZhCalc.add(c.qc_tp, c.pre_qc_tp);
+        c.end_gather_tp = ZhCalc.add(c.end_contract_tp, c.end_qc_tp);
+        c.end_final_tp = ZhCalc.add(c.end_qc_tp, c.total_price);
+    }
+    generateChapterHtml(chapterData);
+
+    // 展开收起附件
+    $('a', '.right-nav').bind('click', function () {
+        const tab = $(this), tabPanel = $(tab.attr('content'));
+        const showTools = function (show) {
+            const left = $('#left-view'), right = $('#right-view'), parent = left.parent();
+            if (show) {
+                right.show();
+                autoFlashHeight();
+                /**
+                 * right.show()后, parent被撑开成2倍left.height, 导致parent.width减少了10px
+                 * 第一次left.width调整后,parent的缩回left.height, 此时parent.width又增加了10px
+                 * 故需要通过最终的parent.width再计算一次left.width
+                 *
+                 * Q: 为什么不通过先计算left.width的宽度,以避免计算两次left.width?
+                 * A: 右侧工具栏不一定显示,当右侧工具栏显示过一次后,就必须使用parent和right来计算left.width
+                 *
+                 */
+                    //left.css('width', parent.width() - right.outerWidth());
+                    //left.css('width', parent.width() - right.outerWidth());
+                const percent = 100 - right.outerWidth() /parent.width() * 100;
+                left.css('width', percent + '%');
+            } else {
+                right.hide();
+                left.css('width', '100%');
+            }
+        };
+        if (!tab.hasClass('active')) {
+            $('a', '.side-menu').removeClass('active');
+            $('.tab-content .tab-select-show').removeClass('active');
+            tab.addClass('active');
+            tabPanel.addClass('active');
+            showTools(tab.hasClass('active'));
+        } else {
+            tab.removeClass('active');
+            tabPanel.removeClass('active');
+            showTools(tab.hasClass('active'));
+        }
+        gclSpread.refresh();
+        leafXmjSpread.refresh();
+    });
+
+    // 上下窗口resizer
+    $.divResizer({
+        select: '#main-resize',
+        callback: function () {
+            gclSpread.refresh();
+            let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
+            $(".sp-wrap").height(bcontent-40);
+            leafXmjSpread.refresh();
+        }
+    });
+    $.divResizer({
+        select: '#right-spr',
+        callback: function () {
+            gclSpread.refresh();
+            leafXmjSpread.refresh();
+        }
+    });
 });

+ 3 - 1
app/public/js/stage_im.js

@@ -642,7 +642,9 @@ const stageIm = (function () {
         for (const d of datas) {
             const detail = _.find(details, {uuid: d.uuid});
             if (detail) {
-                _.assignIn(detail, d);
+                _.assignInWith(detail, d, function (oV, sV, key) {
+                    return imFields.indexOf(key) > -1 && !_.isUndefined(sV) && !_.isNull(sV) ? sV : oV;
+                });
             } else {
                 details.push(d);
             }

+ 0 - 33
app/public/js/tender.js

@@ -5,23 +5,6 @@
  * @date 2018/2/5
  * @version
  */
-
-// 整理数据
-let tenderData = [];
-try {
-    if (tenderList.length <= 0) {
-        throw '数据为空';
-    }
-    for(const tmp of tenderList) {
-        const tmpData = {
-            value: 7814964.00,
-            name: tmp.name,
-        };
-        tenderData.push(tmpData);
-    }
-} catch (error) {
-
-}
 // 属性
 function loadCommonProperty () {
     // 合同信息
@@ -730,20 +713,4 @@ $(document).ready(function() {
             $('#edit-6').parent().show();
         });
     });
-
-    //标段类型选择
-    $('#tender_type_select').change(function () {
-        const type = $(this).val() != 0 ? '/?type='+$(this).val() : '';
-        window.location.href = '/tender' + type;
-    });
-    //编辑标段 选择
-    $('.save-btn').on('click',function () {
-        $('#saveid').val($(this).attr('tender-id'));
-        $('#savename').val($(this).attr('tender-name'));
-        $('#savetype').val($(this).attr('tender-type'));
-    });
-    //删除标段 选择
-    $('.del-btn').on('click',function () {
-        $('#delid').val($(this).attr('tender-id'));
-    });
 });

+ 1 - 1
app/public/js/tender_list.js

@@ -143,10 +143,10 @@ function getCategoryHtml() {
         html.push('<div class="form-group" cate-id="' + cate.id + '">');
         html.push('<label>', cate.name, '</label>');
         html.push('<select class="form-control form-control-sm">');
-        html.push('<option value="0">不选</option>');
         for (const v of cate.value) {
             html.push('<option value="' + v.id + '">', v.value, '</option>');
         }
+        html.push('<option value="0">不选</option>');
         html.push('</select>');
         html.push('</div>');
         return html.join('');

+ 2 - 1
app/public/js/tender_list_info.js

@@ -142,10 +142,11 @@ function getCategoryHtml() {
         const html = [];
         html.push('<div class="form-group" cate-id="' + cate.id + '">');
         html.push('<lable>', cate.name, '</lable>');
-        html.push('<select class="form-control">');
+        html.push('<select class="form-control form-control-sm">');
         for (const v of cate.value) {
             html.push('<option value="' + v.id + '">', v.value, '</option>');
         }
+        html.push('<option value="0">不选</option>');
         html.push('</select>');
         html.push('</div>');
         return html.join('');

+ 3 - 2
app/public/js/tender_list_manage.js

@@ -143,10 +143,10 @@ function getCategoryHtml() {
         html.push('<div class="form-group" cate-id="' + cate.id + '">');
         html.push('<label>', cate.name, '</label>');
         html.push('<select class="form-control form-control-sm">');
-        html.push('<option value="0">不选</option>');
         for (const v of cate.value) {
             html.push('<option value="' + v.id + '">', v.value, '</option>');
         }
+        html.push('<option value="0">不选</option>');
         html.push('</select>');
         html.push('</div>');
         return html.join('');
@@ -334,8 +334,9 @@ function bindTenderUrl() {
         const tender = _.find(tenders, {id: tid});
         $('[name=name]', '#edit-bd').val(tender.name);
         $('input[type=radio]', '#add-bd').prop('checked', false);
+        $('option[value=0]', '#edit-bd').prop('selected', true);
         for (const c of tender.category) {
-            $('input[value=' + c.value + ']', '#edit-bd').prop('checked', 'checked');
+            // $('input[value=' + c.value + ']', '#edit-bd').prop('checked', 'checked');
             $('option[value=' + c.value + ']', '#edit-bd').prop('selected', true);
         }
         $('#edit-bd-ok').attr('tid', tid);

+ 2 - 1
app/public/js/tender_list_progress.js

@@ -142,10 +142,11 @@ function getCategoryHtml() {
         const html = [];
         html.push('<div class="form-group" cate-id="' + cate.id + '">');
         html.push('<lable>', cate.name, '</lable>');
-        html.push('<select class="form-control">');
+        html.push('<select class="form-control form-control-sm">');
         for (const v of cate.value) {
             html.push('<option value="' + v.id + '">', v.value, '</option>');
         }
+        html.push('<option value="0">不选</option>');
         html.push('</select>');
         html.push('</div>');
         return html.join('');

+ 2 - 2
app/service/ledger_revise.js

@@ -141,11 +141,11 @@ module.exports = app => {
 
             const billsHis = '/revise/bills' + timestamp + '.json';
             const bills = await this.ctx.service.reviseBills.getData(revise.tid);
-            await this.ctx.helper.saveBufferFile(JSON.stringify(bills), this.ctx.app.filePath + billsHis);
+            await this.ctx.helper.saveBufferFile(JSON.stringify(bills), this.ctx.app.config.filePath + billsHis);
 
             const posHis = '/revise/pos' + timestamp + '.json';
             const pos = await this.ctx.service.revisePos.getData(revise.tid);
-            await this.ctx.helper.saveBufferFile(JSON.stringify(pos), this.ctx.app.filePath + posHis);
+            await this.ctx.helper.saveBufferFile(JSON.stringify(pos), this.ctx.app.config.filePath + posHis);
 
             return [billsHis, posHis];
         }

+ 5 - 0
app/service/stage_audit.js

@@ -432,6 +432,11 @@ module.exports = app => {
                 // 复制一份最新数据给下一人
                 await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, audit.order + 1, transaction);
 
+                // 同步 期信息
+                await transaction.update(this.ctx.service.stage.tableName, {
+                    id: stageId, status: checkData.checkType,
+                });
+
                 // 添加短信通知-需要审批提醒功能
                 const smsUser = await this.ctx.service.projectAccount.getDataById(preAuditor.aid);
                 if (smsUser.auth_mobile !== '' && smsUser.auth_mobile !== undefined && smsUser.sms_type !== '' && smsUser.sms_type !== null) {

+ 12 - 1
app/service/tender.js

@@ -200,7 +200,18 @@ module.exports = app => {
                     throw '新增合同支付数据失败';
                 }
                 await this.transaction.commit();
-                return await this.getTender(operate.insertId);
+                const sql = 'SELECT t.`id`, t.`project_id`, t.`name`, t.`status`, t.`category`, t.`ledger_times`, t.`ledger_status`, t.`measure_type`, t.`user_id`, t.`create_time`, t.`total_price`, t.`deal_tp`,' +
+                    '    pa.`name` As `user_name`, pa.`role` As `user_role`, pa.`company` As `user_company` ' +
+                    '  FROM ?? As t ' +
+                    '  Left Join ?? As pa ' +
+                    '  ON t.`user_id` = pa.`id` ' +
+                    '  WHERE t.`id` = ?';
+                const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, operate.insertId];
+                const tender = await this.db.queryOne(sql, sqlParam);
+                if (tender) {
+                    tender.category = tender.category && tender.category !== '' ? JSON.parse(tender.category) : null;
+                }
+                return tender;
             } catch (error) {
                 await this.transaction.rollback();
                 throw error;

+ 0 - 100
app/view/change/info_modal.ejs

@@ -469,56 +469,6 @@
                             </div>
                         </div>
                         <div class="col-8 modal-height-500" style="overflow: auto">
-                            <% for (const time in auditList3) { %>
-                                <% if (auditList3[time].length > 0) { %>
-                                    <div class="card mt-3">
-                                        <ul class="list-group list-group-flush">
-                                            <% for (const [aindex,al] of auditList3[time].entries()) { %>
-                                                <li class="list-group-item">
-                                                    <h5 class="card-title">
-                                                        <% if (al.usite === 0 && al.status === 2 ) { %>
-                                                            <i class="fa fa-play-circle fa-rotate-90"></i>
-                                                        <% } else if (al.usite === 0 && al.status === 3 ) { %>
-                                                            <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
-                                                        <% } else if (al.status === 1 || al.status === 2) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> "></i>
-                                                        <% } else if (al.status === 3) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-success"></i>
-                                                        <% } else if (al.status === 4) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-danger"></i>
-                                                        <% } else if (al.status === 5 || al.status === 6) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-warning"></i>
-                                                        <% } else if (al.status === 7) { %>
-                                                            <i class="fa fa-chevron-circle-down text-warning"></i>
-                                                        <% } %>
-                                                        <%= al.name %>&nbsp;<small class="text-muted"><%= al.jobs %></small><span class="pull-right"><%= al.usite === 0 ? '原报' : (al.max_sort === al.usite ? '终审' : ctx.helper.transFormToChinese(al.usite) + '审') %></span>
-                                                    </h5>
-                                                    <div class="ml-3">
-                                                        <% if (al.usite === 0 && al.status === 2) { %>
-                                                            <span>重新上报中</span>
-                                                        <% } else if (al.usite === 0 && al.status === 3) { %>
-                                                            <span class="text-success"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>上报</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 2) { %>
-                                                            <span>审批中</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 3) { %>
-                                                            <span class="text-success"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批通过</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 4) { %>
-                                                            <span class="text-danger"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批终止</span>
-                                                        <% } else if (al.usite !== 0 && (al.status === 5 || al.status === 6)) { %>
-                                                            <span class="text-warning"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批退回 <% if (al.status === 5) {%><%= auditList3[time][0].name %><% } %></span>
-                                                        <% } else if (al.usite !== 0 && al.status === 7) { %>
-                                                            <span class="text-warning"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>重新审批</span>
-                                                        <% } %>
-                                                        <% if (al.sdesc !== '' && al.sdesc !== null) { %>
-                                                            <p class="card-text"><%- al.sdesc %></p>
-                                                        <% } %>
-                                                    </div>
-                                                </li>
-                                            <% } %>
-                                        </ul>
-                                    </div>
-                                <% } %>
-                            <% } %>
                             <div class="card mt-3">
                                 <ul class="list-group list-group-flush">
                                     <% for (const [index,a] of auditList.entries()) { %>
@@ -616,56 +566,6 @@
                             </div>
                         </div>
                         <div class="col-8 modal-height-500" style="overflow: auto">
-                            <% for (const time in auditList3) { %>
-                                <% if (auditList3[time].length > 0) { %>
-                                    <div class="card mt-3">
-                                        <ul class="list-group list-group-flush">
-                                            <% for (const [aindex,al] of auditList3[time].entries()) { %>
-                                                <li class="list-group-item">
-                                                    <h5 class="card-title">
-                                                        <% if (al.usite === 0 && al.status === 2 ) { %>
-                                                            <i class="fa fa-play-circle fa-rotate-90"></i>
-                                                        <% } else if (al.usite === 0 && al.status === 3 ) { %>
-                                                            <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
-                                                        <% } else if (al.status === 1 || al.status === 2) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> "></i>
-                                                        <% } else if (al.status === 3) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-success"></i>
-                                                        <% } else if (al.status === 4) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-danger"></i>
-                                                        <% } else if (al.status === 5 || al.status === 6) { %>
-                                                            <i class="fa <% if (aindex+1 === auditList3[time].length) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> text-warning"></i>
-                                                        <% } else if (al.status === 7) { %>
-                                                            <i class="fa fa-chevron-circle-down text-warning"></i>
-                                                        <% } %>
-                                                        <%= al.name %>&nbsp;<small class="text-muted"><%= al.jobs %></small><span class="pull-right"><%= al.usite === 0 ? '原报' : (al.max_sort === al.usite ? '终审' : ctx.helper.transFormToChinese(al.usite) + '审') %></span>
-                                                    </h5>
-                                                    <div class="ml-3">
-                                                        <% if (al.usite === 0 && al.status === 2) { %>
-                                                            <span>重新上报中</span>
-                                                        <% } else if (al.usite === 0 && al.status === 3) { %>
-                                                            <span class="text-success"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>上报</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 2) { %>
-                                                            <span>审批中</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 3) { %>
-                                                            <span class="text-success"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批通过</span>
-                                                        <% } else if (al.usite !== 0 && al.status === 4) { %>
-                                                            <span class="text-danger"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批终止</span>
-                                                        <% } else if (al.usite !== 0 && (al.status === 5 || al.status === 6)) { %>
-                                                            <span class="text-warning"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>审批退回 <% if (al.status === 5) {%><%= auditList3[time][0].name %><% } %></span>
-                                                        <% } else if (al.usite !== 0 && al.status === 7) { %>
-                                                            <span class="text-warning"><% if (al.sin_time !== null) { %><small><%= moment(al.sin_time).format('YYYY-MM-DD') %></small> <% } %>重新审批</span>
-                                                        <% } %>
-                                                        <% if (al.sdesc !== '' && al.sdesc !== null) { %>
-                                                            <p class="card-text"><%- al.sdesc %></p>
-                                                        <% } %>
-                                                    </div>
-                                                </li>
-                                            <% } %>
-                                        </ul>
-                                    </div>
-                                <% } %>
-                            <% } %>
                             <div class="card mt-3">
                                 <ul class="list-group list-group-flush">
                                     <% for (const [index,a] of auditList.entries()) { %>

+ 2 - 108
app/view/ledger/audit_modal.ejs

@@ -2,7 +2,7 @@
 <!--审批通过-->
 <div class="modal fade" id="sp-done" data-backdrop="static">
     <div class="modal-dialog modal-lg" role="document">
-        <form class="modal-content" action="/tender/<%- tender.id %>/ledger/audit/check" method="post" onsubmit="return auditCheck();">
+        <form class="modal-content" action="/tender/<%- tender.id %>/ledger/audit/check" method="post" onsubmit="return auditCheck(0);">
             <div class="modal-header">
                 <h5 class="modal-title">审批通过</h5>
             </div>
@@ -27,59 +27,6 @@
                         </div>
                     </div>
                     <div class="col-8 modal-height-500" style="overflow: auto">
-                        <% for (const ah of auditHistory) { %>
-                            <div class="card mt-3">
-                                <ul class="list-group list-group-flush">
-                                    <% for (let iA = 0; iA < ah.length; iA++) { %>
-                                        <% if (iA === 0) { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <span class="text-success"><small><%- ah[iA].begin_time.toLocaleDateString() %></small> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
-                                                </div>
-                                            </li>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } else if (iA === ah.length - 1) { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } else { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-chevron-circle-down <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } %>
-                                    <% } %>
-                                </ul>
-                            </div>
-                        <% } %>
                         <% if (tender.ledger_status === auditConst.status.checking || tender.ledger_status === auditConst.status.checked) {%>
                             <div class="card mt-3">
                                 <ul class="list-group list-group-flush">
@@ -142,7 +89,7 @@
 <!--审批退回-->
 <div class="modal fade" id="sp-back" data-backdrop="static">
     <div class="modal-dialog modal-lg" role="document">
-        <form class="modal-content" action="/tender/<%- tender.id %>/ledger/audit/check" method="post" onsubmit="return auditCheck();">
+        <form class="modal-content" action="/tender/<%- tender.id %>/ledger/audit/check" method="post" onsubmit="return auditCheck(1);">
             <div class="modal-header">
                 <h5 class="modal-title">审批退回</h5>
             </div>
@@ -167,59 +114,6 @@
                         </div>
                     </div>
                     <div class="col-8 modal-height-500" style="overflow: auto">
-                        <% for (const ah of auditHistory) { %>
-                            <div class="card mt-3">
-                                <ul class="list-group list-group-flush">
-                                    <% for (let iA = 0; iA < ah.length; iA++) { %>
-                                        <% if (iA === 0) { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <span class="text-success"><small><%- ah[iA].begin_time.toLocaleDateString() %></small> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
-                                                </div>
-                                            </li>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } else if (iA === ah.length - 1) { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } else { %>
-                                            <li class="list-group-item">
-                                                <h5 class="card-title">
-                                                    <i class="fa fa-chevron-circle-down <%- auditConst.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                                </h5>
-                                                <div class="ml-3">
-                                                    <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                                        <span class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ah[iA].end_time.toLocaleDateString() %></small> <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %> <%- user.name %><% } %></span>
-                                                    <% } %>
-                                                    <p class="card-text"><%- ah[iA].opinion %></p>
-                                                </div>
-                                            </li>
-                                        <% } %>
-                                    <% } %>
-                                </ul>
-                            </div>
-                        <% } %>
                         <% if (tender.ledger_status === auditConst.status.checking || tender.ledger_status === auditConst.status.checked) {%>
                             <div class="card mt-3">
                                 <ul class="list-group list-group-flush">

+ 45 - 16
app/view/ledger/gather.ejs

@@ -12,27 +12,56 @@
             </div>
         </div>
     </div>
-    <div class="content-wrap">
-        <div class="c-header p-0"></div>
-        <div class="c-body">
-            <div class="sjs-height-1" id="gcl-spread">
-            </div>
-            <div class="bcontent-wrap">
-                <div id="main-resize" class="resize-y" r-Type="height" div1="#gcl-spread" div2="#main-bottom" store-id="ledger-gather" store-version="1.0.0" min="100"></div>
-                <div class="bc-bar mb-1">
-                    <ul class="nav nav-tabs">
-                        <li class="nav-item">
-                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
-                        </li>
-                    </ul>
+    <div class="content-wrap row pr-46">
+        <div class="c-header p-0 col-12">
+        </div>
+        <div class="row w-100 sub-content">
+            <div class="c-body" id="left-view" style="width: 100%">
+                <div class="sjs-height-1" id="gcl-spread">
+                </div>
+                <div class="bcontent-wrap" id="main-bottom">
+                    <div id="main-resize" class="resize-y" r-Type="height" div1="#gcl-spread" div2="#main-bottom" store-id="ledger-gather" store-version="1.0.0" min="100"></div>
+                    <div class="bc-bar mb-1">
+                        <ul class="nav nav-tabs">
+                            <li class="nav-item">
+                                <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
+                            </li>
+                        </ul>
+                    </div>
+                    <div class="tab-content">
+                        <div class="tab-pane active" id="xmujie">
+                            <div class="sp-wrap" id="leaf-xmj-spread">
+                            </div>
+                        </div>
+                    </div>
                 </div>
+            </div>
+            <div class="c-body" id="right-view" style="display: none; width: 33%;">
+                <div class="resize-x" id="right-spr" r-Type="width" div1="#left-view" div2="#right-view" title="调整大小" a-type="percent"><!--调整左右高度条--></div>
                 <div class="tab-content">
-                    <div class="tab-pane active" id="xmujie">
-                        <div class="sp-wrap" id="leaf-xmj-spread">
+                    <div id="chapter" class="tab-pane active">
+                        <div class="side-bar-1"></div>
+                        <div class="sjs-sh-1">
+                            <table class="table table-bordered">
+                                <tr><th>章节</th><th>章节名称</th><th>签约金额</th><th>台帐金额</th><th>签约-台帐</th></tr>
+                                <tbody id="chapter-list"></tbody>
+                            </table>
                         </div>
                     </div>
                 </div>
             </div>
         </div>
+        <!--右侧菜单-->
+        <div class="side-menu">
+            <!--右侧菜单-->
+            <ul class="nav flex-column right-nav" id="side-menu">
+                <li class="nav-item">
+                    <a class="nav-link" content="#chapter" href="javascript: void(0);">章节合计</a>
+                </li>
+            </ul>
+        </div>
     </div>
-</div>
+</div>
+<script>
+    chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
+</script>

+ 2 - 2
app/view/material/audit_modal.ejs

@@ -55,7 +55,7 @@
         <!--审批通过-->
         <div class="modal fade" id="sp-done" data-backdrop="static">
     <div class="modal-dialog modal-lg" role="document">
-        <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+        <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(0);">
             <div class="modal-header">
                 <h5 class="modal-title">审批通过</h5>
             </div>
@@ -143,7 +143,7 @@
         <!--审批退回-->
         <div class="modal fade" id="sp-back" data-backdrop="static">
     <div class="modal-dialog modal-lg" role="document">
-        <form class="modal-content modal-lg" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+        <form class="modal-content modal-lg" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(1);">
             <div class="modal-header">
                 <h5 class="modal-title">审批退回</h5>
             </div>

+ 4 - 4
app/view/revise/index.ejs

@@ -1,9 +1,9 @@
 <% include ../tender/tender_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
-        <div class="title-main d-flex"><!--工具-->
+        <div class="title-main d-flex justify-content-between"><!--工具-->
             <% include ../tender/tender_sub_mini_menu.ejs %>
-            <div class="fluid">
+            <div>
                 <div class="d-inline-block">
                     <div class="input-group input-group-sm">
                         <input class="datepicker-here form-control form-control-sm mt-0" placeholder="按时间筛选" data-range="true" data-multiple-dates-separator=" - " data-language="zh" type="text" style="width:190px">
@@ -13,7 +13,7 @@
                     </div>
                 </div>
             </div>
-            <div class="ml-1">
+            <div>
                 <% if (addValid) { %>
                 <div class="d-inline-block">
                     <a href="#add-bg" data-toggle="modal" data-target="#add-bg" class="btn btn-primary btn-sm pull-right">新建修订</a>
@@ -93,4 +93,4 @@
             autoFlashHeight();
         }
     });
-</script>
+</script>

+ 251 - 144
app/view/revise/info_modal.ejs

@@ -84,7 +84,7 @@
 <% if (revise.status === audit.status.checkNo && ctx.session.sessionUser.accountId === revise.uid) { %>
 <!--重新上报-->
 <div class="modal fade" id="sub-sp2" data-backdrop="static">
-    <div class="modal-dialog" role="document">
+    <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title">重新上报</h5>
@@ -95,17 +95,17 @@
                         <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" id="hideSp">修改审批流程</a>
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
-                                <li class="list-group-item">
-                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small>
+                                <li class="list-group-item" style="border-bottom: 0">
+                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
                                 </li>
                             </ul>
                             <ul class="list-group list-group-flush" id="auditors-list">
                                 <% for (let i = 0; i < auditorList.length; i++) { %>
                                 <li class="list-group-item" data-auditid="<%- auditorList[i].audit_id %>">
                                     <% if (i < auditorList.length - 1) { %>
-                                    <i class="fa fa-chevron-circle-down"></i> <%- auditorList[i].name %>  <small class="text-muted"><%- auditorList[i].role %></small>
+                                    <i class="fa fa-chevron-circle-down"></i> <%- auditorList[i].name %>  <small class="text-muted"><%- auditorList[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
                                     <% } else {%>
-                                    <i class="fa fa fa-stop-circle"></i> <%- auditorList[i].name %>  <small class="text-muted"><%- auditorList[i].role %></small>
+                                    <i class="fa fa fa-stop-circle"></i> <%- auditorList[i].name %>  <small class="text-muted"><%- auditorList[i].role %></small><span class="pull-right">终审</span>
                                     <% } %>
                                 </li>
                                 <% } %>
@@ -114,70 +114,66 @@
                     </div>
                     <div class="col-8 modal-height-500" style="overflow: auto">
                         <% for (const ah of auditHistory) { %>
-                        <div class="card mt-3">
-                            <ul class="list-group list-group-flush">
-                                <% for (let iA = 0; iA < ah.length; iA++) { %>
-                                <% if (iA === 0) { %>
-                                <li class="list-group-item">
-                                    <span class="text-success pull-right"><% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
-                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small></h5>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].begin_time.toLocaleDateString() %></small></p>
-                                </li>
-                                <li class="list-group-item">
-                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[ah[iA].status] %> pull-right"><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small></h5>
-                                    <% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- ah[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
-                                </li>
-                                <% } else if (iA === ah.length - 1) { %>
-                                <li class="list-group-item">
-                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[ah[iA].status] %> pull-right"><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                            <div class="card mt-3">
+                                <ul class="list-group list-group-flush">
+                                    <li class="list-group-item">
+                                        <h5 class="card-title">
+                                            <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                        </h5>
+                                        <div class="ml-3">
+                                            <span class="text-success"><%- ah[0].begin_time.toLocaleDateString() %> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
+                                        </div>
+                                    </li>
+                                    <% for (let iA = 0; iA < ah.length; iA++) { %>
+                                        <% if (iA === ah.length - 1) { %>
+                                            <li class="list-group-item">
+                                                <h5 class="card-title">
+                                                    <i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
+                                                </h5>
+                                                <div class="ml-3">
+                                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
+                                                        <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                                    <% } %>
+                                                    <p class="card-text"><%- ah[iA].opinion %></p>
+                                                </div>
+                                            </li>
+                                        <% } else { %>
+                                            <li class="list-group-item">
+                                                <h5 class="card-title">
+                                                    <i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
+                                                </h5>
+                                                <div class="ml-3">
+                                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
+                                                        <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                                    <% } %>
+                                                    <p class="card-text"><%- ah[iA].opinion %></p>
+                                                </div>
+                                            </li>
+                                        <% } %>
                                     <% } %>
-                                    <h5 class="card-title"><i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small></h5>
-                                    <% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- ah[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
-                                </li>
-                                <% } else { %>
-                                <li class="list-group-item">
-                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[ah[iA].status] %> pull-right"><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small></h5>
-                                    <% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- ah[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
-                                </li>
-                                <% } %>
-                                <% } %>
-                            </ul>
-                        </div>
+                                </ul>
+                            </div>
                         <% } %>
                         <% if (revise.status === audit.status.checkNo) {%>
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
-                                <li class="list-group-item">
-                                    <span class="pull-right">重新上报中</span>
-                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small></h5>
-                                    <p class="card-text"><small class="text-muted"></small></p>
+                                <li class="list-group-item" style="border-bottom: 0">
+                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span></h5>
+                                    <div class="ml-3">
+                                        <span>重新上报中</span>
+                                        <p class="card-text"></p>
+                                    </div>
                                 </li>
                             </ul>
                             <ul class="list-group list-group-flush" id="auditors-list2">
                                 <% for (let iA = 0; iA < auditorList.length; iA++) { %>
                                 <% if (iA === auditorList.length - 1) { %>
                                 <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
-                                    <h5 class="card-title"><i class="fa fa-stop-circle"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small></h5>
+                                    <h5 class="card-title"><i class="fa fa-stop-circle"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small><span class="pull-right">终审</span></h5>
                                 </li>
                                 <% } else { %>
                                 <li class="list-group-item" data-auditid="<%- auditorList[iA].audit_id %>">
-                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small></h5>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down"></i> <%- auditorList[iA].name %> <small class="text-muted"><%- auditorList[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span></h5>
                                 </li>
                                 <% } %>
                                 <% } %>
@@ -188,9 +184,9 @@
                 </div>
             </div>
             <form class="modal-footer" action="/tender/<%- ctx.tender.id %>/revise/audit/start" method="post" onsubmit="return checkAuditorFrom()">
-                <button type="submit" class="btn btn-primary btn-sm">确认上报</button>
-                <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
+                <button type="submit" class="btn btn-primary btn-sm">确认上报</button>
             </form>
         </div>
     </div>
@@ -199,31 +195,73 @@
 <% if (revise.status === audit.status.checking && curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
 <!--审批通过-->
 <div class="modal fade" id="sp-done" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post">
+    <div class="modal-dialog modal-lg" role="document">
+        <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post" onsubmit="return auditCheck(0);">
             <div class="modal-header">
                 <h5 class="modal-title">审批通过</h5>
             </div>
             <div class="modal-body">
-                <div class="card mt-3">
-                    <ul class="list-group list-group-flush">
-                        <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
-                        <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
-                            <% if (auditors[i].status !== audit.status.uncheck) { %>
-                            <span class="<%- audit.statusClass[auditors[i].status] %> pull-right"><%- audit.statusString[auditors[i].status] %></span>
-                            <% } %>
-                            <h5 class="card-title"><%- auditors[i].audit_order %> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small></h5>
-                            <% if (auditors[i].status === audit.status.checked) { %>
-                            <p class="card-text"><%- auditors[i].opinion %> <%- auditors[i].end_time ? auditors[i].end_time.toLocaleString() : '' %></p>
-                            <% } else if (auditors[i].status === audit.status.checking) { %>
-                            <div class="form-group">
-                                <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
-                            </div>
-                            <% } %>
-                        </li>
-                        <% } %>
-                    </ul>
+                <div class="row">
+                    <div class="col-4">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                </li>
+                                <% for (let i = 0; i < auditors.length; i++) { %>
+                                    <li class="list-group-item">
+                                        <% if (i < auditors.length - 1) { %>
+                                            <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
+                                        <% } else {%>
+                                            <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
+                                        <% } %>
+                                    </li>
+                                <% } %>
+                            </ul>
+                        </div>
+                    </div>
+                    <div class="col-8 modal-height-500" style="overflow: auto">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <h5 class="card-title">
+                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
+                                    </div>
+                                </li>
+                                <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
+                                    <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
+                                        <% if (auditors[i].status === audit.status.checked) { %>
+                                        <h5 class="card-title">
+                                            <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                        </h5>
+                                        <div class="ml-3">
+                                            <span class="<%- audit.statusClass[auditors[i].status] %>"><%- auditors[i].end_time ? auditors[i].end_time.toLocaleDateString() : '' %> <%- audit.statusString[auditors[i].status] %></span>
+                                            <p class="card-text"><%- auditors[i].opinion %></p>
+                                        </div>
+                                        <% } else if (auditors[i].status === audit.status.checking) { %>
+                                        <h5 class="card-title">
+                                            <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                        </h5>
+                                        <div class="form-group">
+                                            <label>审批意见<b class="text-danger">*</b></label>
+                                            <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
+                                        </div>
+                                        <% } else { %>
+                                        <h5 class="card-title">
+                                            <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                        </h5>
+                                        <div class="ml-3">
+                                            <p class="card-text"></p>
+                                        </div>
+                                        <% } %>
+                                    </li>
+                                <% } %>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
             </div>
             <div class="modal-footer">
@@ -237,32 +275,74 @@
 </div>
 <!--审批退回-->
 <div class="modal fade" id="sp-back" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post">
+    <div class="modal-dialog modal-lg" role="document">
+        <form class="modal-content" action="/tender/<%- ctx.tender.id %>/revise/audit/check" method="post" onsubmit="return auditCheck(1);">
             <div class="modal-header">
                 <h5 class="modal-title">审批退回</h5>
             </div>
             <div class="modal-body">
-                <div class="card mt-3">
-                    <ul class="list-group list-group-flush">
-                        <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
-                        <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
-                            <% if (auditors[i].status !== audit.status.uncheck) { %>
-                            <span class="<%- audit.statusClass[auditors[i].status] %> pull-right"><%- audit.statusString[auditors[i].status] %></span>
-                            <% } %>
-                            <h5 class="card-title"><%- auditors[i].audit_order %> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small></h5>
-                            <% if (auditors[i].status === audit.status.checked) { %>
-                            <p class="card-text"><%- auditors[i].opinion %> <%- auditors[i].end_time ? auditors[i].end_time.toLocaleString() : '' %></p>
-                            <% } else if (auditors[i].status === audit.status.checking) { %>
-                            <div class="form-group">
-                                <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
-                            </div>
-                            <div class="alert alert-warning">审批退回,将直接退回给上报人。</div>
-                            <% } %>
-                        </li>
-                        <% } %>
-                    </ul>
+                <div class="row">
+                    <div class="col-4">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                </li>
+                                <% for (let i = 0; i < auditors.length; i++) { %>
+                                    <li class="list-group-item">
+                                        <% if (i < auditors.length - 1) { %>
+                                            <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
+                                        <% } else {%>
+                                            <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
+                                        <% } %>
+                                    </li>
+                                <% } %>
+                            </ul>
+                        </div>
+                    </div>
+                    <div class="col-8 modal-height-500" style="overflow: auto">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <h5 class="card-title">
+                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
+                                    </div>
+                                </li>
+                                <% for (let i = 0, iLen = auditors.length; i < iLen; i++) { %>
+                                    <li class="list-group-item" auditorId="<%- auditors[i].audit_id %>">
+                                        <% if (auditors[i].status === audit.status.checked) { %>
+                                            <h5 class="card-title">
+                                                <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                            </h5>
+                                            <div class="ml-3">
+                                                <span class="<%- audit.statusClass[auditors[i].status] %>"><%- auditors[i].end_time ? auditors[i].end_time.toLocaleDateString() : '' %> <%- audit.statusString[auditors[i].status] %></span>
+                                                <p class="card-text"><%- auditors[i].opinion %></p>
+                                            </div>
+                                        <% } else if (auditors[i].status === audit.status.checking) { %>
+                                            <h5 class="card-title">
+                                                <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                            </h5>
+                                            <div class="form-group">
+                                                <label>审批意见<b class="text-danger">*</b></label>
+                                                <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
+                                            </div>
+                                            <div class="alert alert-warning">审批退回,将直接退回给上报人。</div>
+                                        <% } else { %>
+                                            <h5 class="card-title">
+                                                <i class="<%- (i < iLen - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[i].name %> <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= i < iLen - 1 ? ctx.helper.transFormToChinese(i+1) : '终' %>审</span>
+                                            </h5>
+                                            <div class="ml-3">
+                                                <p class="card-text"></p>
+                                            </div>
+                                        <% } %>
+                                    </li>
+                                <% } %>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
             </div>
             <div class="modal-footer">
@@ -278,7 +358,7 @@
 <% if (revise.status !== audit.status.uncheck || revise.times > 1) { %>
 <!--审批流程/结果-->
 <div class="modal fade" id="sp-list" data-backdrop="static">
-    <div class="modal-dialog" role="document">
+    <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title">审批流程</h5>
@@ -289,14 +369,14 @@
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
                                 <li class="list-group-item">
-                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small>
+                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- user.name %>  <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
                                 </li>
                                 <% for (let i = 0; i < auditors.length; i++) { %>
                                 <li class="list-group-item">
                                     <% if (i < auditors.length - 1) { %>
-                                    <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small>
+                                    <i class="fa fa-chevron-circle-down"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
                                     <% } else {%>
-                                    <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small>
+                                    <i class="fa fa fa-stop-circle"></i> <%- auditors[i].name %>  <small class="text-muted"><%- auditors[i].role %></small><span class="pull-right">终审</span>
                                     <% } %>
                                 </li>
                                 <% } %>
@@ -308,32 +388,37 @@
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
                                 <li class="list-group-item">
-                                    <span class="text-success pull-right"><% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
-                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small></h5>
-                                    <p class="card-text"><small class="text-muted"><%- ah[0].begin_time.toLocaleDateString() %></small></p>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <span class="text-success"><%- ah[0].begin_time.toLocaleDateString() %> <% if (auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
+                                    </div>
                                 </li>
                                 <% for (let iA = 0; iA < ah.length; iA++) { %>
                                 <% if (iA === ah.length - 1) { %>
                                 <li class="list-group-item">
-                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[ah[iA].status] %> pull-right"><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small></h5>
-                                    <% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- ah[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-stop-circle <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right">终审</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <% if (ah[iA].status !== audit.status.uncheck) { %>
+                                        <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                        <% } %>
+                                        <p class="card-text"><%- ah[iA].opinion %></p>
+                                    </div>
                                 </li>
                                 <% } else { %>
                                 <li class="list-group-item">
-                                    <% if (ah[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[ah[iA].status] %> pull-right"><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small></h5>
-                                    <% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- ah[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- ah[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-chevron-circle-down <%- audit.statusClass[ah[iA].status] %>"></i> <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <% if (ah[iA].status !== audit.status.uncheck) { %>
+                                        <span class="<%- audit.statusClass[ah[iA].status] %>"><% if (ah[iA].status === audit.status.checked || ah[iA].status === audit.status.checkNo) { %><%- ah[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[ah[iA].status]%><% if (ah[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                        <% } %>
+                                        <p class="card-text"><%- ah[iA].opinion %></p>
+                                    </div>
                                 </li>
                                 <% } %>
                                 <% } %>
@@ -344,32 +429,37 @@
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
                                 <li class="list-group-item">
-                                    <span class="text-success pull-right"><% if (revise.times > 1) { %>重新<% } %>上报</span>
-                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small></h5>
-                                    <p class="card-text"><small class="text-muted"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%></small></p>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i> <%- user.name %> <small class="text-muted"><%- user.role %></small><span class="pull-right">原报</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <span class="text-success"><%- auditors[0].begin_time ? auditors[0].begin_time.toLocaleDateString() : ''%> <% if (revise.times > 1) { %>重新<% } %>上报</span>
+                                    </div>
                                 </li>
                                 <% for (let iA = 0; iA < auditors.length; iA++) { %>
                                 <% if (iA === auditors.length - 1) { %>
                                 <li class="list-group-item">
-                                    <% if (auditors[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[auditors[iA].status] %> pull-right"><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-stop-circle <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small></h5>
-                                    <% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- auditors[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- auditors[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-stop-circle <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right">终审</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <% if (auditors[iA].status !== audit.status.uncheck) { %>
+                                            <span class="<%- audit.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %><%- auditors[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                        <% } %>
+                                        <p class="card-text"><%- auditors[iA].opinion %></p>
+                                    </div>
                                 </li>
                                 <% } else { %>
                                 <li class="list-group-item">
-                                    <% if (auditors[iA].status !== audit.status.uncheck) { %>
-                                    <span class="<%- audit.statusClass[auditors[iA].status] %> pull-right"><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
-                                    <% } %>
-                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small></h5>
-                                    <% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %>
-                                    <p class="card-text mb-1"><%- auditors[iA].opinion %></p>
-                                    <p class="card-text"><small class="text-muted"><%- auditors[iA].end_time.toLocaleDateString() %></small></p>
-                                    <% } %>
+                                    <h5 class="card-title">
+                                        <i class="fa fa-chevron-circle-down <%- audit.statusClass[auditors[iA].status] %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right"><%= ctx.helper.transFormToChinese(iA+1) %>审</span>
+                                    </h5>
+                                    <div class="ml-3">
+                                        <% if (auditors[iA].status !== audit.status.uncheck) { %>
+                                            <span class="<%- audit.statusClass[auditors[iA].status] %>"><% if (auditors[iA].status === audit.status.checked || auditors[iA].status === audit.status.checkNo) { %><%- auditors[iA].end_time.toLocaleDateString() %> <% } %><%- audit.statusString[auditors[iA].status]%><% if (auditors[iA].status === audit.status.checkNo) { %> <%- user.name %><% } %></span>
+                                        <% } %>
+                                        <p class="card-text"><%- auditors[iA].opinion %></p>
+                                    </div>
                                 </li>
                                 <% } %>
                                 <% } %>
@@ -425,10 +515,15 @@
                 const auditorshtml = [];
                 // 重新上报时。令其它的审批人流程图标转换
                 $('#auditors-list li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
+                for (let i = 0; i < $('#auditors-list li').length; i++) {
+                    $('#auditors-list li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
+                    $('#auditors-list2 li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
+                }
                 // 添加新审批人
                 auditorshtml.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
                 auditorshtml.push('<i class="fa fa-stop-circle"></i> ');
                 auditorshtml.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
+                auditorshtml.push('<span class="pull-right">终审</span>');
                 auditorshtml.push('</li>');
                 $('#auditors-list').append(auditorshtml.join(''));
 
@@ -438,8 +533,9 @@
                 // 添加新审批人
                 auditorshtml2.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
                 auditorshtml2.push('<h5 class="card-title"><i class="fa fa-stop-circle"></i> ');
-                auditorshtml2.push(data.name + ' <small class="text-muted">' + data.role + '</small></h5>');
-                auditorshtml2.push('</li>');
+                auditorshtml2.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
+                auditorshtml2.push('<span class="pull-right">终审</span>');
+                auditorshtml2.push('</h5></li>');
                 $('#auditors-list2').append(auditorshtml2.join(''));
             });
         }
@@ -468,6 +564,10 @@
                 $('#auditors-list2 li').eq($('#auditors-list2 li').length-1).children('i')
                     .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
             }
+            for (let i = 0; i < $('#auditors-list li').length; i++) {
+                $('#auditors-list li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list li').length ? '终' : transFormToChinese(i+1)) + '审');
+                $('#auditors-list2 li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list2 li').length ? '终' : transFormToChinese(i+1)) + '审');
+            }
         });
     });
     $('#hideSp').click(function () {
@@ -492,4 +592,11 @@
         }
         $('#hide-all').show();
     }
+
+    // texterea换行
+    function auditCheck(i) {
+        const opinion = $('textarea[name="opinion"]').eq(i).val().replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ');
+        $('textarea[name="opinion"]').eq(i).val(opinion);
+        return true;
+    }
 </script>

+ 4 - 6
app/view/stage/audit_modal.ejs

@@ -78,7 +78,7 @@
         <!--审批通过-->
         <div class="modal fade" id="sp-done" data-backdrop="static">
             <div class="modal-dialog modal-lg" role="document">
-                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(0);">
                     <div class="modal-header">
                         <h5 class="modal-title">审批通过</h5>
                     </div>
@@ -179,7 +179,7 @@
         <!--审批退回-->
         <div class="modal fade" id="sp-back" data-backdrop="static">
             <div class="modal-dialog modal-lg" role="document">
-                <form class="modal-content modal-lg" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+                <form class="modal-content modal-lg" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(1);">
                     <div class="modal-header">
                         <h5 class="modal-title">审批退回</h5>
                     </div>
@@ -987,7 +987,7 @@
         <!--审批通过-->
         <div class="modal fade" id="sp-done" data-backdrop="static">
             <div class="modal-dialog modal-lg" role="document">
-                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(2);">
                     <div class="modal-header">
                         <h5 class="modal-title">审批通过</h5>
                     </div>
@@ -1088,7 +1088,7 @@
         <!--审批退回-->
         <div class="modal fade" id="sp-back" data-backdrop="static">
             <div class="modal-dialog modal-lg" role="document">
-                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck();">
+                <form class="modal-content" action="<%- preUrl %>/audit/check" method="post" onsubmit="return auditCheck(3);">
                     <div class="modal-header">
                         <h5 class="modal-title">审批退回</h5>
                     </div>
@@ -1133,7 +1133,6 @@
                                                         <p class="card-text"><%- auditors[iA].opinion %></p>
                                                     </div>
                                                 <% } else if (auditors[iA].stauts == auditConst.status.checking) { %>
-                                                    <span class="pull-right">审批中</span>
                                                     <h5 class="card-title">
                                                         <i class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
                                                     </h5>
@@ -1142,7 +1141,6 @@
                                                         <p class="card-text"><%- auditors[iA].opinion %></p>
                                                     </div>
                                                 <% } else if (auditors[iA].status === auditConst.status.checkNoPre) { %>
-
                                                     <h5 class="card-title">
                                                         <i class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down text-warning' : 'fa fa-stop-circle text-warning') %>"></i> <%- auditors[iA].name %> <small class="text-muted"><%- auditors[iA].role %></small><span class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
                                                     </h5>

+ 1 - 1
app/view/stage/compare_modal.ejs

@@ -14,7 +14,7 @@
                             (a.status === auditConst.status.checking && a.aid === ctx.session.sessionUser.accountId)) { %>
                     <tr auditorId="<%- a.aid %>">
                         <td><%- a.name %></td>
-                        <td><input type="checkbox" audit-order="<%- i + 1 %>"></td>
+                        <td><% if (a.status !== auditConst.status.checkAgain) {%><input type="checkbox" audit-order="<%- i + 1 %>"><% } %></td>
                         <td class="text-center <%- auditConst.statusClass[a.status] %>" style="width: 80px"><%- auditConst.statusString[a.status] %></td>
                     </tr>
                     <% } %>

+ 31 - 25
app/view/stage/gather.ejs

@@ -4,33 +4,34 @@
         <div class="title-main d-flex">
             <% include ./stage_sub_mini_menu.ejs %>
             <div>
-                <div class="dropdown">
-                    <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        超计显示
-                    </button>
-                    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" style="width:290px">
-                        <span class="dropdown-item-text text-danger">累计完成合同计量 大于</span>
-                        <form class="px-4 py-3">
-                            <div class="form-group">
-                                <div class="custom-control custom-radio">
-                                    <input type="radio" id="customRadio1" name="customRadio" class="custom-control-input" checked="">
-                                    <label class="custom-control-label" for="customRadio1">台账数量</label>
+                <div class="d-inline-block">
+                    <div class="dropdown">
+                        <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                            超计显示
+                        </button>
+                        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" style="width:290px">
+                            <span class="dropdown-item-text text-danger">累计完成合同计量 大于</span>
+                            <form class="px-4 py-3">
+                                <div class="form-group">
+                                    <div class="custom-control custom-radio">
+                                        <input type="radio" id="customRadio1" name="customRadio" class="custom-control-input" checked="">
+                                        <label class="custom-control-label" for="customRadio1">台账数量</label>
+                                    </div>
                                 </div>
-                            </div>
-                            <div class="form-group">
-                                <div class="custom-control custom-radio">
-                                    <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
-                                    <label class="custom-control-label" for="customRadio2">签约清单数量</label>
+                                <div class="form-group">
+                                    <div class="custom-control custom-radio">
+                                        <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
+                                        <label class="custom-control-label" for="customRadio2">签约清单数量</label>
+                                    </div>
                                 </div>
-                            </div>
-                            <div class="form-group mb-0">
-                                <div class="custom-control custom-radio">
-                                    <input type="radio" id="customRadio3" name="customRadio" class="custom-control-input">
-                                    <label class="custom-control-label" for="customRadio3">台账数量 或 签约清单数量</label>
+                                <div class="form-group mb-0">
+                                    <div class="custom-control custom-radio">
+                                        <input type="radio" id="customRadio3" name="customRadio" class="custom-control-input">
+                                        <label class="custom-control-label" for="customRadio3">台账数量 或 签约清单数量</label>
+                                    </div>
                                 </div>
-                            </div>
-                        </form>
-                        <span class="dropdown-item-text text-danger">
+                            </form>
+                            <span class="dropdown-item-text text-danger">
                             <div class="input-group input-group-sm">
                                 <input type="number" step="5" class="form-control form-control-sm m-0" placeholder="100" max="100" min="50" id="over-percent" value="100">
                                 <div class="input-group-append">
@@ -38,8 +39,12 @@
                                 </div>
                             </div>
                         </span>
+                        </div>
                     </div>
                 </div>
+                <div class="d-inline-block">
+                    <button href="#zjhj" class="btn btn-sm btn-light text-primary" data-toggle="modal" data-target="#zjhj">章节合计</button>
+                </div>
             </div>
         </div>
     </div>
@@ -56,7 +61,7 @@
                             <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
                         </li>
                         <!--<li class="nav-item">-->
-                            <!--<a class="nav-link " data-toggle="tab" href="#biangeng" role="tab">相关变更令</a>-->
+                        <!--<a class="nav-link " data-toggle="tab" href="#biangeng" role="tab">相关变更令</a>-->
                         <!--</li>-->
                     </ul>
                 </div>
@@ -90,4 +95,5 @@
     const curPosData = JSON.parse('<%- JSON.stringify(curPosData) %>');
     const prePosData = JSON.parse('<%- JSON.stringify(prePosData) %>');
     const dealBills = JSON.parse('<%- JSON.stringify(dealBills) %>');
+    chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
 </script>

+ 20 - 1
app/view/stage/gather_modal.ejs

@@ -1 +1,20 @@
-<% include ./audit_modal.ejs %>
+<% include ./audit_modal.ejs %>
+<!--章节合计-->
+<div class="modal fade" id="zjhj" data-backdrop="static">
+    <div class="modal-dialog modal-xl" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">列显示</h5>
+            </div>
+            <div class="modal-body">
+                <table class="table table-bordered table-sm">
+                    <thead class="text-center"><tr><th>章节</th><th>章节名称</th><th>签约金额</th><th>台帐金额</th><th>本期合同计量金额</th><th>本期数量变更金额</th><th>本期完成计量金额</th><th>截止本期合同计量金额</th><th>截止本期数量变更金额</th><th>截止本期完成计量金额</th><th>完成率(%)</th></tr></thead>
+                    <tbody id="chapter-list"></tbody>
+                </table>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 80 - 506
app/view/tender/detail.ejs

@@ -22,521 +22,98 @@
     <div class="content-wrap">
         <div class="c-body">
             <div class="sjs-height-0">
-                <!--金额概况-->
-                <div class="row mx-1 mb-3">
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.total_price) %></h5>
-                                <p class="card-text text-muted">0号台帐合同</p>
+                <div class="m-3">
+                    <!--金额概况-->
+                    <div class="row mx-0 mb-3">
+                        <div class="col-auto p-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.total_price) %></h5>
+                                    <p class="card-text text-muted">0号台帐合同</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.gather_tp) %></h5>
-                                <p class="card-text text-muted">本期完成</p>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.gather_tp) %></h5>
+                                    <p class="card-text text-muted">本期完成</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_qc_tp) %><small class="text-danger"  data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占合同比例"><%- tender.qc_ratio %>%</small></h5>
-                                <p class="card-text text-muted">截止本期变更</p>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_qc_tp) %><small class="text-danger"  data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占合同比例"><%- tender.qc_ratio %>%</small></h5>
+                                    <p class="card-text text-muted">截止本期变更</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_gather_tp) %></h5>
-                                <p class="card-text text-muted">截止本期完成</p>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.end_gather_tp) %></h5>
+                                    <p class="card-text text-muted">截止本期完成</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.pre_gather_tp) %></h5>
-                                <p class="card-text text-muted">截止上期完成</p>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.pre_gather_tp) %></h5>
+                                    <p class="card-text text-muted">截止上期完成</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="col-auto pr-0">
-                        <div class="card text-center">
-                            <div class="card-body">
-                                <h5 class="card-title"><%- ctx.helper.formatMoney(tender.yf_tp) %></h5>
-                                <p class="card-text text-muted">本期应付</p>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title"><%- ctx.helper.formatMoney(tender.yf_tp) %></h5>
+                                    <p class="card-text text-muted">本期应付</p>
+                                </div>
                             </div>
                         </div>
                     </div>
-                </div>
-                <!--进度条-->
-                <div class="mb-3">
-                    <div class="progress">
-                        <% if (tender.pre_ratio > 0) { %>
-                        <div class="progress-bar bg-success" style="width: <%- tender.pre_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="截止上期累计完成:¥<%- ctx.helper.formatMoney(tender.pre_gather_tp) %>"><%- tender.pre_ratio %>%</div>
-                        <% } %>
-                        <% if (tender.cur_ratio > 0) { %>
-                        <div class="progress-bar bg-info" style="width: <%- tender.cur_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="本期完成:¥<%- ctx.helper.formatMoney(tender.gather_tp) %>"><%- tender.cur_ratio %>%</div>
-                        <% } %>
-                        <% if (tender.other_ratio > 0) { %>
-                        <div class="progress-bar bg-gray" style="width: <%- tender.other_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="未完成:¥<%- ctx.helper.formatMoney(tender.other_tp) %>"><%- tender.other_ratio %>%</div>
-                        <% } %>
-                    </div>
-                </div>
-                <ul class="nav nav-tabs">
-                    <!--<li class="nav-item">-->
-                    <!--<a class="nav-link active" data-toggle="tab" href="#tubiao" role="tab">进度表</a>-->
-                    <!--</li>-->
-                    <li class="nav-item">
-                        <a class="nav-link active" data-toggle="tab" href="#shuxing" role="tab">标段属性</a>
-                    </li>
-                </ul>
-                <div class="tab-content">
-                    <!--进度表-->
-                    <div id="tubiao" class="tab-pane">
-                        <!--月进度图表-->
-                        <div id="chartContainer3" style="height: 300px; width: 100%;" class="my-5">
+                    <!--进度条-->
+                    <div class="mb-3">
+                        <div class="progress">
+                            <% if (tender.pre_ratio > 0) { %>
+                            <div class="progress-bar bg-success" style="width: <%- tender.pre_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="截止上期累计完成:¥<%- ctx.helper.formatMoney(tender.pre_gather_tp) %>"><%- tender.pre_ratio %>%</div>
+                            <% } %>
+                            <% if (tender.cur_ratio > 0) { %>
+                            <div class="progress-bar bg-info" style="width: <%- tender.cur_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="本期完成:¥<%- ctx.helper.formatMoney(tender.gather_tp) %>"><%- tender.cur_ratio %>%</div>
+                            <% } %>
+                            <% if (tender.other_ratio > 0) { %>
+                            <div class="progress-bar bg-gray" style="width: <%- tender.other_ratio %>%;" data-placement="bottom" data-toggle="tooltip" data-original-title="未完成:¥<%- ctx.helper.formatMoney(tender.other_tp) %>"><%- tender.other_ratio %>%</div>
+                            <% } %>
                         </div>
-                        <!--期汇总图表-->
-                        <div id="chartContainer4" style="height: 300px; width: 100%;" class="mb-5">
+                    </div>
+                    <!--标段设置-->
+                    <div class="col-6 p-0 mb-3">
+                        <div class="card">
+                            <div class="card-body">
+                                <h5 class="card-title">标段设置</h5>
+                                <a href="#bd-set-1" data-toggle="modal" data-target="#bd-set-1" class="btn btn-sm btn-outline-primary">标段属性</a>
+                                <a href="#bd-set-2" data-toggle="modal" data-target="#bd-set-2" class="btn btn-sm btn-outline-primary">小数位数</a>
+                                <a href="#bd-set-3" data-toggle="modal" data-target="#bd-set-3" class="btn btn-sm btn-outline-primary">清单精度</a>
+                                <a href="#bd-set-4" data-toggle="modal" data-target="#bd-set-4" class="btn btn-sm btn-outline-primary">合同参数</a>
+                                <a href="#bd-set-5" data-toggle="modal" data-target="#bd-set-5" class="btn btn-sm btn-outline-primary">显示设置</a>
+                                <a href="#bd-set-6" data-toggle="modal" data-target="#bd-set-6" class="btn btn-sm btn-outline-primary">章节设置</a>
+                            </div>
                         </div>
                     </div>
-                    <!--标段属性-->
-                    <div id="shuxing" class="tab-pane active">
-                        <div class="row m-0 my-3">
-                            <div class="col-2">
-                                <div class="nav flex-column nav-pills" >
-                                    <a class="nav-link active" data-toggle="pill" href="#v-pills-1" role="tab">标段属性</a>
-                                    <a class="nav-link"  data-toggle="pill" href="#v-pills-2" role="tab">小数位数</a>
-                                    <a class="nav-link"  data-toggle="pill" href="#v-pills-3" role="tab">数量精度</a>
-                                    <a class="nav-link"  data-toggle="pill" href="#v-pills-4" role="tab">合同参数</a>
-                                    <a class="nav-link"  data-toggle="pill" href="#v-pills-5" role="tab">显示设置</a>
-                                    <a class="nav-link"  data-toggle="pill" href="#v-pills-6" role="tab">章节设置</a>
-                                </div>
+                    <!--图表-->
+                    <div class="card mb-3 mr-1">
+                        <div class="card-body">
+                            <h5 class="card-title">期进度表</h5>
+                            <div id="chartContainer4" style="height: 300px; width: 100%;">
                             </div>
-                            <div class="col">
-                                <div class="tab-content">
-                                    <div class="tab-pane fade show active" id="v-pills-1" role="tabpanel">
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                            <div>
-                                                <button type="button" class="btn btn-sm btn-outline-primary" id="edit-1"> 编辑</button>
-                                            </div>
-                                            <div style="display: none">
-                                                <button type="button" class="btn btn-sm btn-outline-success" id="post-1"><i class="fa fa-check"></i> 提交</button>&nbsp;
-                                                <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-1"><i class="fa fa-close"></i> 取消</button>
-                                            </div>
-                                        </div>
-                                        <!--合同信息-->
-                                        <legend class="mt-3">合同信息</legend>
-                                        <!--默认显示-->
-                                        <div class="form-group">
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">建设项目名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="项目A" readonly="" id="build-name" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">合同编号</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="deal-code" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">合同名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="deal-name" maxlength="100">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <!--参建单位-->
-                                        <legend class="mt-3">参建单位</legend>
-                                        <!--编辑模式-->
-                                        <div class="form-group">
-                                            <label>建设单位:</label>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单位名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="build-company" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">法人代表</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="build-corporation" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">签订日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" id="build-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <label>承包单位1:</label>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单位名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="contract1-company" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">法人代表</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="contract1-corporation" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">签订日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" id="contract1-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <label>承包单位2:</label>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单位名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="contract2-company" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">法人代表</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="contract2-corporation" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">签订日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" id="contract2-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <label>监理单位1:</label>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单位名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="supervision1-company" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">法人代表</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="supervision1-corporation" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">签订日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" id="supervision1-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <label>监理单位2:</label>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单位名称</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="supervision2-company" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">法人代表</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" id="supervision2-corporation" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">签订日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" id="supervision2-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <!--技术参数-->
-                                        <legend class="mt-3">技术参数</legend>
-                                        <div class="form-group">
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">公路等级</span>
-                                                        </div>
-                                                        <select class="form-control form-control-sm" disabled="" id="load-level">
-                                                            <option value="1">高速公路</option>
-                                                            <option value="2">一级公路</option>
-                                                            <option value="3">二级公路</option>
-                                                            <option value="4">三级公路</option>
-                                                            <option value="5">四级公路</option>
-                                                        </select>
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">长度(KM)</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="length" min="0" max="10000"
-                                                               oninput="limitDealParamLength(this)" onchange="checkNumberValid(this)">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">起始桩号</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="start-peg" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">终止桩号</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="end-peg" maxlength="100">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">车道数</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="lane-count" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">合同工期</span>
-                                                        </div>
-                                                        <input type="text" class="form-control form-control-sm" value="" readonly="" id="deal-period" maxlength="100">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">开工日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" readonly="" id="start-date">
-                                                    </div>
-                                                </div>
-                                                <div class="col">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">计划完工日期</span>
-                                                        </div>
-                                                        <input type="date" class="form-control form-control-sm" value="" readonly="" id="plan-end-date">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="tab-pane fade" id="v-pills-2" role="tabpanel" >
-                                        <% if (((tender.ledger_status === audit.ledger.status.uncheck || tender.ledger_status === audit.ledger.status.checkNo) && tender.user_id === ctx.session.sessionUser.accountId)
-                                                || (lastStage && lastStage.user_id === ctx.session.sessionUser.accountId && (lastStage.status === audit.stage.status.checkNo || lastStage.status === audit.stage.status.uncheck))) { %>
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                        <span>
-                                            <button type="button" class="btn btn-sm btn-outline-primary" id="edit-2">编辑</button>
-                                        </span>
-                                            <span style="display: none">
-                                            <button type="button" class="btn btn-sm btn-outline-success" id="post-2"><i class="fa fa-check"></i> 提交</button>&nbsp;
-                                            <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-2"><i class="fa fa-close"></i>  取消</button>
-                                        </span>
-                                        </div>
-                                        <% } %>
-                                        <!--小数位数-->
-                                        <legend class="mt-3">小数位数</legend>
-                                        <div class="form-group">
-                                            <label>全局设置</label>
-                                            <div class="row">
-                                                <div class="col-2">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">单价</span>
-                                                        </div>
-                                                        <input type="number" class="form-control form-control-sm" value="3" id="decimal-up" min="0" max="4" maxlength="1" oninput="limitDecimal(this)">
-                                                    </div>
-                                                </div>
-                                                <div class="col-2">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">金额</span>
-                                                        </div>
-                                                        <input type="number" class="form-control form-control-sm" value="2" id="decimal-tp" onchange="CalculateAllDealParam()" oninput="limitDecimal(this)" min="0" max="4" maxlength="1">
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="form-group">
-                                            <label>单独设置</label>
-                                            <div class="row">
-                                                <div class="col-auto">
-                                                    <div class="form-group form-check mt-1">
-                                                        <input type="checkbox" class="form-check-input" id="decimal-pay" onchange="CalculateAllDealParam()">
-                                                        <label class="form-check-label" for="exampleCheck2">合同支付</label>
-                                                    </div>
-                                                </div>
-                                                <div class="col-2">
-                                                    <div class="input-group input-group-sm">
-                                                        <div class="input-group-prepend">
-                                                            <span class="input-group-text">金额</span>
-                                                        </div>
-                                                        <input type="number" class="form-control form-control-sm" value="2" readonly="" id="decimal-pay-tp" onchange="CalculateAllDealParam()" oninput="limitDecimal(this)" min="0" max="4" maxlength="1"
-                                                        >
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="tab-pane fade" id="v-pills-3" role="tabpanel" >
-                                        <% if (((tender.ledger_status === audit.ledger.status.uncheck || tender.ledger_status === audit.ledger.status.checkNo) && tender.user_id === ctx.session.sessionUser.accountId)
-                                                || (lastStage && lastStage.user_id === ctx.session.sessionUser.accountId && (lastStage.status === audit.stage.status.checkNo || lastStage.status === audit.stage.status.uncheck))) { %>
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                            <div class="alert alert-danger m-0 p-1 px-2" id="hint-3" style="display: none"><i class="fa fa-smile-o mr-2"></i>A simple danger alert—check it out!</div>
-                                            <div>
-                                                <button type="button" class="btn btn-sm btn-outline-primary" id="edit-3"> 编辑</button>
-                                            </div>
-                                            <div style="display: none">
-                                                <button type="button" class="btn btn-sm btn-outline-success" id="post-3"><i class="fa fa-check"></i> 提交</button>&nbsp;
-                                                <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-3"><i class="fa fa-close"></i> 取消</button>
-                                            </div>
-                                        </div>
-                                        <% } %>
-                                        <legend class="mt-3">数量精度</legend>
-                                        <!--默认显示-->
-                                        <div class="form-group" id="precision-spread" style="height: 365px; width: 600px;">
-                                        </div>
-                                    </div>
-                                    <div class="tab-pane fade" id="v-pills-4" role="tabpanel" >
-                                        <% if (!lastStage || (lastStage.order === 1 && lastStage.user_id === ctx.session.sessionUser.accountId && (lastStage.status === audit.stage.status.checkNo || lastStage.status === audit.stage.status.uncheck))) { %>
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                            <div class="alert alert-danger m-0 p-1 px-2" id="hint-4" style="display: none"><i class="fa fa-smile-o mr-2"></i>A simple danger alert—check it out!</div>
-                                            <div>
-                                                <button type="button" class="btn btn-sm btn-outline-primary" id="edit-4"> 编辑</button>
-                                            </div>
-                                            <div style="display: none">
-                                                <button type="button" class="btn btn-sm btn-outline-success" id="post-4"><i class="fa fa-check"></i> 提交</button>&nbsp;
-                                                <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-4"><i class="fa fa-close"></i> 取消</button>
-                                            </div>
-                                        </div>
-                                        <% } %>
-                                        <legend class="mt-3">合同参数</legend>
-                                        <!--默认显示-->
-                                        <div class="form-group" id="param-spread" style="height: 230px; width: 600px;">
-                                        </div>
-                                    </div>
-                                    <div class="tab-pane fade" id="v-pills-5" role="tabpanel" >
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                        <span>
-                                            <button type="button" class="btn btn-sm btn-outline-primary" id="edit-5">编辑</button>
-                                        </span>
-                                            <span style="display: none">
-                                            <button type="button" class="btn btn-sm btn-outline-success" id="post-5"><i class="fa fa-check"></i> 提交</button>&nbsp;
-                                            <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-5"><i class="fa fa-close"></i>  取消</button>
-                                        </span>
-                                        </div>
-                                        <legend class="mt-3">台帐列显示</legend>
-                                        <div class="form-group">
-                                            <div class="form-group">
-                                                <div class="row">
-                                                    <div class="col">
-                                                        <div class="form-group form-check">
-                                                            <input type="checkbox" class="form-check-input" id="ledger-dgn-qty" checked="">
-                                                            <label class="form-check-label" for="ledger-dgn-qty">项目节数量</label>
-                                                        </div>
-                                                        <div class="form-group form-check">
-                                                            <input type="checkbox" class="form-check-input" id="ledger-cl-qty" checked="">
-                                                            <label class="form-check-label" for="ledger-cl-qty">错漏增减</label>
-                                                        </div>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <!--章节设置-->
-                                    <div class="tab-pane fade" id="v-pills-6" role="tabpanel" >
-                                        <!--操作-->
-                                        <div class="d-flex justify-content-end mt-3">
-                                            <div class="alert alert-danger m-0 p-1 px-2" id="hint-6" style="display: none"><i class="fa fa-smile-o mr-2"></i>A simple danger alert—check it out!</div>
-                                            <span>
-                                            <button type="button" class="btn btn-sm btn-outline-primary" id="edit-6">编辑</button>
-                                        </span>
-                                            <span style="display: none">
-                                            <button type="button" class="btn btn-sm btn-outline-success" id="post-6"><i class="fa fa-check"></i> 提交</button>
-                                            <button type="button" class="btn btn-sm btn-outline-danger" id="cancel-6"><i class="fa fa-close"></i>  取消</button>
-                                        </span>
-                                        </div>
-                                        <legend class="mt-3">章节设置</legend>
-                                        <!--默认显示-->
-                                        <div class="form-group" id="chapter-spread" style="height: 330px; width: 600px;">
-                                        </div>
-                                    </div>
-                                </div>
+                        </div>
+                    </div>
+                    <div class="card mb-3 mr-1">
+                        <div class="card-body">
+                            <h5 class="card-title">月进度表</h5>
+                            <div id="chartContainer3" style="height: 300px; width: 100%;">
                             </div>
                         </div>
                     </div>
@@ -647,7 +224,7 @@
                 stack: '完成',
                 data:[
                     <% for (const s of stages) {%>
-                    <%- ctx.helper.mul(s.pre_contract_tp, s.pre_qc_tp) %>,
+                    <%- ctx.helper.add(s.pre_contract_tp, s.pre_qc_tp) %>,
                     <% } %>
                 ]
             },
@@ -658,7 +235,7 @@
                 stack: '完成',
                 data:[
                     <% for (const s of stages) {%>
-                    <%- ctx.helper.mul(s.contract_tp, s.qc_tp) %>,
+                    <%- ctx.helper.add(s.contract_tp, s.qc_tp) %>,
                     <% } %>
                 ]
             },
@@ -669,7 +246,7 @@
                 yAxisIndex: 1,
                 data:[
                     <% for (const s of stages) {%>
-                    <%- ctx.helper.mul(ctx.helper.div(ctx.helper.mul(s.contract_tp, s.qc_tp), tender.sum, 2), 100) %>,
+                    <%- ctx.helper.mul(ctx.helper.div(ctx.helper.add(s.contract_tp, s.qc_tp), tender.sum, 2), 100) %>,
                     <% } %>
                 ]
             },
@@ -741,7 +318,7 @@
                 },
                 data:[
                     <% for (const mp of monthProgress) { %>
-                    <%- mp.end_tp %>,
+                    <%- mp.end_ratio %>,
                     <% } %>
                 ]
             },
@@ -760,7 +337,7 @@
                 },
                 data:[
                     <% for (const mp of monthProgress) { %>
-                    <%- mp.tp %>,
+                    <%- mp.ratio %>,
                     <% } %>
                 ]
             }
@@ -771,7 +348,4 @@
     //3 标段月进度//
 </script>
 <script>
-    let property = JSON.parse('<%- JSON.stringify(tenderInfo) %>');
-    let ledgerChecked = <%- tender.ldeger_status === audit.ledger.status.checked %>;
-    let firstStageChecked = <%- lastStage !== undefined && lastStage !== null && (lastStage.order > 1 || (lastStage.order === 1 && lastStage.status === audit.stage.status.checked)) %>;
 </script>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1144 - 0
app/view/tender/detail_modal.ejs


+ 2 - 1
config/config.qa.js

@@ -43,7 +43,8 @@ module.exports = appInfo => {
         version: '1.0.0',
     };
 
-    config.filePath = appInfo.baseDir + '/app/public/files';
+    //config.filePath = appInfo.baseDir + '/app/public/files';
+    config.filePath = '//Mai/share_calc';
 
     // session配置
     config.session = {

+ 3 - 2
config/web.js

@@ -107,11 +107,12 @@ const JsFiles = {
                 files: [
                     "/public/js/echarts/echarts.min.js",
                     "/public/js/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js",
+                    "/public/js/decimal.min.js",
                 ],
                 mergeFiles: [
                     "/public/js/spreadjs_rela/spreadjs_zh.js",
-                    "/public/js/change_calculation.js",
-                    "/public/js/tender.js",
+                    "/public/js/zh_calc.js",
+                    //"/public/js/tender.js",
                 ],
                 mergeFile: 'tender',
             }