Explorar o código

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

TonyKang %!s(int64=3) %!d(string=hai) anos
pai
achega
a6b147d63e
Modificáronse 55 ficheiros con 399 adicións e 263 borrados
  1. 0 5
      app/const/spread.js
  2. 12 2
      app/controller/change_controller.js
  3. 4 3
      app/controller/ledger_controller.js
  4. 1 0
      app/controller/report_controller.js
  5. 6 4
      app/controller/revise_controller.js
  6. 6 31
      app/controller/stage_controller.js
  7. BIN=BIN
      app/public/css/logo.png
  8. BIN=BIN
      app/public/images/favicon.ico
  9. BIN=BIN
      app/public/images/logo.png
  10. 1 1
      app/public/js/change.js
  11. 32 0
      app/public/js/change_apply.js
  12. 9 2
      app/public/js/change_apply_audit.js
  13. 17 1
      app/public/js/change_apply_information.js
  14. 2 2
      app/public/js/change_information_set.js
  15. 1 1
      app/public/js/change_project.js
  16. 1 1
      app/public/js/change_project_audit.js
  17. 18 2
      app/public/js/change_project_information.js
  18. 3 0
      app/public/js/ledger_audit.js
  19. 1 0
      app/public/js/ledger_gather.js
  20. 20 2
      app/public/js/revise.js
  21. 1 0
      app/public/js/revise_gcl_compare.js
  22. 9 5
      app/public/js/stage.js
  23. 3 3
      app/public/js/stage_change.js
  24. 1 0
      app/public/report/js/rpt_main.js
  25. 1 1
      app/router.js
  26. 26 8
      app/service/change_apply.js
  27. 39 9
      app/service/change_project.js
  28. 2 2
      app/service/ledger_revise.js
  29. 10 3
      app/service/report_memory.js
  30. 33 54
      app/service/stage_change.js
  31. 4 46
      app/service/stage_pos.js
  32. 8 6
      app/view/change/apply.ejs
  33. 14 5
      app/view/change/apply_information.ejs
  34. 10 2
      app/view/change/apply_information_modal.ejs
  35. 11 11
      app/view/change/apply_information_notice.ejs
  36. 11 3
      app/view/change/apply_modal.ejs
  37. 1 1
      app/view/change/index.ejs
  38. 1 1
      app/view/change/info_modal.ejs
  39. 8 8
      app/view/change/information.ejs
  40. 1 1
      app/view/change/information_modal.ejs
  41. 3 3
      app/view/change/modal.ejs
  42. 2 2
      app/view/change/project.ejs
  43. 24 15
      app/view/change/project_information.ejs
  44. 5 9
      app/view/change/project_information_modal.ejs
  45. 2 2
      app/view/change/project_modal.ejs
  46. 1 1
      app/view/layout/menu.ejs
  47. 1 0
      app/view/ledger/gather.ejs
  48. 8 0
      app/view/report/index.ejs
  49. 1 0
      app/view/revise/gcl_compare.ejs
  50. 1 1
      app/view/stage/stage_sub_menu.ejs
  51. 3 1
      app/view/tender/tender_sub_menu.ejs
  52. 1 1
      app/view/wap/shenpi_change.ejs
  53. 2 2
      config/config.default.js
  54. 16 0
      dev4gcl.js
  55. 1 0
      package.json

+ 0 - 5
app/const/spread.js

@@ -310,10 +310,6 @@ const stageCl = {
             {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 180, formatter: '@'},
             {title: 'ex_memo1', colSpan: '1', rowSpan: '2', field: 'ex_memo1', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
             {title: '位置', colSpan: '1', rowSpan: '2', field: 'position', hAlign: 0, width: 60, formatter: '@'},
-            {title: '台账数量|施工图复核', colSpan: '4|1', rowSpan: '1|1', field: 'sgfh_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|设计错漏增减', colSpan: '1', rowSpan: '|1', field: 'sjcl_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|其他错漏增减', colSpan: '1', rowSpan: '|1', field: 'qtcl_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|小计', colSpan: '1', rowSpan: '|1', field: 'quantity', hAlign: 2, width: 60, readOnly: true},
             {title: '现场实际数量', colSpan: '1', rowSpan: '2', field: 'real_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '预计变更数量', colSpan: '1', rowSpan: '2', field: 'estimate_qty', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '本期计量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'},
@@ -391,7 +387,6 @@ const stageNoCl = {
             {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 180, formatter: '@'},
             {title: '位置', colSpan: '1', rowSpan: '2', field: 'position', hAlign: 0, width: 60, formatter: '@'},
             {title: 'ex_memo1', colSpan: '1', rowSpan: '2', field: 'ex_memo1', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
-            {title: '设计量', colSpan: '1', rowSpan: '2', field: 'sgfh_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '现场实际数量', colSpan: '1', rowSpan: '2', field: 'real_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '预计变更数量', colSpan: '1', rowSpan: '2', field: 'estimate_qty', hAlign: 2, width: 60, type: 'Number', readOnly: true},
             {title: '本期计量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'},

+ 12 - 2
app/controller/change_controller.js

@@ -2024,6 +2024,7 @@ module.exports = app => {
                     auditConst: audit.changeProject,
                     fileList,
                     whiteList,
+                    returnUrl: this.app._.indexOf(ctx.request.headers.referer, '/tender/' + ctx.tender.id + '/change/project') !== -1 ? ctx.request.headers.referer : null,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.project_information),
                     preUrl: '/tender/' + ctx.tender.id + '/change/project/' + ctx.change.id + '/information',
                 };
@@ -2417,7 +2418,6 @@ module.exports = app => {
             for (const c of changes) {
                 c.curAuditor = await ctx.service.changeApplyAudit.getAuditorByStatus(c.id, c.status, c.times);
             }
-
             const tender_userInfo = await ctx.service.projectAccount.getDataById(ctx.tender.data.user_id);
             // 分页相关
             const pageInfo = {
@@ -2465,6 +2465,13 @@ module.exports = app => {
                 }
             }
             const changeProjectList = await ctx.service.changeProject.getAllDataByCondition({ where: { tid: tender.id, status: audit.changeProject.status.checked } });
+            const allProjectCodes = await ctx.service.changeApply.getAllDataByCondition({
+                columns: ['project_code'],
+                where: {
+                    tid: tender.id,
+                },
+            });
+            const pcLists = allProjectCodes.length > 0 ? ctx.app._.uniq(ctx.app._.map(allProjectCodes, 'project_code')) : [];
             const renderData = {
                 uid: ctx.session.sessionUser.accountId,
                 tender,
@@ -2483,6 +2490,7 @@ module.exports = app => {
                 ruleConst: codeRuleConst.measure,
                 changeConst,
                 changeProjectList,
+                pcLists,
                 tenderMenu: this.menu.tenderMenu,
                 preUrl: '/tender/' + tender.id,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.apply),
@@ -2537,7 +2545,7 @@ module.exports = app => {
                     throw '变更申请编号不能为空';
                 }
 
-                const change = await ctx.service.changeApply.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.project_code);
+                const change = await ctx.service.changeApply.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.project_code, data.name);
 
                 ctx.body = { err: 0, msg: '', data: change };
             } catch (err) {
@@ -2603,6 +2611,7 @@ module.exports = app => {
                     auditConst: audit.changeApply,
                     fileList,
                     whiteList,
+                    returnUrl: this.app._.indexOf(ctx.request.headers.referer, '/tender/' + ctx.tender.id + '/change/apply') !== -1 ? ctx.request.headers.referer : null,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.apply_information),
                     preUrl: '/tender/' + ctx.tender.id + '/change/apply/' + ctx.change.id + '/information',
                 };
@@ -2638,6 +2647,7 @@ module.exports = app => {
                     changeConst,
                     auditConst: audit.changeApply,
                     fileList,
+                    returnUrl: this.app._.indexOf(ctx.request.headers.referer, '/tender/' + ctx.tender.id + '/change/apply') !== -1 ? ctx.request.headers.referer : null,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.apply_information_notice),
                     preUrl: '/tender/' + ctx.tender.id + '/change/apply/' + ctx.change.id + '/information/notice',
                 };

+ 4 - 3
app/controller/ledger_controller.js

@@ -117,10 +117,10 @@ module.exports = app => {
                 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
                 'code', 'b_code', 'name', 'unit', 'unit_price',
                 'sgfh_qty', 'sgfh_expr', 'sgfh_tp', 'memo', 'drawing_code'];
-            if (tender.data.measureType === measureType.gcl.value) ledgerColumn.push('deal_qty', 'deal_tp');
+            if (tender.data.measure_type === measureType.gcl.value) ledgerColumn.push('deal_qty', 'deal_tp');
             if (tender.info.display.ledger.dgnQty) ledgerColumn.push('dgn_qty1', 'dgn_qty2');
             if (tender.info.display.ledger.clQty) ledgerColumn.push('sjcl_qty', 'qtcl_qty', 'sjcl_expr', 'qtcl_expr', 'sjcl_tp', 'qtcl_tp', 'quantity', 'total_price');
-            const posColumn = ['id', 'tid', 'lid', 'name', 'position', 'porder', 'sjcl_qty', 'sjcl_expr', 'add_stage_order'];
+            const posColumn = ['id', 'tid', 'lid', 'name', 'position', 'porder', 'sgfh_qty', 'sgfh_expr', 'add_stage_order', 'drawing_code'];
             if (tender.info.display.ledger.clQty) posColumn.push('sjcl_qty', 'qtcl_qty', 'sjcl_expr', 'qtcl_expr', 'quantity');
             for (const field of sjsRela.ledgerCol) {
                 if (field.show) {
@@ -513,7 +513,7 @@ module.exports = app => {
                 ctx.tender.info.ledger_check.same_code && checkData.checkSameCode();
                 ctx.tender.info.ledger_check.sibling && checkData.checkSibling();
 
-                checkData.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
+                if (ctx.tender.data.measure_type === measureType.tz.value) checkData.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
                 checkData.checkBillsTp([
                     {qty: 'sgfh_qty', tp: 'sgfh_tp'}, {qty: 'qtcl_qty', tp: 'qtcl_tp'},
                     {qty: 'sjcl_qty', tp: 'sjcl_tp'}, {qty: 'quantity', tp: 'total_price'}
@@ -737,6 +737,7 @@ module.exports = app => {
         async gather(ctx) {
             try {
                 const renderData = {
+                    measureType,
                     tender: ctx.tender.data,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.ledger.gather),
                 };

+ 1 - 0
app/controller/report_controller.js

@@ -306,6 +306,7 @@ module.exports = app => {
                     shenpiConst,
                     archiveList,
                     lastAuditor,
+                    rpt_id: ctx.query.rpt_id,
                 };
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 // await this.layout('report/index.ejs', renderData);

+ 6 - 4
app/controller/revise_controller.js

@@ -470,7 +470,7 @@ module.exports = app => {
                 ctx.tender.info.ledger_check.same_code && reviseCheck.checkSameCode();
                 ctx.tender.info.ledger_check.sibling && reviseCheck.checkSibling();
 
-                reviseCheck.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
+                if (ctx.tender.data.measure_type === measureType.tz.value) reviseCheck.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
                 reviseCheck.checkBillsTp([
                     {qty: 'sgfh_qty', tp: 'sgfh_tp'}, {qty: 'qtcl_qty', tp: 'qtcl_tp'},
                     {qty: 'sjcl_qty', tp: 'sjcl_tp'}, {qty: 'quantity', tp: 'total_price'}
@@ -735,11 +735,10 @@ module.exports = app => {
          */
         async deal2sgfh(ctx) {
             try {
-                const revise = await this.checkRevise(ctx);
                 if (this.ctx.tender.measure_type === measureType.tz.value) throw '该功能仅工程量清单模式可用';
 
-                await this.ctx.service.revise.deal2sgfh(ctx.tender.id);
-                const ledgerData = await ctx.service.revise.getData(ctx.tender.id);
+                await this.ctx.service.reviseBills.deal2sgfh(ctx.tender.id);
+                const ledgerData = await ctx.service.reviseBills.getData(ctx.tender.id);
                 ctx.body = { err: 0, msg: '', data: { bills: ledgerData } };
             } catch (err) {
                 this.log(err);
@@ -951,12 +950,14 @@ module.exports = app => {
                 case 'bills':
                     return ctx.revise.preHis ? await this.ctx.helper.loadLedgerDataFromOss(ctx.revise.preHis.bills_file) : [];
                 case 'pos':
+                    if (ctx.tender.data.measure_type === measureType.gcl.value) return [];
                     return ctx.revise.preHis ? await this.ctx.helper.loadLedgerDataFromOss(ctx.revise.preHis.pos_file) : [];
                 case 'reviseBills':
                     return ctx.revise.readOnly && ctx.revise.curHis
                         ? await this.ctx.helper.loadLedgerDataFromOss(ctx.revise.curHis.bills_file)
                         : await ctx.service.reviseBills.getAllDataByCondition({ where: { tender_id: ctx.tender.id } });
                 case 'revisePos':
+                    if (ctx.tender.data.measure_type === measureType.gcl.value) return [];
                     return ctx.revise.readOnly && ctx.revise.curHis
                         ? await this.ctx.helper.loadLedgerDataFromOss(ctx.revise.curHis.pos_file)
                         : await ctx.service.revisePos.getAllDataByCondition({ where: { tid: ctx.tender.id } });
@@ -1004,6 +1005,7 @@ module.exports = app => {
             if (!revise) throw '台账修订数据有误';
 
             const renderData = {
+                measureType,
                 preUrl: ctx.url.replace('/gcl-compare', ''),
                 revise,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.revise.gclCompare),

+ 6 - 31
app/controller/stage_controller.js

@@ -94,25 +94,12 @@ module.exports = app => {
                     return cols.indexOf(c.field) > -1;
                 });
             }
-            function setColFormat(cols, field, formatter) {
-                const filterCols = cols.filter(function(c) {
-                    return c.field.search(field) !== -1;
-                });
-                for (const col of filterCols) {
-                    col.formatter = formatter;
-                }
-            }
-            // const tpFormatter = this.ctx.helper.getNumberFormatter(this.ctx.tender.info.decimal.tp);
-            // const upFormatter = this.ctx.helper.getNumberFormatter(2);
             const tender = this.ctx.tender,
                 stage = this.ctx.stage;
             const stageSetting = tender.data.measure_type === measureType.tz.value
                 ? spreadConst.stageTz
                 : (tender.info.display.ledger.clQty ? spreadConst.stageCl : spreadConst.stageNoCl);
             const ledger = JSON.parse(JSON.stringify(stageSetting.ledger));
-            // setColFormat(ledger.cols, 'unit_price', upFormatter);
-            // setColFormat(ledger.cols, 'total_price', tpFormatter);
-            // setColFormat(ledger.cols, 'tp', tpFormatter);
             if (!tender.info.display.ledger.dgnQty) {
                 removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols);
             }
@@ -238,16 +225,16 @@ module.exports = app => {
             const ledgerColumn = [
                 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
                 'code', 'b_code', 'name', 'unit', 'unit_price',
-                'quantity', 'total_price', 'memo', 'drawing_code'];
+                'quantity', 'total_price', 'memo', 'drawing_code', 'is_tp'];
             if (this.ctx.session.sessionProject.gxby) ledgerColumn.push('gxby_status', 'gxby_url', 'gxby_limit');
             if (this.ctx.session.sessionProject.dagl) ledgerColumn.push('dagl_status', 'dagl_url', 'dagl_limit');
-            if (tender.data.measureType === measureType.gcl.value) ledgerColumn.push('deal_qty', 'deal_tp', 'sjcl_qty', 'sjcl_expr', 'sjcl_tp');
+            if (tender.data.measure_type === measureType.gcl.value) ledgerColumn.push('deal_qty', 'deal_tp');
             if (tender.info.display.ledger.dgnQty) ledgerColumn.push('dgn_qty1', 'dgn_qty2');
-            const posColumn = ['id', 'tid', 'lid', 'name', 'position', 'porder', 'quantity'];
+
+            const posColumn = ['id', 'tid', 'lid', 'name', 'position', 'porder', 'quantity', 'add_stage_order', 'drawing_code'];
             if (tender.info.display.stage.realComplete) posColumn.push('real_qty');
             if (this.ctx.session.sessionProject.gxby) posColumn.push('gxby_status', 'gxby_url', 'gxby_limit');
             if (this.ctx.session.sessionProject.dagl) posColumn.push('dagl_status', 'dagl_url', 'dagl_limit');
-            if (tender.data.measureType === measureType.gcl.value) ledgerColumn.push('sjcl_qty', 'sjcl_expr');
             for (const field of sjsRela.ledgerCol) {
                 if (field.show) {
                     ledgerColumn.push(field.field);
@@ -422,7 +409,6 @@ module.exports = app => {
                 checkData.loadData(ledgerData, posData);
                 await this.ctx.service.s2bProj.refreshSessionS2b();
                 checkData.check3fLimit(ctx.tender.data);
-                checkData.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
 
                 projRela.banOver && ctx.tender.info.ledger_check.over && checkData.checkOverRange(['contract_qty', 'qc_qty']);
                 checkData.checkBillsTp([
@@ -1305,25 +1291,14 @@ module.exports = app => {
                     return cols.indexOf(c.field) > -1;
                 });
             }
-            function setColFormat(cols, field, formatter) {
-                const filterCols = cols.filter(function(c) {
-                    return c.field.search(field) !== -1;
-                });
-                for (const col of filterCols) {
-                    col.formatter = formatter;
-                }
-            }
-            // const tpFormatter = this.ctx.helper.getNumberFormatter(this.ctx.tender.info.decimal.tp);
-            // const upFormatter = this.ctx.helper.getNumberFormatter(2);
             const gcl = JSON.parse(JSON.stringify(spreadConst.stageGather.gcl));
-            // setColFormat(gcl.cols, 'unit_price', upFormatter);
-            // setColFormat(gcl.cols, 'total_price', tpFormatter);
-            // setColFormat(gcl.cols, 'tp', tpFormatter);
 
             const leafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.leafXmj));
             const tender = this.ctx.tender;
             if (tender.data.measure_type === measureType.tz.value) {
                 removeFieldCols(gcl, spreadConst.filterCols.tzWithoutCols);
+            } else {
+                removeFieldCols(leafXmj, ['quantity']);
             }
             return [gcl, leafXmj];
         }

BIN=BIN
app/public/css/logo.png


BIN=BIN
app/public/images/favicon.ico


BIN=BIN
app/public/images/logo.png


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

@@ -230,7 +230,7 @@ $(document).ready(() => {
         if ($('#bj-name').val().length === 0) {
             $('#bj-name').addClass('is-invalid');
             $('#name_error_msg').show();
-            $('#name_error_msg').text('工程名称不能为空。');
+            $('#name_error_msg').text('变更工程名称不能为空。');
             $(this).attr('disabled', false);
             setTimeout(function () {
                 $('#bj-name').removeClass('is-invalid');

+ 32 - 0
app/public/js/change_apply.js

@@ -187,9 +187,32 @@ $(document).ready(() => {
     // 新增变更令 确认
     $('#addOk').click(function () {
         $(this).attr('disabled', true);
+        if (!openChangeProject && $('#bj-name').val().length === 0) {
+            $('#bj-name').addClass('is-invalid');
+            $('#name_error_msg').show();
+            $('#name_error_msg').text('变更工程名称不能为空。');
+            $(this).attr('disabled', false);
+            setTimeout(function () {
+                $('#bj-name').removeClass('is-invalid');
+                $('#name_error_msg').hide();
+            }, 2000);
+            return;
+        }
+        if (!openChangeProject && $('#bj-name').val().length > 100) {
+            $('#bj-name').addClass('is-invalid');
+            $('#name_error_msg').show();
+            $('#name_error_msg').text('名称超过100个字,请缩减名称。');
+            $(this).attr('disabled', false);
+            setTimeout(function () {
+                $('#bj-name').removeClass('is-invalid');
+                $('#name_error_msg').hide();
+            }, 2000);
+            return;
+        }
         const data = {
             code: $('#bj-code').val(),
             project_code: $('#project-code').val(),
+            name: $('#bj-name').val(),
         };
         if (data.code || data.code !== '') {
             postData('/tender/'+ tenderId +'/change/apply/add', data, function (rst) {
@@ -205,6 +228,15 @@ $(document).ready(() => {
         }
     });
 
+    $('#project-code').change(function () {
+        if ($(this).val() === '') {
+            $('#bj-name').val('');
+        } else {
+            const info = _.find(changeProjectList, { code: $(this).val() });
+            $('#bj-name').val(info.name);
+        }
+    });
+
     //状态切换
     $('#status_select a').on('click', function () {
        const status = $(this).data('val');

+ 9 - 2
app/public/js/change_apply_audit.js

@@ -189,8 +189,8 @@ function checkAuditorFrom () {
         toastr.error('变更申请编号不能为空');
         flag = true;
     }
-    if (change.name === '') {
-        toastr.error('工程名称不能为空');
+    if (!change.name) {
+        toastr.error('变更工程名称不能为空');
         flag = true;
     }
     if (!change.reason) {
@@ -208,6 +208,13 @@ function auditCheck(i) {
     // const inlineRadio2 = $('#inlineRadio2:checked').val()
     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);
+    console.log($('input[name="notice_code"]').val());
+    if ($('input[name="notice_code"]').val() !== undefined) {
+        if (_.trim($('input[name="notice_code"]').val()) === '') {
+            toastr.error('请输入变更通知书');
+            return false;
+        }
+    }
     // if (i === 1) {
     //     if (!inlineRadio1 && !inlineRadio2) {
     //         if (!$('#warning-text').length) {

+ 17 - 1
app/public/js/change_apply_information.js

@@ -155,7 +155,7 @@ $(document).ready(() => {
         } else {
             $(this).val(change[val_name]);
         }
-    })
+    });
 
     $('#apply-table textarea').blur(function () {
         const val_name = $(this).data('name');
@@ -171,6 +171,22 @@ $(document).ready(() => {
         } else {
             $(this).val(change[val_name]);
         }
+    });
+
+    $('#apply-table select').change(function () {
+        const val_name = $(this).attr('data-name');
+        let val = _.trim($(this).val()) !== '' ? _.trim($(this).val()) : null;
+        if(change[val_name] !== val) {
+            const _self = $(this);
+            postData(preUrl + '/save', { name: val_name, val}, function (result) {
+                change[val_name] = val;
+                _self.val(change[val_name]);
+            }, function () {
+                _self.val(change[val_name]);
+            })
+        } else {
+            $(this).val(change[val_name]);
+        }
     })
 });
 

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

@@ -967,7 +967,7 @@ $(document).ready(() => {
             return;
         }
         if ($('input[name="name"]').val() === '') {
-            toastr.error('工程名称不能为空!');
+            toastr.error('变更工程名称不能为空!');
             return;
         }
         // 换行更改并提交
@@ -1029,7 +1029,7 @@ function checkChangeFrom() {
         returnFlag = true;
     }
     if ($('input[name="name"]').val() === '') {
-        toastr.error('工程名称不能为空!');
+        toastr.error('变更工程名称不能为空!');
         returnFlag = true;
     }
     if ($('textarea[name="content"]').val() === '') {

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

@@ -190,7 +190,7 @@ $(document).ready(() => {
         if ($('#bj-name').val().length === 0) {
             $('#bj-name').addClass('is-invalid');
             $('#name_error_msg').show();
-            $('#name_error_msg').text('工程名称不能为空。');
+            $('#name_error_msg').text('变更工程名称不能为空。');
             $(this).attr('disabled', false);
             setTimeout(function () {
                 $('#bj-name').removeClass('is-invalid');

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

@@ -290,7 +290,7 @@ function checkAuditorFrom () {
         flag = true;
     }
     if (change.name === '') {
-        toastr.error('工程名称不能为空');
+        toastr.error('变更工程名称不能为空');
         flag = true;
     }
     if (!change.reason) {

+ 18 - 2
app/public/js/change_project_information.js

@@ -112,7 +112,7 @@ $(document).ready(() => {
                 break;
             case 'name':
                 if(!val) {
-                    toastr.error('工程名称不能为空');
+                    toastr.error('变更工程名称不能为空');
                     $(this).val(change[val_name]);
                     return false;
                 } else if(val.length > 100) {
@@ -153,7 +153,7 @@ $(document).ready(() => {
         } else {
             $(this).val(change[val_name]);
         }
-    })
+    });
 
     $('#project-table textarea').blur(function () {
         const val_name = $(this).data('name');
@@ -169,6 +169,22 @@ $(document).ready(() => {
         } else {
             $(this).val(change[val_name]);
         }
+    });
+
+    $('#project-table select').change(function () {
+        const val_name = $(this).attr('data-name');
+        let val = _.trim($(this).val()) !== '' ? _.trim($(this).val()) : null;
+        if(change[val_name] !== val) {
+            const _self = $(this);
+            postData(preUrl + '/save', { name: val_name, val}, function (result) {
+                change[val_name] = val;
+                _self.val(change[val_name]);
+            }, function () {
+                _self.val(change[val_name]);
+            })
+        } else {
+            $(this).val(change[val_name]);
+        }
     })
 });
 

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

@@ -39,6 +39,9 @@ $(document).ready(() => {
     } else {
         treeSetting.calcFields = ['deal_tp', 'sgfh_tp', 'sjcl_tp', 'qtcl_tp', 'total_price'];
     }
+    treeSetting.calcFun = function (node) {
+        node.dgn_price = ZhCalc.round(ZhCalc.div(node.total_price, node.dgn_qty1), 2);
+    };
     const ledgerTree = createNewPathTree('fx', treeSetting);
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);

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

@@ -98,6 +98,7 @@ $(document).ready(() => {
             colWidth: true,
         },
     };
+    if (!isTz) leafXmjSpreadSetting.cols.splice(1, 1);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     const leafXmjSheet = leafXmjSpread.getActiveSheet();

+ 20 - 2
app/public/js/revise.js

@@ -633,8 +633,10 @@ $(document).ready(() => {
                         if (colSetting.field === 'sgfh_qty' || colSetting.field === 'sgfh_tp' ||
                             colSetting.field === 'sjcl_qty' || colSetting.field === 'sjcl_tp' ||
                             colSetting.field === 'qtcl_qty' || colSetting.field === 'qtcl_tp') {
-                            toastMessageUniq(hint.posQty);
-                            continue;
+                            if (isTz) {
+                                toastMessageUniq(hint.posQty);
+                                continue;
+                            }
                         }
                         if (value !== '' && invalidFields.posXmj.indexOf(colSetting.field) >= 0) {
                             toastMessageUniq(hint.posXmj);
@@ -1237,6 +1239,22 @@ $(document).ready(() => {
         billsContextMenuOptions.items.sprBlock = '----';
     }
     if (!readOnly) {
+        if (!isTz) {
+            billsContextMenuOptions.items.applyDeal2Sgfh = {
+                name: '填设计量',
+                icon: 'fa-pencil',
+                callback: function (key, opt) {
+                    postData(window.location.pathname + '/deal2sgfh', null, function (result) {
+                        billsTree.loadDatas(result.bills);
+                        treeCalc.calculateAll(billsTree);
+                        SpreadJsObj.loadSheetData(billsSheet, 'tree', billsTree);
+                    });
+                }
+            };
+            billsContextMenuOptions.items.sprSort = '----';
+        }
+    }
+    if (!readOnly) {
         billsContextMenuOptions.items.batchInsert = {
             name: '批量插入',
             type: 'batchInsert',

+ 1 - 0
app/public/js/revise_gcl_compare.js

@@ -101,6 +101,7 @@ $(document).ready(() => {
             colWidth: true,
         },
     };
+    if (!isTz) leafXmjSpreadSetting.cols.splice(1, 2);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     const leafXmjSheet = leafXmjSpread.getActiveSheet();

+ 9 - 5
app/public/js/stage.js

@@ -2183,7 +2183,7 @@ $(document).ready(() => {
                 name: '按比例计量',
                 visible: function (key, opt) {
                     const data = spSpread.getActiveSheet().zh_data;
-                    return data && data.length > 0;
+                    return checkTzMeasureType() && data && data.length > 0;
                 },
                 disabled: function (key, opt) {
                     const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -2226,7 +2226,7 @@ $(document).ready(() => {
 
                         const qty = ZhCalc.sub(curPos.quantity, curPos.pre_contract_qty);
                         const differ = ZhCalc.sub(curPos.quantity, curPos.end_contract_qty);
-                        if (differ) data.updateData.push({ pid: curPos.id, lid: curPos.lid, contract_qty: qty });
+                        if (differ) data.updateData.push({ pid: curPos.id, lid: curPos.lid, contract_qty: qty, contract_expr: '' });
                     }
                     if (data.updateData.length > 0) {
                         postData(window.location.pathname + '/update', {pos: data}, function (result) {
@@ -2245,6 +2245,9 @@ $(document).ready(() => {
                         });
                     }
                 },
+                visible: function(key, opt) {
+                    return checkTzMeasureType();
+                },
             },
             'remainAll': {
                 name: '填剩余量(全部行)',
@@ -2261,7 +2264,7 @@ $(document).ready(() => {
                     for (const curPos of sheet.zh_data) {
                         const qty = ZhCalc.sub(curPos.quantity, curPos.pre_contract_qty);
                         const differ = ZhCalc.sub(curPos.quantity, curPos.end_contract_qty);
-                        if (differ) data.updateData.push({ pid: curPos.id, lid: curPos.lid, contract_qty: qty });
+                        if (differ) data.updateData.push({ pid: curPos.id, lid: curPos.lid, contract_qty: qty, contract_expr: '' });
                     }
                     if (data.updateData.length > 0) {
                         postData(window.location.pathname + '/update', {pos: data}, function (result) {
@@ -2279,7 +2282,9 @@ $(document).ready(() => {
                             }
                         });
                     }
-
+                },
+                visible: function(key, opt) {
+                    return checkTzMeasureType();
                 },
             },
             'shoufangdan': {
@@ -4314,7 +4319,6 @@ $(document).ready(() => {
         checkOption: checkOption,
     };
     if (!checkTzMeasureType()) {
-        stageCheckerSetting.checkOption.calc.fields.push('sgfh_qty', 'sjcl_qty', 'qtcl_qty', 'quantity');
         stageCheckerSetting.checkOption.tp.fields.push(
             {qty: 'sgfh_qty', tp: 'sgfh_tp'},
             {qty: 'sjcl_qty', tp: 'sjcl_tp'},

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

@@ -35,11 +35,11 @@ class ChangeAnalysis {
         change.attachments = change.detail.attachments;
         change.bills = change.detail.bills;
         for (const b of change.bills) {
-            const aub = change.detail.addUsedBills.find(function (x) {
-                return x.id === b.id;
+            const aub = change.detail.addUsedBills.filter(function (x) {
+                return x.cbid === b.id;
             });
             if (aub) {
-                b.used_qty = aub.used_qty;
+                b.used_qty = ZhCalc.sum(aub.map(x => { return x.qty}));
             }
             b.qty = _.toNumber(b.samount);
             b.valid_qty = ZhCalc.sub(b.qty, b.used_qty);

+ 1 - 0
app/public/report/js/rpt_main.js

@@ -263,6 +263,7 @@ let zTreeOprObj = {
     onClick: function(event,treeId,treeNode) {
         let me = zTreeOprObj;
         if (treeNode && treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
+            window.history.pushState({},0, window.location.pathname + `?rpt_id=${treeNode.refId}`);
             me.currentNode = treeNode;
             let params = {};
             let pageSize = rptControlObj.getCurrentPageSize();

+ 1 - 1
app/router.js

@@ -218,7 +218,6 @@ module.exports = app => {
     app.post('/tender/:id/revise/add', sessionAuth, tenderCheck, uncheckTenderCheck, 'reviseController.add');
     app.post('/tender/:id/revise/cancel', sessionAuth, tenderCheck, uncheckTenderCheck, 'reviseController.cancel');
     app.post('/tender/:id/revise/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'reviseController.save');
-    // app.post('/tender/:id/revise/deal2sgfh', sessionAuth, tenderCheck, uncheckTenderCheck, 'reviseController.deal2sgfh');
 
     // 台账修订页面
     app.get('/tender/:id/revise/:rid/info', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, reviseAuditCheck, 'reviseController.info');
@@ -227,6 +226,7 @@ module.exports = app => {
     app.post('/tender/:id/revise/:rid/info/update', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, 'reviseController.update');
     app.post('/tender/:id/revise/:rid/info/upload-excel/:ueType', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, 'reviseController.uploadExcel');
     app.post('/tender/:id/revise/:rid/info/check', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, 'reviseController.checkData');
+    app.post('/tender/:id/revise/:rid/info/deal2sgfh', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, 'reviseController.deal2sgfh');
 
     app.get('/tender/:id/revise/:rid/compare', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, reviseAuditCheck, 'reviseController.compare');
     app.get('/tender/:id/revise/:rid/gcl-compare', sessionAuth, tenderCheck, uncheckTenderCheck, reviseCheck, reviseAuditCheck, 'reviseController.gclCompare');

+ 26 - 8
app/service/change_apply.js

@@ -16,6 +16,7 @@ const wxConst = require('../const/wechat_template');
 const pushType = require('../const/audit').pushType;
 const projectLogConst = require('../const/project_log');
 const codeRuleConst = require('../const/code_rule');
+const changeConst = require('../const/change');
 
 module.exports = app => {
     class ChangeApply extends app.BaseService {
@@ -30,13 +31,13 @@ module.exports = app => {
             this.tableName = 'change_apply';
         }
 
-        async add(tenderId, userId, code, project_code) {
+        async add(tenderId, userId, code, project_code, name) {
             const sql = 'SELECT COUNT(*) as count FROM ?? WHERE `tid` = ? AND `code` = ?';
             const sqlParam = [this.tableName, tenderId, code];
             const codeCount = await this.db.queryOne(sql, sqlParam);
             const count = codeCount.count;
             if (count > 0) {
-                throw '立项书编号重复';
+                throw '变更申请书编号重复';
             }
 
             // 初始化事务
@@ -51,7 +52,24 @@ module.exports = app => {
                     in_time: new Date(),
                     code,
                     project_code,
+                    name,
+                    quality: changeConst.quality.common.name,
                 };
+                if (project_code) {
+                    const projectInfo = await this.ctx.service.changeProject.getDataByCondition({ code: project_code });
+                    if (projectInfo) {
+                        change.org_name = projectInfo.org_name;
+                        change.peg = projectInfo.peg;
+                        change.new_code = projectInfo.new_code;
+                        change.class = projectInfo.class;
+                        change.quality = projectInfo.quality;
+                        change.reason = projectInfo.reason;
+                        change.content = projectInfo.content;
+                        change.org_price = projectInfo.org_price;
+                        change.change_price = projectInfo.change_price;
+                        change.crease_price = projectInfo.crease_price;
+                    }
+                }
                 const operate = await this.transaction.insert(this.tableName, change);
 
                 if (operate.affectedRows <= 0) {
@@ -115,8 +133,8 @@ module.exports = app => {
                         ];
                         break;
                     case 1: // 待处理(你的)
-                        sql = 'SELECT a.*, p.name as account_name FROM ?? as a LEFT JOIN ?? AS p On a.notice_uid = p.id WHERE a.id in(SELECT b.caid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?))';
-                        sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.ctx.service.changeApplyAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.checkNo];
+                        sql = 'SELECT a.*, p.name as account_name FROM ?? as a LEFT JOIN ?? AS p On a.notice_uid = p.id WHERE a.tid = ? AND (a.id in(SELECT b.caid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?)))';
+                        sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, tenderId, this.ctx.service.changeApplyAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.checkNo];
                         break;
                     case 5: // 待上报(所有的)PS:取未上报,退回,修订的变更令
                         sql =
@@ -184,7 +202,7 @@ module.exports = app => {
                 case 0: // 包含你的所有变更令
                     const sql =
                         'SELECT count(*) AS count FROM ?? AS a WHERE a.tid = ? AND ' +
-                        '(a.uid = ? OR (a.status != ? AND a.id IN (SELECT b.caid FROM ?? AS b WHERE b.aid = ? AND a.times = b.times GROUP BY b.caid)) OR a.status != ?)';
+                        '(a.uid = ? OR (a.status != ? AND a.id IN (SELECT b.caid FROM ?? AS b WHERE b.aid = ? AND a.times = b.times GROUP BY b.caid)) OR a.status = ?)';
                     const sqlParam = [
                         this.tableName,
                         tenderId,
@@ -202,8 +220,8 @@ module.exports = app => {
                     //     uid: this.ctx.session.sessionUser.accountId,
                     //     status: 2,
                     // });
-                    const sql6 = 'SELECT count(*) AS count FROM ?? as a WHERE a.id in(SELECT b.caid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?))';
-                    const sqlParam6 = [this.tableName, this.ctx.service.changeApplyAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.checkNo];
+                    const sql6 = 'SELECT count(*) AS count FROM ?? as a WHERE a.tid = ? AND (a.id in(SELECT b.caid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?)))';
+                    const sqlParam6 = [this.tableName, tenderId, this.ctx.service.changeApplyAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.checkNo];
                     const result6 = await this.db.query(sql6, sqlParam6);
                     return result6[0].count;
                 case 5: // 待上报(所有的)PS:取未上报,退回的变更立项
@@ -217,7 +235,7 @@ module.exports = app => {
                         this.ctx.session.sessionUser.accountId,
                         tenderId,
                         audit.status.uncheck,
-                        audit.status.back,
+                        audit.status.checkNo,
                     ];
                     const result2 = await this.db.query(sql2, sqlParam2);
                     return result2[0].count;

+ 39 - 9
app/service/change_project.js

@@ -16,6 +16,7 @@ const wxConst = require('../const/wechat_template');
 const pushType = require('../const/audit').pushType;
 const projectLogConst = require('../const/project_log');
 const codeRuleConst = require('../const/code_rule');
+const changeConst = require('../const/change');
 
 module.exports = app => {
     class ChangeProject extends app.BaseService {
@@ -53,6 +54,7 @@ module.exports = app => {
                     in_time: new Date(),
                     code,
                     name,
+                    quality: changeConst.quality.common.name,
                 };
                 const operate = await this.transaction.insert(this.tableName, change);
 
@@ -120,8 +122,8 @@ module.exports = app => {
                         ];
                         break;
                     case 1: // 待处理(你的)
-                        sql = 'SELECT a.*, p.name as account_name FROM ?? as a LEFT JOIN ?? AS p On a.uid = p.id WHERE a.id in(SELECT b.cpid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?))';
-                        sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.ctx.service.changeProjectAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.back];
+                        sql = 'SELECT a.*, p.name as account_name FROM ?? as a LEFT JOIN ?? AS p On a.uid = p.id WHERE a.tid = ? AND (a.id in(SELECT b.cpid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?)))';
+                        sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, tenderId, this.ctx.service.changeProjectAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.back];
                         break;
                     case 5: // 待上报(所有的)PS:取未上报,退回,修订的变更令
                         sql =
@@ -179,11 +181,39 @@ module.exports = app => {
          * @return {void}
          */
         async getCountByStatus(tenderId, status) {
-            if (this.ctx.tender.isTourist && status === 0) {
-                const sql5 = 'SELECT count(*) AS count FROM ?? WHERE tid = ? ORDER BY in_time DESC';
-                const sqlParam5 = [this.tableName, tenderId];
-                const result5 = await this.db.query(sql5, sqlParam5);
-                return result5[0].count;
+            if (this.ctx.tender.isTourist) {
+                let touristSql;
+                let touristSqlParam;
+                let touristResult;
+                switch (status) {
+                    case 0:
+                        touristSql = 'SELECT count(*) AS count FROM ?? WHERE tid = ? ORDER BY in_time DESC';
+                        touristSqlParam = [this.tableName, tenderId];
+                        touristResult = await this.db.query(touristSql, touristSqlParam);
+                        return touristResult[0].count;
+                    // case 1:
+                    //     touristSql = 'SELECT count(*) AS count FROM ?? WHERE tid = ? AND (status = ? OR status = ?) ORDER BY in_time DESC';
+                    //     touristSqlParam = [this.tableName, tenderId, audit.status.uncheck, audit.status.checking];
+                    //     touristResult = await this.db.query(touristSql, touristSqlParam);
+                    //     return touristResult[0].count;
+                    // case 5:
+                    //     touristSql = 'SELECT count(*) AS count FROM ?? WHERE tid = ? AND status = ? ORDER BY in_time DESC';
+                    //     touristSqlParam = [this.tableName, tenderId, audit.status.uncheck];
+                    //     touristResult = await this.db.query(touristSql, touristSqlParam);
+                    //     return touristResult[0].count;
+                    // case 2:
+                    //     touristSql = 'SELECT count(*) AS count FROM ?? WHERE tid = ? AND status = ? ORDER BY in_time DESC';
+                    //     touristSqlParam = [this.tableName, tenderId, audit.status.uncheck];
+                    //     touristResult = await this.db.query(touristSql, touristSqlParam);
+                    //     return touristResult[0].count;
+                    // case 4:
+                    //     touristSql = 'SELECT count(*) AS count FROM ?? WHERE tid = ? AND status = ? ORDER BY in_time DESC';
+                    //     touristSqlParam = [this.tableName, tenderId, status];
+                    //     touristResult = await this.db.query(touristSql, touristSqlParam);
+                    //     return touristResult[0].count;
+                    default:
+                        break;
+                }
             }
             switch (status) {
                 case 0: // 包含你的所有变更令
@@ -210,8 +240,8 @@ module.exports = app => {
                     //     uid: this.ctx.session.sessionUser.accountId,
                     //     status: 2,
                     // });
-                    const sql6 = 'SELECT count(*) AS count FROM ?? as a WHERE a.id in(SELECT b.cpid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?))';
-                    const sqlParam6 = [this.tableName, this.ctx.service.changeProjectAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.back];
+                    const sql6 = 'SELECT count(*) AS count FROM ?? as a WHERE a.tid = ? AND (a.id in(SELECT b.cpid FROM ?? as b WHERE b.tid = ? AND b.aid = ? AND b.status = ?) OR (a.uid = ? AND (a.status = ? OR a.status = ?)))';
+                    const sqlParam6 = [this.tableName, tenderId, this.ctx.service.changeProjectAudit.tableName, tenderId, this.ctx.session.sessionUser.accountId, audit.status.checking, this.ctx.session.sessionUser.accountId, audit.status.uncheck, audit.status.back];
                     const result6 = await this.db.query(sql6, sqlParam6);
                     return result6[0].count;
                 case 5: // 待上报(所有的)PS:取未上报,退回的变更立项

+ 2 - 2
app/service/ledger_revise.js

@@ -114,11 +114,11 @@ module.exports = app => {
 
         async _initRevisePos(transaction, tid) {
             const sql = 'Insert Into ' + this.ctx.service.revisePos.tableName +
-                '  (id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
+                '  (id, tid, lid, name, drawing_code, quantity, add_stage, add_stage_order, add_times, add_user,' +
                 '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position,' +
                 '     sgfh_expr, sjcl_expr, qtcl_expr, real_qty,' +
                 '     gxby_status, dagl_status, gxby_url, dagl_url, gxby_limit, dagl_limit, ex_memo1, ex_memo2, ex_memo3)' +
-                '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
+                '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_stage_order, add_times, add_user,' +
                 '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder, position,' +
                 '     sgfh_expr, sjcl_expr, qtcl_expr, real_qty,' +
                 '     gxby_status, dagl_status, gxby_url, dagl_url, gxby_limit, dagl_limit, ex_memo1, ex_memo2, ex_memo3' +

+ 10 - 3
app/service/report_memory.js

@@ -1003,9 +1003,16 @@ module.exports = app => {
                 } else {
                     const material = this.ctx.helper._.find(materials, {order: material_order});
                     if (!material) return [];
-                    result = await this.ctx.service.materialBillsHistory.getAllDataByCondition({
-                        where: { tid: tender_id, mid: material.id }
-                    });
+
+                    const sql = 'SELECT mb.id, mb.tid, mb.mid, mb.order, mb.order, mb.t_type, mb.code, mb.name, mb.unit, mb.spec, mb.m_type,' +
+                        '    mbh.quantity, mbh.expr,' +
+                        '    mb.basic_price, mb.basic_times, ' +
+                        '    mbh.msg_tp, mbh.msg_times, mbh.msg_spread, mbh.m_up_risk, mbh.m_down_risk, mbh.m_spread, mbh.m_tp, mbh.pre_tp, mbh.m_tax_tp, mbh.tax_pre_tp, mbh.origin, ' +
+                        '    mb.remark, mb.is_summary, mbh.m_tax, mb.in_time' +
+                        '  FROM ' + this.ctx.service.materialBillsHistory.tableName + ' mbh ' +
+                        '  LEFT JOIN ' + this.ctx.service.materialBills.tableName + ' mb ON mbh.mb_id = mb.id ' +
+                        '  WHERE mbh.tid = ? And mbh.mid = ?';
+                    result = await this.ctx.app.mysql.query(sql, [tender_id, material.id]);
                 }
                 this._completeMaterialGl(result);
                 return result;

+ 33 - 54
app/service/stage_change.js

@@ -287,61 +287,40 @@ module.exports = app => {
          * @return {Promise<void>}
          */
         async getUsedData(tid, cid) {
-            const lastStage = await this.ctx.service.stage.getLastestStage(tid, true);
-            let filter;
-            if (this.ctx.stage && lastStage.id === this.ctx.stage.id) {
-                filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ? And sChange.`sorder` <= ?))',
-                    [lastStage.order, lastStage.order, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+            if (this.ctx.stage.status === audit.stage.status.checked) {
+                const sql = 'SELECT scf.*, cal.unit_price ' +
+                    '  FROM ' + this.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order = ?';
+                const result = await this.db.query(sql, [tid, cid, this.ctx.stage.order]);
+                return result;
             } else {
-                if (lastStage.status === audit.stage.status.uncheck) {
-                    filter = 'And s.order < ' + lastStage.order;
-                } else if (lastStage.status === audit.stage.status.checked) {
-                    filter = '';
-                } else if (lastStage.status === audit.stage.status.checkNo) {
-                    filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ?))',
-                        [lastStage.order, lastStage.order, lastStage.times]);
-                } else {
-                    const curAuditor = await this.ctx.service.stageAudit.getCurAuditor(lastStage.id, lastStage.times);
-                    filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ? And sChange.`sorder` <= ?))',
-                        [lastStage.order, lastStage.order, lastStage.times, curAuditor.order - 1]);
-                }
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const curAll = await this.db.query(sql, [this.ctx.stage.id, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
+                return cur;
             }
-
-            const sql = 'SELECT c.lid, c.pid, SUM(c.qty) as used_qty,' +
-                        '    cb.tid, cb.cid, cb.id, cb.code, cb.name, cb.unit, cb.unit_price, cb.detail, cb.samount, cb.bwmx, cb.detail' +
-                        '  FROM ' + this.ctx.service.changeAuditList.tableName + ' As cb' +
-                        '  LEFT JOIN ' + this.tableName + ' As c ON cb.id = c.cbid ' +
-                        '  INNER JOIN (' +
-                        '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, sChange.`sid`, `cid` ' +
-                        '      FROM ' + this.tableName + ' As sChange' +
-                        '      LEFT JOIN ' + this.ctx.service.stage.tableName + ' As s ON sChange.sid = s.id' +
-                        '      WHERE sChange.tid = ? AND cid = ?' + filter +
-                        '      GROUP By `lid`, `pid`, `cbid`, sChange.`sid`' +
-                        '  ) As m' +
-                        '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.`cbid` = m.`cbid` AND c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`lid` = m.`lid` And c.`pid` = m.`pid`' +
-                        '  WHERE cb.cid = ?' +
-                        '  GROUP By c.`cbid`';
-            const sqlParam = [tid, cid, cid];
-            return await this.db.query(sql, sqlParam);
         }
 
         async getFinalUsedData(tid, cid) {
-            const sql = 'SELECT c.lid, c.pid, SUM(c.qty) as used_qty,' +
-                '    cb.tid, cb.cid, cb.id, cb.code, cb.name, cb.unit, cb.unit_price, cb.detail, cb.samount, cb.oamount, cb.bwmx, cb.gcl_id' +
-                '  FROM ' + this.ctx.service.changeAuditList.tableName + ' As cb' +
-                '  LEFT JOIN ' + this.tableName + ' As c ON cb.id = c.cbid ' +
-                '  INNER JOIN (' +
-                '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, sChange.`sid`, `cid` ' +
-                '      FROM ' + this.tableName + ' As sChange' +
-                '      LEFT JOIN ' + this.ctx.service.stage.tableName + ' As s ON sChange.sid = s.id' +
-                '      WHERE sChange.tid = ? AND cid = ?' +
-                '      GROUP By `lid`, `pid`, `cbid`, sChange.`sid`' +
-                '  ) As m' +
-                '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.`cbid` = m.`cbid` AND c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`lid` = m.`lid` And c.`pid` = m.`pid`' +
-                '  WHERE cb.cid = ?' +
-                '  GROUP By c.`cbid`';
-            const sqlParam = [tid, cid, cid];
-            return await this.db.query(sql, sqlParam);
+            if (stage.status === audit.stage.status.checked) {
+                const sql = 'SELECT scf.*, cal.unit_price ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order <= ?';
+                const result = await this.db.query(sql, [tid, cid, this.ctx.stage.order]);
+                return result;
+            } else {
+                const preSql = 'SELECT scf.* ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order < ?';
+                const pre = await this.db.query(preSql, [tid, cid, stage.order]);
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const curAll = await this.db.query(sql, [this.ctx.stage.id, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
+                return [...pre, ...cur];
+            }
         }
 
         /**
@@ -432,20 +411,20 @@ module.exports = app => {
         async _getChangeBillsWithUsedInfo(stage) {
             if (stage.status === audit.stage.status.checked) {
                 const sql = 'SELECT scf.*, cal.unit_price ' +
-                    '  FROM ' + this.tableName + ' scf ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
                     '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
                     '  WHERE scf.tid = ? And s.order <= ?';
                 const result = await this.db.query(sql, [stage.tid, stage.order]);
                 return result;
             } else {
                 const preSql = 'SELECT scf.* ' +
-                    '  FROM ' + this.tableName + ' scf ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
                     '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
                     '  WHERE scf.tid = ? And s.order < ?';
                 const pre = await this.db.query(preSql, [stage.tid, stage.order]);
-                const sql = 'SELECT * FROM ' + this.ctx.service.stageChange.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
                 const curAll = await this.db.query(sql, [stage.id, stage.curTimes, stage.curOrder]);
-                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid']);
+                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
                 return [...pre, ...cur];
             }
         }

+ 4 - 46
app/service/stage_pos.js

@@ -147,7 +147,7 @@ module.exports = app => {
          * @private
          */
         async _addStagePosData(data) {
-            let bills , precision, updateBills = null;
+            let bills , precision;
             const  result = {pos: [], ledger: []};
             const datas = data instanceof Array ? data : [data], calcStageBills = [];
             if (datas[0].sgfh_qty !== undefined || datas[0].sjcl_qty !== undefined || datas[0].qtcl_qty !== undefined
@@ -176,8 +176,6 @@ module.exports = app => {
                     if (d.sjcl_expr !== undefined) p.sjcl_expr = d.sjcl_expr;
                     if (d.qtcl_expr !== undefined) p.qtcl_expr = d.qtcl_expr;
                     p.quantity = this.ctx.helper.sum([p.sgfh_qty, p.sjcl_qty, p.qtcl_qty]);
-                    if (!updateBills)
-                        updateBills = {id: bills.id, sgfh_qty: bills.sgfh_qty, sjcl_qty: bills.sjcl_qty, qtcl_qty: bills.qtcl_qty};
                 }
                 if (d.real_qty!== undefined) p.real_qty = this.round(d.real_qty, precision.value);
                 insertPos.push(p);
@@ -203,34 +201,10 @@ module.exports = app => {
                     }
                 }
             }
-            if (updateBills) {
-                for (const d of insertPos) {
-                    if (d.sgfh_qty) {
-                        d.sgfh_qty = this.ctx.helper.round(d.sgfh_qty, precision.value);
-                        updateBills.sgfh_qty = this.ctx.helper.add(updateBills.sgfh_qty, d.sgfh_qty);
-                    }
-                    if (d.sjcl_qty) {
-                        d.sjcl_qty = this.ctx.helper.round(d.sjcl_qty, precision.value);
-                        updateBills.sjcl_qty = this.ctx.helper.add(updateBills.sjcl_qty, d.sjcl_qty);
-                    }
-                    if (d.qtcl_qty) {
-                        d.qtcl_qty = this.ctx.helper.round(d.qtcl_qty, precision.value);
-                        updateBills.qtcl_qty = this.ctx.helper.add(updateBills.qtcl_qty, d.qtcl_qty);
-                    }
-                    d.quantity = this.ctx.helper.sum([d.sgfh_qty, d.qtcl_qty, d.sjcl_qty]);
-                }
-                updateBills.quantity = this.ctx.helper.sum([updateBills.sgfh_qty, updateBills.qtcl_qty, updateBills.sjcl_qty]);
-                const info = this.ctx.tender.info;
-                updateBills.sgfh_tp = this.ctx.helper.mul(updateBills.sgfh_qty, bills.unit_price, info.decimal.tp);
-                updateBills.sjcl_tp = this.ctx.helper.mul(updateBills.sjcl_qty, bills.unit_price, info.decimal.tp);
-                updateBills.qtcl_tp = this.ctx.helper.mul(updateBills.qtcl_qty, bills.unit_price, info.decimal.tp);
-                updateBills.total_price = this.ctx.helper.mul(updateBills.quantity, bills.unit_price, info.decimal.tp);
-            }
 
             const transaction = await this.db.beginTransaction();
             try {
                 if (insertPos.length > 0) await transaction.insert(this.ctx.service.pos.tableName, insertPos);
-                if (updateBills) await transaction.update(this.ctx.service.ledger.tableName, updateBills);
                 if (insertPosStage.length > 0) await transaction.insert(this.tableName, insertPosStage);
 
                 for (const lid of calcStageBills) {
@@ -489,7 +463,7 @@ module.exports = app => {
          */
         async _deleteStagePosData(data) {
             const pos = await this.ctx.service.pos.getPosData({tid: this.ctx.tender.id, id: data});
-            const result = { pos: data, isDeletePos: true};
+            const result = { pos: data, isDeletePos: true };
             if (pos instanceof Array) {
                 for (const p of pos) {
                     if (p.add_stage !== this.ctx.stage.id /*|| p.add_times !== this.ctx.stage.curTimes || p.add_user !== this.ctx.session.sessionUser.accountId*/) {
@@ -502,33 +476,17 @@ module.exports = app => {
             } else if (pos.add_stage !== this.ctx.stage.id /*|| pos.add_times !== this.ctx.stage.curTimes || pos.add_user !== this.ctx.session.sessionUser.accountId*/) {
                 throw '不可删除该数据';
             }
-            const bills = await this.ctx.service.ledger.getDataById(pos[0].lid);
-            const billsPos = await this.ctx.service.pos.getAllDataByCondition({ where: {tid: bills.tender_id, lid: bills.id} });
-            const updateBills = {id: bills.id, sgfh_qty: null, sjcl_qty: null, qtcl_qty: null, quantity: null};
-            for (const bp of billsPos) {
-                if (data.indexOf(bp.id) >= 0) continue;
-                updateBills.sgfh_qty = this.ctx.helper.add(updateBills.sgfh_qty, bp.sgfh_qty);
-                updateBills.sjcl_qty = this.ctx.helper.add(updateBills.sjcl_qty, bp.sjcl_qty);
-                updateBills.qtcl_qty = this.ctx.helper.add(updateBills.qtcl_qty, bp.qtcl_qty);
-                updateBills.quantity = this.ctx.helper.add(updateBills.quantity, bp.quantity);
-            }
-            const info = this.ctx.tender.info;
-            updateBills.sgfh_tp = this.ctx.helper.mul(updateBills.sgfh_qty, bills.unit_price, info.decimal.tp);
-            updateBills.sjcl_tp = this.ctx.helper.mul(updateBills.sjcl_qty, bills.unit_price, info.decimal.tp);
-            updateBills.qtcl_tp = this.ctx.helper.mul(updateBills.qtcl_qty, bills.unit_price, info.decimal.tp);
-            updateBills.total_price = this.ctx.helper.mul(updateBills.quantity, bills.unit_price, info.decimal.tp);
 
             const transaction = await this.db.beginTransaction();
             try {
                 // 删除部位明细
                 await transaction.delete(this.ctx.service.pos.tableName, {tid: this.ctx.tender.id, id: data});
-                await transaction.update(this.ctx.service.ledger.tableName, updateBills);
                 // 删除部位明细计量数据
                 await transaction.delete(this.tableName, {tid: this.ctx.tender.id, lid: data});
-                await this.ctx.service.stageBills.calc(this.ctx.tender.id, this.ctx.stage.id, bills.id, transaction);
+                await this.ctx.service.stageBills.calc(this.ctx.tender.id, this.ctx.stage.id, pos[0].lid, transaction);
                 await transaction.commit();
                 // 获取需要更新的数据
-                result.ledger = [bills.id];
+                result.ledger = [pos[0].lid];
                 result.stageUpdate = true;
                 return result;
             } catch (err) {

+ 8 - 6
app/view/change/apply.ejs

@@ -66,19 +66,19 @@
                 <table class="table table-bordered">
                     <thead>
                     <tr>
-                        <th width="20%" id="sort_change">变更申请编号</th><th width="10%">创建人</th>
-                        <th width="10%">创建时间</th><th width="10%">状态</th><th width="15%">立项编号</th>
-                        <th width="15%">变更通知书</th><th width="10%">通知书发出人</th><th width="10%">操作</th>
+                        <th width="15%" id="sort_change">变更申请编号</th><th width="20%">变更工程名称</th>
+                        <th width="10%">创建时间</th><th width="15%">变更立项书</th><th width="15%">变更通知书</th>
+                        <th width="10%">通知书发出人</th><th width="5%">审批状态</th><th width="10%">操作</th>
                     </tr>
                     </thead>
                     <tbody id="changeList">
                     <% for (const c of changes) { %>
-                        <tr><td><a href="/tender/<%- tender.id %>/change/apply/<%- c.id %>/information"><%- c.code %></a></td>
-                            <td><%- apply_username %></td><td><%- ctx.helper.formatFullDate(c.in_time) %></td>
-                            <td><span class="<%- auditConst.statusClass[c.status] %>"><%- auditConst.statusString[c.status] %></span></td>
+                        <tr><td><a href="/tender/<%- tender.id %>/change/apply/<%- c.id %>/information"><%- c.code %></a></td><td><%- c.name %></td>
+                            <td><%- ctx.helper.formatFullDate(c.in_time) %></td>
                             <td><%- c.project_code %></td>
                             <td><% if (c.notice_code) { %><a href="/tender/<%- tender.id %>/change/apply/<%- c.id %>/information/notice"><%- c.notice_code %></a><% } %></td>
                             <td><%- c.account_name %></td>
+                            <td><span class="<%- auditConst.statusClass[c.status] %>"><%- auditConst.statusString[c.status] %></span></td>
                             <td>
                                 <% if ((c.status === auditConst.status.uncheck || c.status === auditConst.status.checkNo) && c.uid === ctx.session.sessionUser.accountId) { %>
                                     <a href="/tender/<%- tender.id %>/change/apply/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
@@ -106,5 +106,7 @@
     let connectorRule = '<%- c_connector %>';
     const cRuleFirst = parseInt('<%- c_rule_first %>');
     const ruleType = parseInt('<%- ruleType %>');
+    const openChangeProject = parseInt('<%- ctx.session.sessionProject.page_show.openChangeProject %>');
     const rulesType = '<%- rule_type %>';
+    const changeProjectList = JSON.parse(unescape('<%- escape(JSON.stringify(changeProjectList)) %>'));
 </script>

+ 14 - 5
app/view/change/apply_information.ejs

@@ -5,7 +5,7 @@
             <% include ../tender/tender_sub_mini_menu.ejs %>
             <div>
                 <div class="d-inline-block">
-                    <a href="/tender/<%- tender.id %>/change/apply"><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
+                    <a <% if (returnUrl) { %>href="<%- returnUrl %>"<% } else { %>class="change_apply_sort_link" href="/tender/<%- tender.id %>/change/apply"<% } %>><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
                 </div>
                 <div class="d-inline-block" id="change-apply-code">
                     <%- change.code %>
@@ -28,7 +28,7 @@
                 <% } else if (ctx.change.status === auditConst.status.checked) { %>
                     <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-success btn-sm">审批完成</a>
                 <% } else if (ctx.change.status === auditConst.status.checkNo) { %>
-                    <a href="#sp-list"  data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-muted sp-list-btn">审批退回</a>
+                    <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-muted sp-list-btn">审批退回</a>
                     <% if (ctx.session.sessionUser.accountId === ctx.change.uid) { %>
                         <a href="#sp-list" data-type="show" data-toggle="modal" data-target="#sp-list"  class="btn btn-primary btn-sm sp-list-btn">重新上报</a>
                     <% } %>
@@ -65,7 +65,7 @@
                             <td><input class="form-control form-control-sm" value="<%- change.c_new_code %>" data-name="c_new_code" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center" style="vertical-align: middle">变更意向编号</th>
+                            <th width="" class="text-center" style="vertical-align: middle">变更立项编号</th>
                             <td><input class="form-control form-control-sm" value="<%- change.project_code %>" data-name="project_code" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder="自动读取,没有就为空,可编辑"></td>
                             <th width="" class="text-center" style="vertical-align: middle">原工程造价(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.org_price %>" data-name="org_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
@@ -78,7 +78,16 @@
                         </tr>
                         <tr>
                             <th width="" class="text-center" style="vertical-align: middle">工程变更性质</th>
-                            <td><input class="form-control form-control-sm" type="text" value="<%- change.quality %>" data-name="quality" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
+                            <% if (change.readOnly) { %>
+                            <td><input class="form-control form-control-sm" type="text" value="<%- change.quality %>" data-name="quality" readonly placeholder=""></td>
+                            <% } else { %>
+                            <td><select class="form-control form-control-sm" name="quality" data-name="quality" <% if (change.readOnly) { %>readonly<% } %>>
+                                <% for (const q in changeConst.quality) { %>
+                                    <% const cQuality = changeConst.quality[q] %>
+                                    <option <% if (cQuality.name === change.quality) { %> selected<% } %>><%- cQuality.name %></option>
+                                <% } %>
+                            </select></td>
+                            <% } %>
                             <th width="" class="text-center" style="vertical-align: middle">工程造价增减(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.crease_price %>" data-name="crease_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
@@ -95,7 +104,7 @@
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="site_content" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.site_content %></textarea></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center" style="vertical-align: middle">内容摘要</th>
+                            <th width="" class="text-center" style="vertical-align: middle">变更内容</th>
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="content" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.content %></textarea></td>
                         </tr>
                     </table>

+ 10 - 2
app/view/change/apply_information_modal.ejs

@@ -103,7 +103,7 @@
     <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title"><%- ctx.change.status === auditConst.status.checking ? '审批流程' : '重新上报' %></h5>
+                <h5 class="modal-title"><%- ctx.change.status !== auditConst.status.checkNo ? '审批流程' : '重新上报' %></h5>
             </div>
             <div class="modal-body">
                 <div class="row">
@@ -394,6 +394,14 @@
                                                                             <label>审批意见<b class="text-danger">*</b></label>
                                                                             <textarea class="form-control form-control-sm"
                                                                                       name="opinion">同意</textarea>
+                                                                            <% if (auditors[auditors.length - 1].aid === auditor.aid) { %>
+                                                                                <!--终审填写批复编号-->
+                                                                                <div class="form-group mt-3">
+                                                                                    <label>变更通知书<b class="text-danger">*&nbsp;</b></label>
+                                                                                    <input class="form-control form-control-sm" value="BGTZ-<%- change.code %>" name="notice_code" type="text">
+                                                                                    <input type="hidden" name="notice_uid" value="<%- auditor.aid %>">
+                                                                                </div>
+                                                                            <% } %>
                                                                         <% } else { %>
                                                                             <p style="margin: 0;"><%- auditor.opinion %></p>
                                                                         <% } %>
@@ -450,7 +458,7 @@
                                                                             <% if (auditors[auditors.length - 1].aid === auditor.aid) { %>
                                                                             <!--终审填写批复编号-->
                                                                             <div class="form-group mt-3">
-                                                                                <label><b class="text-danger">*&nbsp;</b>变更通知书</label>
+                                                                                <label>变更通知书<b class="text-danger">*&nbsp;</b></label>
                                                                                 <input class="form-control form-control-sm" value="BGTZ-<%- change.code %>" name="notice_code" type="text">
                                                                                 <input type="hidden" name="notice_uid" value="<%- auditor.aid %>">
                                                                             </div>

+ 11 - 11
app/view/change/apply_information_notice.ejs

@@ -5,7 +5,7 @@
             <% include ../tender/tender_sub_mini_menu.ejs %>
             <div>
                 <div class="d-inline-block">
-                    <a href="/tender/<%- tender.id %>/change/apply"><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
+                    <a <% if (returnUrl) { %>href="<%- returnUrl %>"<% } else { %>class="change_apply_sort_link" href="/tender/<%- tender.id %>/change/apply"<% } %>><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
                 </div>
                 <div class="d-inline-block" id="change-apply-code">
                     <%- change.code %>
@@ -25,33 +25,33 @@
                     <h4 class="text-center py-2">工程变更通知书</h4>
                     <table class="table table-bordered" id="apply-table">
                         <tr>
-                            <th width="" class="text-center">项目名称</th>
+                            <th width="" class="text-center" style="vertical-align: middle">项目名称</th>
                             <td colspan="3"><input class="form-control form-control-sm" value="<%- ctx.tender.info.deal_info.buildName %>" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center">工程变更名称</th>
+                            <th width="120" class="text-center" style="vertical-align: middle">变更工程名称</th>
                             <td><input class="form-control form-control-sm" value="<%- change.name %>" data-name="name" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
-                            <th width="140" class="text-center">编号</th>
-                            <td><input class="form-control form-control-sm" type="text" value="<%- ctx.tender.info.deal_info.dealCode %>" data-name="peg" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
+                            <th width="140" class="text-center" style="vertical-align: middle">变更通知书编号</th>
+                            <td><input class="form-control form-control-sm" type="text" value="<%- change.notice_code %>" data-name="peg" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center">承包人</th>
+                            <th width="" class="text-center" style="vertical-align: middle">承包人</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- ctx.tender.info.construction_unit.contract1.company %>" data-name="class" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
-                            <th width="" class="text-center">合同段</th>
+                            <th width="" class="text-center" style="vertical-align: middle">合同段</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- ctx.tender.info.deal_info.dealName %>" data-name="change_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center">桩号</th>
+                            <th width="" class="text-center" style="vertical-align: middle">桩号</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.peg %>" data-name="peg" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
-                            <th width="" class="text-center">工程造价增减(元)</th>
+                            <th width="" class="text-center" style="vertical-align: middle">工程造价增减(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.crease_price %>" data-name="crease_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center">变更原因</th>
+                            <th width="" class="text-center" style="vertical-align: middle">变更原因</th>
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="reason" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.reason %></textarea></td>
                         </tr>
                         <tr>
-                            <th width="" class="text-center">变更内容</th>
+                            <th width="" class="text-center" style="vertical-align: middle">变更内容</th>
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="content" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.content %></textarea></td>
                         </tr>
                     </table>

+ 11 - 3
app/view/change/apply_modal.ejs

@@ -24,7 +24,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">添加变更申请</h5>
+                <h5 class="modal-title">新建变更申请</h5>
             </div>
             <div class="modal-body">
                 <div class="form-group">
@@ -43,17 +43,25 @@
                     <select class="form-control form-control-sm" id="project-code">
                         <option></option>
                         <% for (const cp of changeProjectList) { %>
+                        <% if (ctx.helper._.indexOf(pcLists, cp.code) === -1) { %>
                         <option><%- cp.code %></option>
                         <% } %>
+                        <% } %>
                     </select>
                 </div>
+                <input value="" type="hidden" id="bj-name">
                 <% } else { %>
-                    <input type="hidden" value="" id="project-code">
+                <div class="form-group">
+                    <label>变更工程名称<b class="text-danger">*</b></label>
+                    <input class="form-control form-control-sm" value="" type="text" id="bj-name">
+                    <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
+                </div>
+                <input type="hidden" value="" id="project-code">
                 <% } %>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
-                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认添加</a>
+                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认新建</a>
             </div>
         </div>
     </div>

+ 1 - 1
app/view/change/index.ejs

@@ -72,7 +72,7 @@
                 <table class="table table-bordered">
                     <thead>
                     <tr>
-                        <th width="20%" id="sort_change">申请编号/变更令号</th><th width="30%">工程名称</th>
+                        <th width="20%" id="sort_change">申请编号/变更令号</th><th width="30%">变更工程名称</th>
                         <th width="10%">变更性质</th><th width="10%">变更金额</th>
                         <th width="10%">审批状态</th><th width="15%">审批进度</th><th></th>
                     </tr>

+ 1 - 1
app/view/change/info_modal.ejs

@@ -1012,7 +1012,7 @@
             <div style="height: 300px; overflow: scroll; overflow-x: hidden;">
                 <table class="table table-bordered" >
                     <thead>
-                        <tr align="center"><th>申请编号/变更令号</th><th>工程名称</th><th>变更类别</th><th>变更金额</th><th>审批状态</th><th>选择</th></tr>
+                        <tr align="center"><th>申请编号/变更令号</th><th>变更工程名称</th><th>变更类别</th><th>变更金额</th><th>审批状态</th><th>选择</th></tr>
                     </thead>
                     <tbody >
                         <% othersChange.forEach(change => { %>

+ 8 - 8
app/view/change/information.ejs

@@ -115,7 +115,7 @@
                                     <input class="form-control form-control-sm" name="code" value="<%- change.code %>" type="text">
                                 </div>
                                 <div class="form-group">
-                                    <label><b class="text-danger">*&nbsp;</b>工程名称</label>
+                                    <label><b class="text-danger">*&nbsp;</b>变更工程名称</label>
                                     <input class="form-control form-control-sm" name="name" value="<%- change.name %>" type="text">
                                 </div>
                                 <div class="form-group">
@@ -155,7 +155,7 @@
                                     <textarea class="form-control form-control-sm" name="memo" rows="3"><%- ctx.helper.replaceStr(change.memo, /<br><br>/g, '\r\n') %></textarea>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更类型</label>
+                                    <label>工程变更类型</label>
                                     <div class="checkbox">
                                         <% const changeType = change.type !== null && change.type !== '' ? change.type.split(',') : '' %>
                                         <% for (const t in changeConst.type) { %>
@@ -168,7 +168,7 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更类别 </label>
+                                    <label>工程变更类别 </label>
                                     <select class="form-control form-control-sm" name="class">
                                         <% for (const c in changeConst.class) { %>
                                             <% const cClass = changeConst.class[c] %>
@@ -177,7 +177,7 @@
                                     </select>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更性质 </label>
+                                    <label>工程变更性质 </label>
                                     <select class="form-control form-control-sm" name="quality">
                                         <% for (const q in changeConst.quality) { %>
                                             <% const cQuality = changeConst.quality[q] %>
@@ -223,7 +223,7 @@
                                     </div>
                                 <% } %>
                                 <div class="form-group">
-                                    <label>工程名称</label>
+                                    <label>变更工程名称</label>
                                     <input class="form-control form-control-sm" value="<%- change.name %>" type="text" readonly>
                                 </div>
                                 <div class="form-group">
@@ -263,7 +263,7 @@
                                     <textarea class="form-control form-control-sm" rows="3" readonly><%- ctx.helper.replaceStr(change.memo, /<br><br>/g, '\r\n') %></textarea>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更类型</label>
+                                    <label>工程变更类型</label>
                                     <div class="checkbox">
                                         <% const changeType = change.type !== null && change.type !== '' ? change.type.split(',') : '' %>
                                         <% for (const t in changeConst.type) { %>
@@ -277,7 +277,7 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更类别 </label>
+                                    <label>工程变更类别 </label>
                                     <select class="form-control form-control-sm" disabled>
                                         <% for (const c in changeConst.class) { %>
                                             <% const cClass = changeConst.class[c] %>
@@ -288,7 +288,7 @@
                                     </select>
                                 </div>
                                 <div class="form-group">
-                                    <label>变更性质 </label>
+                                    <label>工程变更性质 </label>
                                     <select class="form-control form-control-sm" disabled>
                                         <% for (const q in changeConst.quality) { %>
                                             <% const cQuality = changeConst.quality[q] %>

+ 1 - 1
app/view/change/information_modal.ejs

@@ -1085,7 +1085,7 @@
                 <div style="height: 300px; overflow: scroll; overflow-x: hidden;">
                     <table class="table table-bordered" >
                         <thead>
-                        <tr align="center"><th>申请编号/变更令号</th><th>工程名称</th><th>变更类别</th><th>变更金额</th><th>审批状态</th><th>选择</th></tr>
+                        <tr align="center"><th>申请编号/变更令号</th><th>变更工程名称</th><th>变更类别</th><th>变更金额</th><th>审批状态</th><th>选择</th></tr>
                         </thead>
                         <tbody >
                         <% othersChange.forEach(change => { %>

+ 3 - 3
app/view/change/modal.ejs

@@ -24,7 +24,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">添加变更令</h5>
+                <h5 class="modal-title">新建变更令</h5>
             </div>
             <div class="modal-body">
                 <div class="form-group">
@@ -38,14 +38,14 @@
                     </div>
                 </div>
                 <div class="form-group">
-                    <label>工程名称<b class="text-danger">*</b></label>
+                    <label>变更工程名称<b class="text-danger">*</b></label>
                     <input class="form-control form-control-sm" value="" type="text" id="bj-name">
                     <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
                 </div>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
-                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认添加</a>
+                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认新建</a>
             </div>
         </div>
     </div>

+ 2 - 2
app/view/change/project.ejs

@@ -66,9 +66,9 @@
                 <table class="table table-bordered">
                     <thead>
                     <tr>
-                        <th width="20%" id="sort_change">变更立项书编号</th><th width="30%">变更立项书名称</th>
+                        <th width="20%" id="sort_change">变更立项书编号</th><th width="30%">变更工程名称</th>
                         <th width="10%">发起人</th><th width="10%">发起类型</th><th width="10%">发起时间</th>
-                        <th width="10%">状态</th><th width="10%">操作</th>
+                        <th width="10%">审批状态</th><th width="10%">操作</th>
                     </tr>
                     </thead>
                     <tbody id="changeList">

+ 24 - 15
app/view/change/project_information.ejs

@@ -5,7 +5,7 @@
             <% include ../tender/tender_sub_mini_menu.ejs %>
             <div>
                 <div class="d-inline-block">
-                    <a href="/tender/<%- tender.id %>/change/project"><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
+                    <a <% if (returnUrl) { %>href="<%- returnUrl %>"<% } else { %>class="change_project_sort_link" href="/tender/<%- tender.id %>/change/project"<% } %>><i class="fa fa-chevron-left mr-2"></i><span>返回</span></a>
                 </div>
                 <div class="d-inline-block" id="change-project-code">
                     <%- change.code %>
@@ -30,7 +30,7 @@
                 <% } else if (ctx.change.status === auditConst.status.checked) { %>
                     <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm">审批完成</a>
                 <% } else if (ctx.change.status === auditConst.status.back) { %>
-                    <a href="#sp-list"  data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-muted sp-list-btn">审批退回</a>
+                    <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-muted sp-list-btn">审批退回</a>
                     <% if (ctx.session.sessionUser.accountId === ctx.change.uid) { %>
                         <a href="#sp-list" data-type="show" data-toggle="modal" data-target="#sp-list"  class="btn btn-primary btn-sm sp-list-btn">重新上报</a>
                     <% } %>
@@ -47,45 +47,54 @@
                     <h4 class="text-center py-2"><%- changeConst.project_type[change.type] %>报告书</h4>
                     <table class="table table-bordered" id="project-table">
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">立项编号<b class="text-danger">*&nbsp;</b></th>
+                            <th width="140" class="text-center" style="vertical-align: middle">立项编号<b class="text-danger">*&nbsp;</b></th>
                             <td><input class="form-control form-control-sm" value="<%- change.code %>" data-name="code" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">变更工程名称<b class="text-danger">*&nbsp;</b></th>
+                            <th width="140" class="text-center" style="vertical-align: middle">变更工程名称<b class="text-danger">*&nbsp;</b></th>
                             <td colspan="3"><input class="form-control form-control-sm" value="<%- change.name %>" data-name="name" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">原设计图名称</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">原设计图名称</th>
                             <td  colspan="3"><input class="form-control form-control-sm" value="<%- change.org_name %>" data-name="org_name" <% if (change.readOnly) { %>readonly<% } %> type="text" placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">桩号</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">桩号</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.peg %>" data-name="peg" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
-                            <th width="120" class="text-center" style="vertical-align: middle">图号</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">图号</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.new_code %>" data-name="new_code" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">工程变更类别</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">工程变更类别</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.class %>" data-name="class" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
-                            <th width="120" class="text-center" style="vertical-align: middle">工程变更性质</th>
-                            <td><input class="form-control form-control-sm" type="text" value="<%- change.quality %>" data-name="quality" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
+                            <th width="140" class="text-center" style="vertical-align: middle">工程变更性质</th>
+                            <% if (change.readOnly) { %>
+                            <td><input class="form-control form-control-sm" type="text" value="<%- change.quality %>" data-name="quality" readonly placeholder=""></td>
+                            <% } else { %>
+                            <td><select class="form-control form-control-sm" name="quality" data-name="quality" <% if (change.readOnly) { %>readonly<% } %>>
+                            <% for (const q in changeConst.quality) { %>
+                                <% const cQuality = changeConst.quality[q] %>
+                                <option <% if (cQuality.name === change.quality) { %> selected<% } %>><%- cQuality.name %></option>
+                            <% } %>
+                            </select></td>
+                            <% } %>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">原工程造价(元)</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">原工程造价(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.org_price %>" data-name="org_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">预计变更造价(元)</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">预计变更造价(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.change_price %>" data-name="change_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
-                            <th width="120" class="text-center" style="vertical-align: middle">预计造价增减(元)</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">预计造价增减(元)</th>
                             <td><input class="form-control form-control-sm" type="text" value="<%- change.crease_price %>" data-name="crease_price" <% if (change.readOnly) { %>readonly<% } %> placeholder=""></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">变更原因<b class="text-danger">*&nbsp;</b></th>
+                            <th width="140" class="text-center" style="vertical-align: middle">变更原因<b class="text-danger">*&nbsp;</b></th>
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="reason" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.reason %></textarea></td>
                         </tr>
                         <tr>
-                            <th width="120" class="text-center" style="vertical-align: middle">内容摘要</th>
+                            <th width="140" class="text-center" style="vertical-align: middle">变更内容</th>
                             <td colspan="3"><textarea class="form-control form-control-sm" data-name="content" <% if (change.readOnly) { %>readonly<% } %> rows="3"><%- change.content %></textarea></td>
                         </tr>
                     </table>

+ 5 - 9
app/view/change/project_information_modal.ejs

@@ -93,7 +93,7 @@
     <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title"><%- ctx.change.status === auditConst.status.checking ? '审批流程' : '重新上报' %></h5>
+                <h5 class="modal-title"><%- ctx.change.status !== auditConst.status.back ? '审批流程' : '重新上报' %></h5>
             </div>
             <div class="modal-body">
                 <div class="row">
@@ -755,7 +755,7 @@
                         <span class="dropdown">
                         <a href="javascript:void(0)" class="btn-sm text-danger px-1" title="移除" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-remove"></i></a>
                         <div class="dropdown-menu">
-                          <a class="dropdown-item" href="javascript:void(0);">确认移除审人?</a>
+                          <a class="dropdown-item" href="javascript:void(0);">确认移除审人?</a>
                           <div class="dropdown-divider"></div>
                           <div class="px-2 py-1 text-center">
                             <button class="btn btn-sm btn-danger" aid="<%- xs.aid %>">移除</button>
@@ -776,14 +776,10 @@
         </div>
     </div>
 </div>
-<% if (ctx.session.sessionUser.accountId === ctx.change.uid && (ctx.change.status === auditConst.status.uncheck || ctx.change.status === auditConst.status.back)) { %>
-    <script>
-        const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
-        const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
-    </script>
-<% } %>
-<script>const cur_uid = parseInt('<%- ctx.session.sessionUser.accountId %>');</script>
 <script>
+    const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
+    const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
+    const cur_uid = parseInt('<%- ctx.session.sessionUser.accountId %>');
     $('.sp-location-list').on('shown.bs.modal', function () {
         const scrollBox = $(this).find('div[class="col-8 modal-height-500"]');
         const bdiv = (scrollBox.offset() && scrollBox.offset().top) || 0;

+ 2 - 2
app/view/change/project_modal.ejs

@@ -24,7 +24,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">添加变更立项书</h5>
+                <h5 class="modal-title">新建变更立项书</h5>
             </div>
             <div class="modal-body">
                 <div class="form-group">
@@ -61,7 +61,7 @@
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
-                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认添加</a>
+                <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认新建</a>
             </div>
         </div>
     </div>

+ 1 - 1
app/view/layout/menu.ejs

@@ -1,5 +1,5 @@
 <div class="main-nav d-flex align-items-start flex-column">
-    <div class="logo"><img src="/public/css/logo.png"></div>
+    <div class="logo"><img class="w-100" style="padding: 5px" src="/public/css/logo.png"></div>
     <div class="nav-top">
         <ul class="nav nav-pills nav-stacked bg-nav">
             <% if (maintainData.status !== maintainConst.status.notset && new Date().getTime() + (60*60*1000) > parseFloat(maintainData.maintain_time)) { %>

+ 1 - 0
app/view/ledger/gather.ejs

@@ -66,6 +66,7 @@
     </div>
 </div>
 <script>
+    const isTz = <%- ctx.tender.data.measure_type === measureType.tz.value %>;
     const chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
     const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 8 - 0
app/view/report/index.ejs

@@ -673,5 +673,13 @@
 
     //const STD_TXT_WIDTH = getStdTxtWidthByFont(document.getElementById("rptCanvas").getContext('2d')); //这个可以给后台用(if need it)
 
+
+    $(document).ready(() => {
+        const node = zTreeOprObj.treeObj.getNodeByParam('refId', <%- rpt_id %>);
+        if (!node) return;
+
+        zTreeOprObj.treeObj.selectNode(node);
+        zTreeOprObj.onClick(null, null, node);
+    });
 </script>
 

+ 1 - 0
app/view/revise/gcl_compare.ejs

@@ -74,6 +74,7 @@
     </div>
 </div>
 <script>
+    const isTz = <%- ctx.tender.data.measure_type === measureType.tz.value %>;
     const chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
     const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

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

@@ -40,7 +40,7 @@
                 </li>
             </ul>
         </div>
-        <% if (ctx.session.sessionProject.page_show.bwtz) { %>
+        <% if (ctx.tender.data.measure_type === 1 && ctx.session.sessionProject.page_show.bwtz) { %>
         <div class="nav-box">
             <ul class="nav-list list-unstyled">
                 <li class="<% if (ctx.url === '/tender/' + ctx.tender.id + '/measure/stage/' + ctx.stage.order + '/bwtz') { %>active<% } %>">

+ 3 - 1
app/view/tender/tender_sub_menu.ejs

@@ -21,7 +21,9 @@
                 <% if (ctx.tender.data.ledger_status !== ctx.tender.auditLedgerConst.status.uncheck) { %>
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/audit') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/audit"><span>台账审批</span></a></li>
                 <% } %>
-                <% if (ctx.session.sessionProject.page_show !== null && parseInt(ctx.session.sessionProject.page_show.bwtz) === 1) { %><li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/bwtz') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/bwtz"><span>部位台账</span></a></li><% } %>
+                <% if (ctx.tender.data.measure_type === 1 && ctx.session.sessionProject.page_show !== null && parseInt(ctx.session.sessionProject.page_show.bwtz) === 1) { %>
+                <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/bwtz') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/bwtz"><span>部位台账</span></a></li>
+                <% } %>
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/ledger/gather') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/ledger/gather"><span>清单对比</span></a></li>
                 <li <% if (ctx.url.indexOf('/tender/' + ctx.tender.id + '/revise') >= 0) { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/revise"><span>台账修订</span></a></li>
             </ul>

+ 1 - 1
app/view/wap/shenpi_change.ejs

@@ -61,7 +61,7 @@
                         <input class="form-control form-control-sm" type="text" value="<%- change.p_code %>" readonly="">
                     </div>
                     <div class="form-group">
-                        <label>工程名称</label>
+                        <label>变更工程名称</label>
                         <input class="form-control form-control-sm" value="<%- change.name %>" type="text" readonly="">
                     </div>
                     <div class="form-group">

+ 2 - 2
config/config.default.js

@@ -229,7 +229,7 @@ module.exports = appInfo => {
     config.syncUrl = 'http://sync.jl.smartcost.com.cn/';
 
     // 项目管理跳转路径
-    config.managementPath = 'http://pm.smartcost.com.cn';
-    config.managementProxyPath = 'http://pm.smartcost.com.cn';
+    config.managementPath = 'https://pm.smartcost.com.cn';
+    config.managementProxyPath = 'https://pm.smartcost.com.cn';
     return config;
 };

+ 16 - 0
dev4gcl.js

@@ -0,0 +1,16 @@
+
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+const fs = require('fs');
+const packageJSON = JSON.parse(fs.readFileSync(__dirname + '/package.json', 'utf8'));
+packageJSON.name = 'calc_gcl' ;
+packageJSON.scripts['start-qa-gcl'] = "egg-scripts start --daemon --port 7006";
+fs.writeFileSync(__dirname + '/package.json', JSON.stringify(packageJSON, '', '\t'));

+ 1 - 0
package.json

@@ -68,6 +68,7 @@
         "start": "egg-scripts start --daemon --port 7002",
         "stop": "egg-scripts stop",
         "start-qa": "set EGG_SERVER_ENV=qa&&egg-scripts start --daemon --port 7002",
+        "start-qa-gcl": "set EGG_SERVER_ENV=qa&&egg-scripts start --daemon --port 7006",
         "dev": "egg-bin dev --port 7002",
         "dev-local": "set EGG_SERVER_ENV=local&&egg-bin dev --port 7002",
         "dev-remoteqa": "set EGG_SERVER_ENV=remoteqa&&egg-bin dev --port 7002",