Kaynağa Gözat

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

TonyKang 5 yıl önce
ebeveyn
işleme
92f794f24e
100 değiştirilmiş dosya ile 2451 ekleme ve 1244 silme
  1. 53 23
      app/const/spread.js
  2. 18 6
      app/controller/material_controller.js
  3. 1 1
      app/controller/revise_controller.js
  4. 67 26
      app/controller/tender_controller.js
  5. 0 1
      app/middleware/auto_logger.js
  6. 164 0
      app/public/css/main.css
  7. 4 2
      app/public/js/bootstrap/bootstrap-paginator.js
  8. 1 1
      app/public/js/category.js
  9. 65 54
      app/public/js/global.js
  10. 75 45
      app/public/js/ledger.js
  11. 6 2
      app/public/js/ledger_audit.js
  12. 1 1
      app/public/js/ledger_search.js
  13. 17 10
      app/public/js/material.js
  14. 91 41
      app/public/js/material_list.js
  15. 6 2
      app/public/js/measure_compare.js
  16. 99 67
      app/public/js/revise.js
  17. 4 2
      app/public/js/revise_history.js
  18. 1 0
      app/public/js/setting.js
  19. 269 63
      app/public/js/spreadjs_rela/spreadjs_zh.js
  20. 35 23
      app/public/js/stage.js
  21. 15 9
      app/public/js/stage_change.js
  22. 6 2
      app/public/js/stage_detail.js
  23. 10 6
      app/public/js/stage_pay.js
  24. 15 3
      app/public/js/tender.js
  25. 12 48
      app/public/js/tender_list.js
  26. 431 0
      app/public/js/tender_list_info.js
  27. 3 1
      app/router.js
  28. 3 1
      app/service/ledger.js
  29. 2 2
      app/service/ledger_revise.js
  30. 22 7
      app/service/material.js
  31. 14 6
      app/service/material_audit.js
  32. 132 32
      app/service/material_list.js
  33. 1 1
      app/service/pos.js
  34. 9 8
      app/service/revise_pos.js
  35. 28 1
      app/service/stage_bills.js
  36. 30 2
      app/service/stage_pos.js
  37. 7 7
      app/view/boot/index.ejs
  38. 5 5
      app/view/change/bills_modal.ejs
  39. 5 5
      app/view/change/file_modal.ejs
  40. 48 46
      app/view/change/index.ejs
  41. 33 35
      app/view/change/info.ejs
  42. 29 29
      app/view/change/info_modal.ejs
  43. 15 15
      app/view/change/modal.ejs
  44. 0 1
      app/view/layout/layout.ejs
  45. 6 6
      app/view/layout/modal.ejs
  46. 2 21
      app/view/layout/page.ejs
  47. 2 2
      app/view/layout/project_list.ejs
  48. 1 1
      app/view/layout/tender_list.ejs
  49. 6 6
      app/view/ledger/audit.ejs
  50. 7 7
      app/view/ledger/audit_modal.ejs
  51. 6 6
      app/view/ledger/explode.ejs
  52. 15 15
      app/view/ledger/explode_modal.ejs
  53. 6 6
      app/view/login/login.ejs
  54. 15 15
      app/view/material/audit_modal.ejs
  55. 47 45
      app/view/material/index.ejs
  56. 13 11
      app/view/material/info.ejs
  57. 1 1
      app/view/material/list.ejs
  58. 4 4
      app/view/material/list_modal.ejs
  59. 6 6
      app/view/material/modal.ejs
  60. 3 3
      app/view/measure/audit.ejs
  61. 7 7
      app/view/measure/audit_modal.ejs
  62. 1 1
      app/view/measure/compare.ejs
  63. 2 2
      app/view/measure/compare_modal.ejs
  64. 55 53
      app/view/measure/stage.ejs
  65. 13 13
      app/view/measure/stage_modal.ejs
  66. 28 28
      app/view/measure/wlist_modal.ejs
  67. 3 3
      app/view/measure/work.ejs
  68. 24 24
      app/view/measure/work_modal.ejs
  69. 1 1
      app/view/profile/info.ejs
  70. 1 1
      app/view/profile/safe.ejs
  71. 1 1
      app/view/profile/sign.ejs
  72. 7 7
      app/view/profile/sms.ejs
  73. 1 1
      app/view/report/index.ejs
  74. 17 17
      app/view/report/rpt_all_popup.ejs
  75. 4 4
      app/view/report/rpt_content_format.ejs
  76. 4 4
      app/view/revise/history.ejs
  77. 51 49
      app/view/revise/index.ejs
  78. 17 17
      app/view/revise/info.ejs
  79. 20 16
      app/view/revise/info_modal.ejs
  80. 6 6
      app/view/revise/modal.ejs
  81. 12 12
      app/view/setting/category_modal.ejs
  82. 4 4
      app/view/setting/info.ejs
  83. 27 23
      app/view/setting/user_modal.ejs
  84. 14 14
      app/view/setting/user_permission_modal.ejs
  85. 34 34
      app/view/stage/audit_modal.ejs
  86. 1 1
      app/view/stage/compare.ejs
  87. 3 3
      app/view/stage/compare_modal.ejs
  88. 3 3
      app/view/stage/deal.ejs
  89. 21 21
      app/view/stage/deal_modal.ejs
  90. 3 3
      app/view/stage/detail.ejs
  91. 10 10
      app/view/stage/detail_modal.ejs
  92. 1 1
      app/view/stage/gather.ejs
  93. 15 15
      app/view/stage/index.ejs
  94. 15 15
      app/view/stage/measure_modal.ejs
  95. 9 9
      app/view/stage/modal.ejs
  96. 2 2
      app/view/stage/pay.ejs
  97. 8 8
      app/view/stage/pay_modal.ejs
  98. 1 1
      app/view/stage/report.ejs
  99. 13 13
      app/view/stage/report_modal.ejs
  100. 0 0
      app/view/stage/stage_sub_menu.ejs

+ 53 - 23
app/const/spread.js

@@ -39,8 +39,10 @@ const withCl = {
         ],
         emptyRows: 3,
         headRows: 2,
-        headRowHeight: [35, 35],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     },
     pos: {
         cols: [
@@ -53,8 +55,10 @@ const withCl = {
         ],
         emptyRows: 3,
         headRows: 2,
-        headRowHeight: [35, 35],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     }
 };
 const withoutCl = {
@@ -77,8 +81,10 @@ const withoutCl = {
         ],
         emptyRows: 3,
         headRows: 2,
-        headRowHeight: [35, 35],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     },
     pos: {
         cols: [
@@ -88,8 +94,10 @@ const withoutCl = {
         ],
         emptyRows: 3,
         headRows: 1,
-        headRowHeight: [40],
+        headRowHeight: [32],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     }
 };
 // 期 -- 本期计量台账
@@ -128,8 +136,10 @@ const stageTz = {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     },
     pos: {
         cols: [
@@ -146,8 +156,10 @@ const stageTz = {
         ],
         emptyRows: 3,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     }
 };
 const stageCl = {
@@ -187,8 +199,10 @@ const stageCl = {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     },
     pos: {
         cols: [
@@ -209,8 +223,10 @@ const stageCl = {
         ],
         emptyRows: 20,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     }
 };
 const stageNoCl = {
@@ -249,8 +265,10 @@ const stageNoCl = {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     },
     pos: {
         cols: [
@@ -268,8 +286,10 @@ const stageNoCl = {
         ],
         emptyRows: 20,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     }
 };
 // 期 -- 清单汇总
@@ -306,11 +326,11 @@ const stageGather = {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
-        headerFont: '10pt 微软雅黑',
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
-        font: '10pt 微软雅黑',
     },
     leafXmj: {
         cols: [
@@ -326,17 +346,17 @@ const stageGather = {
             {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@'},
             {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@'},
             {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@'},
-            {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
-            {title: '部位明细', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
+            {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
+            {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
             {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
-        headerFont: '10pt 微软雅黑',
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
-        font: '10pt 微软雅黑',
     }
 };
 // 期 -- 审核比较
@@ -355,8 +375,10 @@ const stageCompare = {
         ],
         emptyRows: 3,
         headRows: 2,
-        headRowHeight: [40, 40],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
     },
     pos: {
@@ -368,8 +390,10 @@ const stageCompare = {
         ],
         emptyRows: 3,
         headRows: 1,
-        headRowHeight: [40],
+        headRowHeight: [32],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
     }
 };
@@ -389,8 +413,10 @@ measure.gather.billsSpread = {
     ],
     emptyRows: 0,
     headRows: 1,
-    headRowHeight: [40],
+    headRowHeight: [32],
     defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
 };
 measure.compare.ledger = {
     cols: [
@@ -402,8 +428,10 @@ measure.compare.ledger = {
     ],
     emptyRows: 3,
     headRows: 2,
-    headRowHeight: [40, 40],
+    headRowHeight: [25, 25],
     defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
 };
 measure.compare.pos = {
     cols: [
@@ -411,8 +439,10 @@ measure.compare.pos = {
     ],
     emptyRows: 3,
     headRows: 1,
-    headRowHeight: [40],
+    headRowHeight: [32],
     defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
 };
 
 

+ 18 - 6
app/controller/material_controller.js

@@ -229,12 +229,14 @@ module.exports = app => {
                 // 取对应期的截取上期的调差金额和应耗数量
                 for (const mindex in renderData.materialBillsData) {
                     const pre_tp = renderData.materialBillsData[mindex].pre_tp !== null ? renderData.materialBillsData[mindex].pre_tp.split(',')[ctx.material.order - 1] : null;
-                    const quantity = renderData.materialBillsData[mindex].quantity !== null ? renderData.materialBillsData[mindex].quantity.split(',')[ctx.material.order - 1] : null;
                     renderData.materialBillsData[mindex].pre_tp = pre_tp;
-                    renderData.materialBillsData[mindex].quantity = quantity;
+                    if (ctx.material.readOnly) {
+                        const quantity = renderData.materialBillsData[mindex].s_quantity.split(',')[ctx.material.order - 1];
+                        renderData.materialBillsData[mindex].quantity = quantity;
+                    }
                 }
                 // 取所有已被调用的工料清单表
-                renderData.materialListData = await ctx.service.materialList.getAllDataByCondition({ where: searchsql });
+                renderData.materialListData = await ctx.service.materialList.getAllDataByCondition({ tid: ctx.tender.id, mid: ctx.material.id });
                 renderData.materialType = JSON.stringify(materialConst);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.material.info);
                 await this.layout('material/info.ejs', renderData, 'material/info_modal.ejs');
@@ -262,7 +264,7 @@ module.exports = app => {
                 }
                 renderData.materialBillsData = await ctx.service.materialBills.getAllDataByCondition({ where: searchsql });
                 // 取所有已被调用的工料清单表
-                renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, midList);
+                renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, ctx.material.id);
                 renderData.materialNotJoinListData = await ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: ctx.tender.id, mid: ctx.material.id } });
                 renderData.materialType = JSON.stringify(materialConst);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.material.list);
@@ -297,7 +299,7 @@ module.exports = app => {
                         responseData.data = await ctx.service.materialList.add(data.postData);
                         break;
                     case 'del':
-                        await ctx.service.materialList.del(data.id);
+                        await ctx.service.materialList.del(data.id, data.mb_id);
                         break;
                     case 'update':
                         if (data.updateData.quantity === '' || data.updateData.quantity === null) {
@@ -366,6 +368,16 @@ module.exports = app => {
                         }
                         await ctx.service.materialBills.save(data.updateData);
                         break;
+                    case 'rate':
+                        // 判断数量是否为数字
+                        if (isNaN(data.rate)) {
+                            throw '不能输入其它非数字类型字符';
+                        }
+                        if (ctx.material.readOnly) {
+                            throw '无权操作';
+                        }
+                        await ctx.service.material.changeRate(data.rate);
+                        break;
                     default: throw '参数有误';
                 }
 
@@ -441,7 +453,7 @@ module.exports = app => {
             }
         }
         /**
-         * 上报
+         * 上报和重新上报
          * @param ctx
          * @returns {Promise<void>}
          */

+ 1 - 1
app/controller/revise_controller.js

@@ -371,6 +371,7 @@ module.exports = app => {
                 const data = JSON.parse(ctx.request.body.data);
                 if (!data || !data.rid || data.rid === '') throw '查询的台账修订有误';
                 const reviseInfo = await ctx.service.ledgerRevise.getRevise(ctx.tender.id, data.rid);
+                reviseInfo.end_time_str = reviseInfo.end_time ? reviseInfo.end_time.toLocaleString() : '';
                 ctx.body = { err: 0, msg: '', data: reviseInfo };
             } catch(err) {
                 this.log(err);
@@ -453,7 +454,6 @@ module.exports = app => {
             }
         }
         async _addDeal(revise, data) {
-            console.log(data);
             if (!data.type || !data.dealBills) throw '数据错误';
             if (data.type === 'child') {
                 return await this.ctx.service.reviseBills.addChild(revise.tid, data.id, data.dealBills, revise.id);

+ 67 - 26
app/controller/tender_controller.js

@@ -31,7 +31,7 @@ module.exports = app => {
             ctx.showTitle = true;
         }
 
-        async _list(view, modal = '') {
+        async _listDetail(view, modal = '') {
             try {
                 // 获取用户新建标段权利
                 const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
@@ -73,6 +73,41 @@ module.exports = app => {
             }
         }
 
+        async _list(view, renderData, modal = '') {
+            try {
+                renderData.tenderList = await this.ctx.service.tender.getList('', renderData.userPermission);
+
+                for (const t of renderData.tenderList) {
+                    if (t.ledger_status === auditConst.ledger.status.checked) {
+                        t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
+                        t.completeStage = await this.ctx.service.stage.getLastestCompleteStage(t.id);
+                    }
+                }
+                renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
+                renderData.valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
+                renderData.tenderConst = tenderConst;
+                renderData.settingConst = settingConst;
+                renderData.measureType = tenderConst.measureType;
+                renderData.jsFiles = this.app.jsFiles.common.concat(this.jsFiles);
+                renderData.auditConst = auditConst;
+                await this.layout(view, renderData, modal);
+            } catch (err) {
+                this.log(err);
+                this.ctx.redirect('/dashboard')
+            }
+        }
+
+        async listDefault(ctx) {
+            this.jsFiles = this.app.jsFiles.tender.list;
+            const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
+            const userPermission = accountInfo !== undefined && accountInfo.permission !== '' ? JSON.parse(accountInfo.permission) : null;
+            const renderData = {
+                accountInfo,
+                userPermission,
+            };
+            await this._list('tender/index.ejs', renderData, 'tender/modal.ejs');
+        }
+
         /**
          * 标段概况(Get)
          *
@@ -80,8 +115,8 @@ module.exports = app => {
          * @return {void}
          */
         async listInfo(ctx) {
-            this.jsFiles = this.app.jsFiles.tender.list;
-            await this._list('tender/index.ejs', 'tender/modal.ejs');
+            this.jsFiles = this.app.jsFiles.tender.info;
+            await this._listDetail('tender/info.ejs', 'tender/modal.ejs');
         }
 
         /**
@@ -92,7 +127,7 @@ module.exports = app => {
          */
         async listProgress(ctx) {
             this.jsFiles = this.app.jsFiles.tender.progress;
-            await this._list('tender/progress.ejs', 'tender/modal.ejs');
+            await this._listDetail('tender/progress.ejs', 'tender/modal.ejs');
         }
 
         /**
@@ -102,34 +137,40 @@ module.exports = app => {
          * @return {Promise<void>}
          */
         async listManage(ctx) {
+            this.jsFiles = this.app.jsFiles.tender.manage;
             // 先判断权限
             // 获取用户新建标段权利
             const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
             const userPermission = accountInfo !== undefined && accountInfo.permission !== '' ? JSON.parse(accountInfo.permission) : null;
             if (userPermission !== null && userPermission.tender !== undefined && userPermission.tender.indexOf('1') !== -1) {
-                // 获取用户新建标段权利
-                const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
-                const userPermission = accountInfo !== undefined && accountInfo.permission !== '' ? JSON.parse(accountInfo.permission) : null;
-
-                const tenderList = await this.ctx.service.tender.getList('manage', userPermission);
-                for (const t of tenderList) {
-                    t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
-                    t.completeStage = await this.ctx.service.stage.getLastestCompleteStage(t.id);
-                }
-                const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
-                const valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
                 const renderData = {
-                    tenderList,
-                    tenderConst,
-                    settingConst,
-                    categoryData,
-                    measureType: tenderConst.measureType,
-                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.manage),
-                    auditConst,
-                    userPermission,
-                    valuations,
+                    accountInfo,
+                    userPermission
                 };
-                await this.layout('tender/manage.ejs', renderData, 'tender/manage_modal.ejs');
+                await this._list('tender/manage.ejs', renderData, 'tender/manage_modal.ejs')
+                // 获取用户新建标段权利
+                // const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
+                // const userPermission = accountInfo !== undefined && accountInfo.permission !== '' ? JSON.parse(accountInfo.permission) : null;
+                //
+                // const tenderList = await this.ctx.service.tender.getList('manage', userPermission);
+                // for (const t of tenderList) {
+                //     t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
+                //     t.completeStage = await this.ctx.service.stage.getLastestCompleteStage(t.id);
+                // }
+                // const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
+                // const valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
+                // const renderData = {
+                //     tenderList,
+                //     tenderConst,
+                //     settingConst,
+                //     categoryData,
+                //     measureType: tenderConst.measureType,
+                //     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.manage),
+                //     auditConst,
+                //     userPermission,
+                //     valuations,
+                // };
+                // await this.layout('tender/manage.ejs', renderData, 'tender/manage_modal.ejs');
             } else {
                 this.ctx.redirect(ctx.request.header.referer);
             }
@@ -281,7 +322,7 @@ module.exports = app => {
                     stages: stages.reverse(),
                     monthProgress,
                     audit: auditConst,
-                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.info),
+                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.tenderInfo),
                 };
                 await this.layout('tender/detail.ejs', renderData);
             } catch (error) {

+ 0 - 1
app/middleware/auto_logger.js

@@ -18,7 +18,6 @@ module.exports = options => {
                 return ctx.getLogger('stage');
             }
             return ctx.getLogger('mixed');
-
         }
         if (this.session.sessionUser) {
             const bLogger = getBussinessLogger(this);

+ 164 - 0
app/public/css/main.css

@@ -654,6 +654,9 @@ font-size: .875rem;
   width:inherit;
   height: inherit;
 }
+.pageContainer canvas{
+  background: #fff
+}
 .m-close-side{
   position: absolute;
   right:-1px;
@@ -693,4 +696,165 @@ font-size: .875rem;
 }
 .add-sign-list-item:hover .btn-link {
   display: block
+}
+/*界面紧凑相关代码*/
+body{
+  font-size:12px;
+}
+.btn-group-sm > .btn, .btn-sm{
+  font-size: 12px;
+  padding:1px 0.6rem;
+}
+.panel-title, .panel-title > .title-bar{
+  height:34px;
+  line-height: 30px;
+}
+.panel-title > .title-main .btn.pull-right {
+    margin: 5px 0 0 0 
+}
+.panel-content{
+  padding-top:35px;
+  overflow-x: hidden
+}
+.panel-content .content-wrap{
+ margin:0;
+}
+.table td, .table th {
+  padding:.3rem;
+}
+.form-control-sm {
+  font-size:12px;
+  padding-top:.1rem;
+}
+label{
+  margin-bottom:.3rem;
+}
+.invalid-feedback{
+  font-size:100%;
+}
+.modal-header{
+  padding:.5rem 1rem
+}
+.modal-title{
+  font-size:16px;
+}
+.modal-footer {
+  padding:.5rem 1rem
+}
+.modal-body h6,.modal-body h5{
+  font-size:12px;
+}
+.panel-title > .title-bar{
+  padding-left:10px;
+}
+.panel-sidebar .panel-title{
+  width:120px;
+}
+.panel-title > .title-bar > h2, .panel-title > .title-main > h2{
+  height:34px;
+  line-height: 34px;
+  font-size: 12px
+}
+.panel-title > .title-main .form-control {
+    margin: 4px 0 0 0;
+}
+.panel-sidebar {
+  width:120px;
+}
+.panel-sidebar .scrollbar-auto{
+  padding-top:0;
+}
+.nav-list li a{
+  padding-right:0px;
+  height:30px;
+  line-height: 30px
+}
+.nav-box h3{
+  margin-left:12px;
+}
+.nav-box > .sub-list > li > a{
+  padding-left:32px;
+}
+.panel-sidebar + .panel-content{
+  padding:35px 0 0 120px;
+}
+.contarl-box{
+  padding:1rem 1rem;
+}
+.min-side .side-menu {
+  top:34px;
+}
+.panel-content .panel-title{
+  padding-left:175px;
+}
+.nav-link{
+  padding:.3rem .5rem;
+}
+.side-menu .nav-link{
+  font-size:12px;
+}
+legend {
+  font-size:16px;
+}
+.input-group-sm > .custom-select, .input-group-sm > .form-control:not(textarea) {
+    height: calc(1.4125rem + 2px);
+}
+.input-group-sm>.form-control, .input-group-sm>.input-group-append>.btn, .input-group-sm>.input-group-append>.input-group-text, .input-group-sm>.input-group-prepend>.btn, .input-group-sm>.input-group-prepend>.input-group-text{
+  height: calc(1.4125rem + 2px);
+}
+.input-group-sm > .custom-select, .input-group-sm > .form-control, .input-group-sm > .input-group-append > .btn, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-prepend > .input-group-text {
+  font-size:12px;
+  padding:.1rem .5rem;
+  }
+  .side-menu{
+    right:0;
+    top:35px;
+  }
+  .custom-control-label::before{
+    top:.1rem;
+  }
+.custom-control-label::after{
+  top:.1rem;
+}
+.form-control-sm{
+  height:calc(1.4125rem + 2px);
+}
+.form-group {
+  margin-bottom:.5rem;
+}
+.badge{
+  font-size:100%;
+}
+.sjs-height-0{
+  overflow: auto;
+}
+.nav-box h3{
+  margin-bottom:5px;
+}
+.min-side .side-menu{
+  padding-bottom:10px;
+}
+.side-fold {
+  right:50px;
+  bottom:20px;
+}
+.side-fold a{
+  font-size:24px;
+}
+.min-side {
+  padding-bottom:5px;
+}
+.min-side .side-fold{
+ bottom:10px;
+}
+.min-side .side-fold a{
+  font-size:18px;
+}
+.form-text{
+  font-size:12px;
+}
+.btn-sm .badge{
+  font-size:10px;
+  padding:.2em .4em;
+  top:0;
 }

+ 4 - 2
app/public/js/bootstrap/bootstrap-paginator.js

@@ -585,7 +585,6 @@
     };
 
     $.fn.bootstrapPaginator.sizeArray = {
-
         "2": {
             "large": "pagination-large",
             "small": "pagination-small",
@@ -595,8 +594,11 @@
             "large": "pagination-lg",
             "small": "pagination-sm",
             "mini": ""
+        },
+        "4": {
+            "large": "pagination-lg",
+            "small": "pagination-sm",
         }
-
     };
 
     $.fn.bootstrapPaginator.defaults = {

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

@@ -38,7 +38,7 @@ function getCategoryHtml(category) {
         html.push('<td>');
         if (d.value && d.value.length > 0) {
             for (const v of d.value) {
-                html.push('<span class="h5"><span class="badge badge-secondary">', v.value, '</span></span>\n');
+                html.push('<span class="badge badge-secondary">', v.value, '</span>\n');
             }
         } else {
             html.push('请在右侧添加值');

+ 65 - 54
app/public/js/global.js

@@ -18,21 +18,21 @@ function autoFlashHeight(){
     var pBarz = getObjHeight($(".toolsbar-f"));
     var bdtopc = getObjHeight($(".body-height-top"));
     var bcontent = getObjHeight($(".bcontent-wrap"));
-    $(".sjs-height-0").height($(window).height()-cHeader-90);
-    $(".sjs-height-1").height($(window).height()-cHeader-bcontent-90);
+    $(".sjs-height-0").height($(window).height()-cHeader-90+45);
+    $(".sjs-height-1").height($(window).height()-cHeader-bcontent-90+45);
     $(".sjs-height-2").height($(window).height()-cHeader-sBarz-110);
-    $(".sjs-height-3").height($(window).height()-cHeader-sBar-492);
-    $(".sjs-height-4").height($(window).height()-cHeader-pBarz-110);
+    $(".sjs-height-3").height($(window).height()-cHeader-sBar-492+15);
+    $(".sjs-height-4").height($(window).height()-cHeader-pBarz-110+65);
     $(".sjs-height-5").height($(window).height()-cHeader-sBart-555);
     $(".sjs-height-6").height($(window).height()-cHeader-bdtopc-156);
     $(".sjs-height-7").height($(window).height()-cHeader-sBar-110);
     $(".sp-wrap").height(bcontent-40);
     /*侧栏高度*/
-    $(".sjs-sh-1").height($(window).height()-cHeader-sBar1-92);
-    $(".sjs-sh-2").height($(window).height()-cHeader-sBar2-92);
-    $(".sjs-sh-3").height($(window).height()-cHeader-sBar3-92);
-    $(".sjs-sh-4").height($(window).height()-cHeader-sBar4-92);
-    $(".sjs-sh-5").height($(window).height()-cHeader-sBar5-92);
+    $(".sjs-sh-1").height($(window).height()-cHeader-sBar1-92+45);
+    $(".sjs-sh-2").height($(window).height()-cHeader-sBar2-92+45);
+    $(".sjs-sh-3").height($(window).height()-cHeader-sBar3-92+45);
+    $(".sjs-sh-4").height($(window).height()-cHeader-sBar4-92+45);
+    $(".sjs-sh-5").height($(window).height()-cHeader-sBar5-92+45);
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/
@@ -130,7 +130,7 @@ function toast(message, type, icon) {
  * @param {function} successCallback - 返回成功回调
  * @param {function} errorCallBack - 返回失败回调
  */
-const postData = function (url, data, successCallback, errorCallBack, showWaiting = false) {
+const postData = function (url, data, successCallback, errorCallBack, showWaiting = true) {
     if (showWaiting) showWaitingView();
     $.ajax({
         type:"POST",
@@ -173,7 +173,7 @@ const postData = function (url, data, successCallback, errorCallBack, showWaitin
  * @param {function} successCallback - 返回成功回调
  * @param {function} errorCallBack - 返回失败回调
  */
-const postDataCompress = function (url, data, successCallback, errorCallBack, showWaiting = false) {
+const postDataCompress = function (url, data, successCallback, errorCallBack, showWaiting = true) {
     if (showWaiting) showWaitingView();
     $.ajax({
         type:"POST",
@@ -216,7 +216,7 @@ const postDataCompress = function (url, data, successCallback, errorCallBack, sh
  * @param {function} successCallback - 返回成功回调
  * @param {function} errorCallBack - 返回失败回调
  */
-const postDataWithFile = function (url, formData, successCallback, errorCallBack, showWaiting = false) {
+const postDataWithFile = function (url, formData, successCallback, errorCallBack, showWaiting = true) {
     if (showWaiting) showWaitingView();
     $.ajax({
         type:"POST",
@@ -278,57 +278,68 @@ function checkZero(value) {
 function checkFieldChange(o, n) {
     return o == n || ((!o || o === '') && (n === ''));
 }
+
+var bShowWaiting = false, beginWaitingTime;
 //关闭等待窗口
 function closeWaitingView() {
-    var bgDiv = document.getElementById("bgDiv");
-    var msgDiv = document.getElementById("msgDiv");
-    //移除背景遮罩层div
-    if(bgDiv != null){
-        document.body.removeChild(bgDiv);
-    }
-    //移除中间信息提示层div
-    if(msgDiv != null){
-        document.body.removeChild(msgDiv);
-    }
+    bShowWaiting = false;
+    const time = parseInt(new Date());
+    setTimeout(function () {
+        var bgDiv = document.getElementById("bgDiv");
+        var msgDiv = document.getElementById("msgDiv");
+        //移除背景遮罩层div
+        if(bgDiv != null){
+            document.body.removeChild(bgDiv);
+        }
+        //移除中间信息提示层div
+        if(msgDiv != null){
+            document.body.removeChild(msgDiv);
+        }
+    }, Math.max(beginWaitingTime - time + 1000, 0));
 }
 //显示等待窗口
 function showWaitingView() {
-    var msgw = 300; //提示窗口的宽度
-    var msgh = 100; //提示窗口的高度
+    bShowWaiting = true;
+    setTimeout(function () {
+        if (!bShowWaiting) return;
+        beginWaitingTime = parseInt(new Date());
+        var msgw = 300; //提示窗口的宽度
+        var msgh = 100; //提示窗口的高度
 
-    var sWidth, sHeight;
-    sWidth = document.body.clientWidth;
-    sHeight = document.body.clientHeight;
+        var sWidth, sHeight;
+        sWidth = document.body.clientWidth;
+        sHeight = document.body.clientHeight;
 
-    //背景遮罩层div
-    var bgObj = document.createElement("div");
-    bgObj.setAttribute('id', 'bgDiv');
-    bgObj.style.zIndex = '9998';
-    bgObj.style.position = "absolute";
-    bgObj.style.top = "0px";
-    bgObj.style.background = "#888";
-    bgObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";
-    bgObj.style.opacity = "0.6";
-    bgObj.style.left = "0px";
-    bgObj.style.width = sWidth + "px";
-    bgObj.style.height = sHeight + "px";
-    document.body.appendChild(bgObj);
+        //背景遮罩层div
+        var bgObj = document.createElement("div");
+        bgObj.setAttribute('id', 'bgDiv');
+        bgObj.style.zIndex = '9998';
+        bgObj.style.position = "absolute";
+        bgObj.style.top = "0px";
+        bgObj.style.background = "#888";
+        bgObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";
+        bgObj.style.opacity = "0.6";
+        bgObj.style.left = "0px";
+        bgObj.style.width = sWidth + "px";
+        bgObj.style.height = sHeight + "px";
+        document.body.appendChild(bgObj);
 
-    //信息提示层div
-    var msgObj = document.createElement("div");
-    msgObj.style.zIndex = '9999';
-    msgObj.setAttribute("id", "msgDiv");
-    msgObj.setAttribute("align", "center");
-    msgObj.style.position = "absolute";
-    msgObj.style.font = "12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";
-    msgObj.style.width = msgw + "px";
-    msgObj.style.height = msgh + "px";
-    msgObj.style.top = (document.documentElement.scrollTop + (sHeight - msgh) / 2) + "px";
-    msgObj.style.left = (sWidth - msgw) / 2 + "px";
-    document.body.appendChild(msgObj);
+        //信息提示层div
+        var msgObj = document.createElement("div");
+        msgObj.style.zIndex = '9999';
+        msgObj.setAttribute("id", "msgDiv");
+        msgObj.setAttribute("align", "center");
+        msgObj.style.position = "absolute";
+        msgObj.style.font = "12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";
+        msgObj.style.width = msgw + "px";
+        msgObj.style.height = msgh + "px";
+        msgObj.style.top = (document.documentElement.scrollTop + (sHeight - msgh) / 2) + "px";
+        msgObj.style.left = (sWidth - msgw) / 2 + "px";
+        document.body.appendChild(msgObj);
 
-    //中间等待图标
-    document.getElementById("msgDiv").innerHTML = '<i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>';
+        //中间等待图标
+        document.getElementById("msgDiv").innerHTML = '<i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>';
+    }, 1000);
 }
 
 /**

+ 75 - 45
app/public/js/ledger.js

@@ -49,7 +49,7 @@ $(document).ready(function() {
         node.dgn_price = ZhCalc.round(ZhCalc.div(node.total_price, node.dgn_qty1), 2);
     };
     const ledgerTree = createNewPathTree('ledger', treeSetting);
-    // 初始化 部位明细
+    // 初始化 计量单元
     const pos = new PosData({
         id: 'id', ledgerId: 'lid',
     });
@@ -223,6 +223,7 @@ $(document).ready(function() {
          */
         addNode: function (sheet) {
             const self = this;
+            const sel = sheet.getSelections()[0];
             const row = sheet.getSelections()[0].row;
 
             const tree = sheet.zh_tree;
@@ -239,6 +240,7 @@ $(document).ready(function() {
             }, function (result) {
                 const refreshNode = tree.loadPostData(result);
                 self.refreshTree(sheet, refreshNode);
+                sheet.setSelection(refreshNode.create[0].index, sel.col, sel.rowCount, sel.colCount);
                 self.refreshOperationValid(sheet);
             });
         },
@@ -378,7 +380,7 @@ $(document).ready(function() {
                 if (orgValue == info.editingText || ((!orgValue || orgValue === '') && (info.editingText === ''))) {
                     return;
                 }
-                // 台账模式,检查部位明细相关
+                // 台账模式,检查计量单元相关
                 if (checkTzMeasureType()) {
                     if (col.field === 'sgfh_qty' || col.field === 'sgfh_tp' ||
                         col.field === 'sjcl_qty' || col.field === 'sjcl_tp' ||
@@ -386,7 +388,7 @@ $(document).ready(function() {
                         if (!node.children || node.children.length ===0) {
                             const lPos = pos.getLedgerPos(node.id);
                             if (lPos && lPos.length > 0) {
-                                toastr.error('清单含有部位明细,请在部位明细输入数量');
+                                toastr.error('清单含有计量单元,请在计量单元输入数量');
                                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
                                 return;
                             }
@@ -395,28 +397,32 @@ $(document).ready(function() {
                     if (col.field === 'b_code' && (info.editingText === '' || !info.editingText)) {
                         const lPos = pos.getLedgerPos(node.id);
                         if (lPos && lPos.length > 0) {
-                            toastr.error('清单含有部位明细,请先删除部位明细,再删除清单编号');
+                            toastr.error('清单含有计量单元,请先删除计量单元,再删除清单编号');
                             SpreadJsObj.reLoadRowData(info.sheet, info.row);
                             return;
                         }
                     }
                 }
                 // 获取更新数据
-                if (info.editingText) {
-                    const num = _.toNumber(info.editingText);
-                    if (num) {
-                        data[col.field] = num;
-                    } else {
-                        try {
-                            data[col.field] = math.evaluate(transExpr(info.editingText));
-                        } catch(err) {
-                            toastr.error('输入的表达式非法');
-                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                            return;
+                if (col.type === 'Number') {
+                    if (info.editingText) {
+                        const num = _.toNumber(info.editingText);
+                        if (num) {
+                            data[col.field] = num;
+                        } else {
+                            try {
+                                data[col.field] = math.evaluate(transExpr(info.editingText));
+                            } catch(err) {
+                                toastr.error('输入的表达式非法');
+                                SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                                return;
+                            }
                         }
+                    } else {
+                        data[col.field] = null;
                     }
                 } else {
-                    data[col.field] = null;
+                    data[col.field] = info.editingText;
                 }
                 // 更新至服务器
                 postData(window.location.pathname + '/update', {postType: 'update', postData: data}, function (result) {
@@ -453,7 +459,7 @@ $(document).ready(function() {
                             if (lPos && lPos.length > 0) {
                                 if (value === '' && colSetting.field === 'b_code') {
                                     if (!bHint) {
-                                        toastr.warning('清单含有部位明细,请先删除部位明细,再删除清单编号');
+                                        toastr.warning('清单含有计量单元,请先删除计量单元,再删除清单编号');
                                         bHint = true;
                                     }
                                     continue;
@@ -462,7 +468,7 @@ $(document).ready(function() {
                                     colSetting.field === 'sjcl_qty' || colSetting.field === 'sjcl_tp' ||
                                     colSetting.field === 'qtcl_qty' || colSetting.field === 'qtcl_tp') {
                                     if (!bHint) {
-                                        toastr.warning('清单含有部位明细,数量金额根据部位明细汇总计算所得,不可编辑');
+                                        toastr.warning('清单含有计量单元,数量金额根据计量单元汇总计算所得,不可编辑');
                                         bHint = true;
                                     }
                                     continue;
@@ -579,8 +585,8 @@ $(document).ready(function() {
             const hint = [];
             if (bParentHint) hint.push('含有子项的清单,不可粘贴数量、单价、金额');
             if (bGclHint) hint.push('工程量清单,不可粘贴设计数量');
-            if (bQtyHint) hint.push('含有部位明细的清单,不可粘贴数量');
-            if (bCodeHint) hint.push('含有部位明细的清单,清单编号不可粘贴空值');
+            if (bQtyHint) hint.push('含有计量单元的清单,不可粘贴数量');
+            if (bCodeHint) hint.push('含有计量单元的清单,清单编号不可粘贴空值');
             if (bNumHint) hint.push('单价、数量等应输入数字或可计算的表达式');
             // if (hint.length > 0) hint.unshift('复制粘贴的数据中,存在非法数据,已过滤:');
             // if (hint.length > 0) toastr.warning(hint.join('</br>'));
@@ -626,9 +632,9 @@ $(document).ready(function() {
                                 if (lPos && lPos.length > 0) {
                                     if (!bHint) {
                                         if (col.field === 'code') {
-                                            toastr.warning('清单含有部位明细,请先删除部位明细,再删除清单编号');
+                                            toastr.warning('清单含有计量单元,请先删除计量单元,再删除清单编号');
                                         } else {
-                                            toastr.warning('清单含有部位明细,数量金额根据部位明细汇总计算所得,不可删除');
+                                            toastr.warning('清单含有计量单元,数量金额根据计量单元汇总计算所得,不可删除');
                                         }
                                         bHint = true;
                                     }
@@ -664,7 +670,8 @@ $(document).ready(function() {
         pasteBlock: function (spread, copyInfo) {
             const self = this;
             const sheet = spread.getActiveSheet();
-            const row = sheet.getSelections()[0].row;
+            const sel = sheet.getSelections()[0];
+            const row = sel.row;
 
             const tree = sheet.zh_tree;
             if (!tree) { return; }
@@ -683,6 +690,7 @@ $(document).ready(function() {
                 pos.updateDatas(data.pos);
                 const result = tree.loadPostData(data.ledger);
                 self.refreshTree(sheet, result);
+                sheet.setSelection(result.create[0].index, sel.col, sel.rowCount, sel.colCount);
                 self.refreshOperationValid(sheet);
                 removeLocalCache(copyBlockTag);
             }, null, true);
@@ -1026,7 +1034,7 @@ $(document).ready(function() {
     }
 
     const posSearch = $.posSearch({selector: '#pos-search', searchSpread: posSpread});
-    // 台账模式加载部位明细数据
+    // 台账模式加载计量单元数据
     if (checkTzMeasureType()) {
         $.divResizer({
             select: '#main-resize',
@@ -1039,13 +1047,13 @@ $(document).ready(function() {
         });
         SpreadJsObj.initSheet(posSpread.getActiveSheet(), posSpreadSetting);
     }
-    // 绑定部位明细编辑事件
+    // 绑定计量单元编辑事件
     const posOperationObj = {
         editStarting: function (e, info) {
             posOperationObj.ledgerTreeNode = SpreadJsObj.getSelectObject(ledgerSpread.getActiveSheet());
         },
         /**
-         * 加载部位明细 根据当前台账选择节点
+         * 加载计量单元 根据当前台账选择节点
          */
         loadCurPosData: function () {
             const node = treeOperationObj.getSelectNode(ledgerSpread.getActiveSheet());
@@ -1078,11 +1086,11 @@ $(document).ready(function() {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 } else if (newText && newText !== '' && node.children && node.children.length > 0) {
-                    toastr.error('父节点不可插入部位明细');
+                    toastr.error('父节点不可插入计量单元');
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 } else if (newText && newText !== '' && (!node.b_code || node.b_code === '')) {
-                    toastr.error('项目节不可插入部位明细');
+                    toastr.error('项目节不可插入计量单元');
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 }
@@ -1200,7 +1208,7 @@ $(document).ready(function() {
             }
         },
         /**
-         * 删除 部位明细
+         * 删除 计量单元
          * @param sheet
          */
         deletePos: function (sheet) {
@@ -1239,7 +1247,7 @@ $(document).ready(function() {
                 return;
             }
             if (node.children && (node.children.length > 0)) {
-                toastr.error('仅清单子项可以含有部位明细');
+                toastr.error('仅清单子项可以含有计量单元');
                 posOperationObj.loadCurPosData();
                 return;
             }
@@ -1474,8 +1482,10 @@ $(document).ready(function() {
                         treeCol: 0,
                         emptyRows: 0,
                         headRows: 1,
-                        headRowHeight: [40],
+                        headRowHeight: [32],
                         defaultRowHeight: 21,
+                        headerFont: '12px 微软雅黑',
+                        font: '12px 微软雅黑',
                     });
                     stdXmj.loadLib($('select', '#std-xmj').val());
                 }
@@ -1498,8 +1508,10 @@ $(document).ready(function() {
                         treeCol: 0,
                         emptyRows: 0,
                         headRows: 1,
-                        headRowHeight: [40],
+                        headRowHeight: [32],
                         defaultRowHeight: 21,
+                        headerFont: '12px 微软雅黑',
+                        font: '12px 微软雅黑',
                     });
                     stdGcl.loadLib($('select', '#std-gcl').val());
                 }
@@ -1517,8 +1529,10 @@ $(document).ready(function() {
                         ],
                         emptyRows: 0,
                         headRows: 1,
-                        headRowHeight: [40],
+                        headRowHeight: [32],
                         defaultRowHeight: 21,
+                        headerFont: '12px 微软雅黑',
+                        font: '12px 微软雅黑',
                     });
                     dealBills.loadData();
                 }
@@ -1539,8 +1553,10 @@ $(document).ready(function() {
                             ],
                             emptyRows: 0,
                             headRows: 1,
-                            headRowHeight: [40],
+                            headRowHeight: [32],
                             defaultRowHeight: 21,
+                            headerFont: '12px 微软雅黑',
+                            font: '12px 微软雅黑',
                         },
                         afterLocated: function () {
                             posOperationObj.loadCurPosData();
@@ -1602,6 +1618,7 @@ $(document).ready(function() {
                 }, function (result) {
                     const refreshNode = mainTree.loadPostData(result);
                     treeOperationObj.refreshTree(mainSheet, refreshNode);
+                    mainSheet.setSelection(refreshNode.create[0].index, sel.col, sel.rowCount, sel.colCount);
                     treeOperationObj.refreshOperationValid(mainSheet);
                 });
             });
@@ -1665,6 +1682,8 @@ $(document).ready(function() {
                 }, function (result) {
                     const refreshData = mainTree.loadPostData(result);
                     treeOperationObj.refreshTree(mainSheet, refreshData);
+                    const sel = mainSheet.getSelections()[0];
+                    mainSheet.setSelection(refreshData.create[0].index, sel.col, sel.rowCount, sel.colCount);
                     treeOperationObj.refreshOperationValid(mainSheet);
                 });
             });
@@ -1715,7 +1734,9 @@ $(document).ready(function() {
                 ],
                 emptyRows: this.billsCount,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             this.qdSpread = SpreadJsObj.createNewSpread($('.batch-l-t', this.obj)[0]);
             // 初始化 部位数量复核表 参数
@@ -1726,7 +1747,9 @@ $(document).ready(function() {
                 ],
                 emptyRows: this.posCount,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             for (let iNum = 1; iNum <= this.billsCount; iNum++) {
                 this.posSpreadSetting.cols.push(
@@ -1744,7 +1767,9 @@ $(document).ready(function() {
                 ],
                 emptyRows: 0,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             this.dealSpread = SpreadJsObj.createNewSpread($('.batch-r', this.obj)[0]);
             // 初始化 清单编号、部位数量复核表 表格
@@ -1828,21 +1853,26 @@ $(document).ready(function() {
 
             $('#batch-ok').click(function () {
                 const sheet = ledgerSpread.getActiveSheet();
-                const selection = sheet.getSelections();
-                const row = selection[0].row;
+                const sel = sheet.getSelections()[0];
+                const row = sel.row;
                 const select = ledgerTree.nodes[row];
                 if (select) {
                     const insertData = {};
                     insertData.batchType = (select.code && select.code !== '') ? 'child' : 'next';
                     insertData.id = ledgerTree.getNodeKey(select);
                     insertData.batchData = self.getBatchData();
-                    postData(window.location.pathname + '/update', {postType: 'batch-insert', postData: insertData}, function (data) {
-                        pos.updateDatas(data.pos);
-                        const result = ledgerTree.loadPostData(data.ledger);
-                        treeOperationObj.refreshTree(sheet, result);
-                        treeOperationObj.refreshOperationValid(sheet, selection);
+                    if (insertData.batchData.length > 0) {
+                        postData(window.location.pathname + '/update', {postType: 'batch-insert', postData: insertData}, function (data) {
+                            pos.updateDatas(data.pos);
+                            const result = ledgerTree.loadPostData(data.ledger);
+                            treeOperationObj.refreshTree(sheet, result);
+                            sheet.setSelection(result.create[0].index, sel.col, sel.rowCount, sel.colCount);
+                            treeOperationObj.refreshOperationValid(sheet);
+                            self.obj.modal('hide');
+                        }, null, true);
+                    } else {
                         self.obj.modal('hide');
-                    }, null, true);
+                    }
                 }
             });
         }

+ 6 - 2
app/public/js/ledger_audit.js

@@ -162,8 +162,10 @@ $(document).ready(() => {
                     ],
                     emptyRows: 0,
                     headRows: 1,
-                    headRowHeight: [40],
+                    headRowHeight: [32],
                     defaultRowHeight: 21,
+                    headerFont: '12px 微软雅黑',
+                    font: '12px 微软雅黑',
                 });
                 dealBills.loadData();
             } else if (tab.attr('content') === '#search' && !searchLedger) {
@@ -182,8 +184,10 @@ $(document).ready(() => {
                             ],
                             emptyRows: 0,
                             headRows: 1,
-                            headRowHeight: [40],
+                            headRowHeight: [32],
                             defaultRowHeight: 21,
+                            headerFont: '12px 微软雅黑',
+                            font: '12px 微软雅黑',
                         },
                         afterLocated: function () {
                             loadCurPosData();

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

@@ -14,7 +14,7 @@
     $.posSearch = function (setting) {
         if (!setting.selector || !setting.searchSpread) return;
         const searchHtml =
-            '                                <div class="mt-1 ml-2">\n' +
+            '                                <div class="ml-2">\n' +
             '                                    <div class="input-group input-group-sm">\n' +
             '                                        <input type="text" class="form-control" placeholder="输入名称查找" id="pos-keyword">\n' +
             '                                        <div class="input-group-append">\n' +

+ 17 - 10
app/public/js/material.js

@@ -45,11 +45,11 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
-        defaultRowHeight: 30,
-        headerFont: '10pt 微软雅黑',
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: readOnly,
-        font: '10pt 微软雅黑',
     };
 
     const materialBase = {
@@ -58,9 +58,9 @@ $(document).ready(() => {
                 return item.mb_id === data.id;
             });
         },
-        isStage: function (data) {
-            return data.mid === materialID;
-        }
+        // isStage: function (data) {
+        //     return data.mid === materialID;
+        // }
     }
 
     const materialCol = {
@@ -79,7 +79,7 @@ $(document).ready(() => {
         },
         readOnly: {
             isEdit: function (data) {
-                return !(!readOnly && materialBase.isEdit(data) === undefined && materialBase.isStage(data));
+                return !(!readOnly && materialBase.isEdit(data) === undefined);
             },
             remark: function () {
                 return readOnly;
@@ -119,7 +119,6 @@ $(document).ready(() => {
         del: function () {
             const sheet = materialSpread.getActiveSheet();
             const select = SpreadJsObj.getSelectObject(sheet);
-            console.log(select);
             postData(window.location.pathname + '/save', {type: 'del', id: select.id}, function (result) {
                 const index = materialBillsData.indexOf(select);
                 materialBillsData.splice(index, 1);
@@ -207,7 +206,6 @@ $(document).ready(() => {
                 select.msg_spread = materialCol.getValue.msg_spread(select);
                 select.m_spread = materialCol.getValue.m_spread(select);
                 select.m_tp = materialCol.getValue.m_tp(select);
-                console.log(select);
                 // 更新至服务器
                 postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -261,6 +259,15 @@ $(document).ready(() => {
                 },
             }
         });
+        $('#changeRate').change(function () {
+            const rate = parseInt($(this).val());
+            postData(window.location.pathname + '/save', { type:'rate', rate: rate }, function (result) {
+                const bqhs = ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), 2);
+                const jzbqhs = ZhCalc.round(ZhCalc.mul(ZhCalc.add(pre_tp, m_tp), 1+rate/100), 2);
+                $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : '');
+                $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : '');
+            });
+        })
     } else {
         // SpreadJsObj.forbiddenSpreadContextMenu('#material-spread', materialSpread);
     }

+ 91 - 41
app/public/js/material_list.js

@@ -23,10 +23,31 @@ function getMpSpreadByMBData(id) {
     const info = materialBillsData.find(function (item) {
         return item.id === parseInt(id);
     });
-    console.log(info);
     return info.m_spread;
 }
 
+function getMaterialListByLeafXmj(gcl_id, xmj_id, mx_id = null) {
+    const list = [];
+    for (const ml of materialListData) {
+        if (gcl_id === ml.gcl_id && xmj_id === ml.xmj_id && (mx_id === null || mx_id === ml.mx_id)) {
+            list.push(ml);
+        }
+    }
+    return list;
+}
+
+function calcOneBQJC(xmj) {
+    let jiacha = 0;
+    const notx = findNotJoinLeafXmj(xmj);
+    if (notx === undefined) {
+        const list = xmj.mx_id !== undefined ? getMaterialListByLeafXmj(xmj.gcl_id, xmj.id, xmj.mx_id) : getMaterialListByLeafXmj(xmj.gcl_id, xmj.id);
+        for (const l of list) {
+            jiacha = ZhCalc.add(jiacha, ZhCalc.mul(ZhCalc.mul(xmj.gather_qty, l.quantity), getMpSpreadByMBData(l.mb_id)));
+        }
+    }
+    return jiacha;
+}
+
 $(document).ready(() => {
     autoFlashHeight();
     // 清单table
@@ -43,11 +64,11 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
-        defaultRowHeight: 30,
-        headerFont: '10pt 微软雅黑',
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
-        font: '10pt 微软雅黑',
     };
     // 解析清单汇总数据
     gclGatherModel.loadLedgerData(ledger, curLedgerData);
@@ -58,6 +79,11 @@ $(document).ready(() => {
     function loadLeafXmjData(iGclRow) {
         const gcl = gclGatherData[iGclRow];
         if (gcl) {
+            for (const [index, xmj] of gcl.leafXmjs.entries()) {
+                const jiacha = calcOneBQJC(xmj);
+                gcl.leafXmjs[index].jiacha = jiacha !== 0 ? ZhCalc.round(jiacha, 2) : null;
+            }
+            // console.log(gcl.leafXmjs);
             SpreadJsObj.loadSheetData(leafXmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gcl.leafXmjs);
             // 对清单调差工料table的单位数量进行改变
             materialSpreadSetting.cols[materialSpreadSetting.cols.length - 1].title = '|' + gcl.unit + '数量';
@@ -82,33 +108,33 @@ $(document).ready(() => {
             {title: '本期计量数量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|数量变更', colSpan: '|1', rowSpan: '|1', field: 'qc_qty', hAlign: 2, width: 80, type: 'Number'},
             {title: '|小计', colSpan: '|1', rowSpan: '|1', field: 'gather_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'jiacha', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.jiacha'},
+            {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'jiacha', hAlign: 2, width: 80, type: 'Number'},
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
-        defaultRowHeight: 30,
-        headerFont: '10pt 微软雅黑',
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: true,
-        font: '10pt 微软雅黑',
     };
-    const leafXmjCol = {
-        getValue: {
-            jiacha: function (data) {
-                let sum = 0;
-                const sheet = leafXmjSpread.getActiveSheet();
-                const select = SpreadJsObj.getSelectObject(sheet);
-                const notx = findNotJoinLeafXmj(select);
-                if (notx === undefined) {
-                    for(const ml of materialList) {
-                        sum = ZhCalc.add(sum, ZhCalc.mul(ZhCalc.mul(data.gather_qty, ml.quantity), getMpSpreadByMBData(ml.mb_id)));
-                    }
-                }
-                return sum;
-            }
-        }
-    };
-    SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol);
+    // const leafXmjCol = {
+    //     getValue: {
+    //         jiacha: function (data) {
+    //             let sum = 0;
+    //             const sheet = leafXmjSpread.getActiveSheet();
+    //             const select = SpreadJsObj.getSelectObject(sheet);
+    //             const notx = findNotJoinLeafXmj(select);
+    //             if (notx === undefined) {
+    //                 for(const ml of materialList) {
+    //                     sum = ZhCalc.round(ZhCalc.add(sum, ZhCalc.mul(ZhCalc.mul(data.gather_qty, ml.quantity), getMpSpreadByMBData(ml.mb_id))), 2);
+    //                 }
+    //             }
+    //             return sum !== 0 ? sum : null;
+    //         }
+    //     }
+    // };
+    // SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol);
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     // 加载清单数据
     SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData);
@@ -124,16 +150,17 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [32, 32],
-        defaultRowHeight: 30,
-        headerFont: '10pt 微软雅黑',
-        font: '10pt 微软雅黑',
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     };
 
     const materialBase = {
         isEdit: function (data) {
             // 是否本期添加的工料
-            return data.mid === materialID;
+            console.log(data);
+            return data.order === stage_order;
         }
     };
 
@@ -230,6 +257,7 @@ $(document).ready(() => {
             gcl_id: xmj.gcl_id,
             mx_id: xmj.mx_id !== undefined ? xmj.mx_id : '',
             mb_id: mb_id,
+            gather_qty: xmj.gather_qty,
         };
         // 上传到数据库
         postData(window.location.pathname + '/save', {type: 'add', postData: data}, function (result) {
@@ -321,7 +349,7 @@ $(document).ready(() => {
             del: function () {
                 const sheet = materialSpread.getActiveSheet();
                 const select = SpreadJsObj.getSelectObject(sheet);
-                postData(window.location.pathname + '/save', {type: 'del', id: select.id}, function (result) {
+                postData(window.location.pathname + '/save', {type: 'del', id: select.id, mb_id: select.mb_id}, function (result) {
                     const index = materialList.indexOf(select);
                     materialList.splice(index, 1);
                     sheet.deleteRows(index, 1);
@@ -330,6 +358,9 @@ $(document).ready(() => {
                     sheet.setSelection(index > 0 ? index - 1 : 0, sel.length > 0 ? sel[0].col : 0, 1, 1);
                     const materialListIndex = materialListData.indexOf(select);
                     materialListData.splice(materialListIndex, 1);
+                    const [iGclRow, iRow, lsheet, lselect] = leafXmjSpreadObj.getSelect();
+                    gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect);
+                    SpreadJsObj.reLoadRowData(lsheet, iRow);
                 });
             },
             editEnded: function (e, info) {
@@ -343,8 +374,21 @@ $(document).ready(() => {
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         return;
                     }
+                    if (col.field === 'quantity') {
+                        if (isNaN(validText)) {
+                            toastr.error('不能输入其它非数字类型字符');
+                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                            return;
+                        }
+                        const num = parseFloat(validText);
+                        if (num < 0 || !/^\d+(\.\d{1,6})?$/.test(num)) {
+                            toastr.error('请输入大于0并且小于6位小数的浮点数');
+                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                            return;
+                        }
+                    }
                     // 更新至服务器
-                    postData(window.location.pathname + '/save', { type:'update', updateData: { id:select.id, quantity: validText } }, function (result) {
+                    postData(window.location.pathname + '/save', { type:'update', updateData: { id:select.id, quantity: validText, mb_id: select.mb_id } }, function (result) {
                         const materialListIndex = materialListData.indexOf(select);
                         const index = materialList.indexOf(select);
                         select[col.field] = validText;
@@ -352,6 +396,7 @@ $(document).ready(() => {
                         materialList.indexOf(index, 1, select);
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         const [iGclRow, iRow, sheet, lselect] = leafXmjSpreadObj.getSelect();
+                        gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect);
                         SpreadJsObj.reLoadRowData(sheet, iRow);
                     }, function () {
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -383,17 +428,17 @@ $(document).ready(() => {
             }
             // 判断需要应用调差工料的清单明细
             const needAddList = [];
+            const gather_qty = [];
             for (const xmj of ledgerSelect.leafXmjs) {
                 if (xmj.mx_id !== undefined) {
-                    const notx = notJoinList.find(function (item) {
-                        return item.gcl_id === xmj.gcl_id && item.xmj_id === xmj.id && (xmj.mx_id === undefined || (xmj.mx_id !== undefined && xmj.mx_id === item.mx_id));
-                    });
+                    const notx = findNotJoinLeafXmj(xmj);
                     if (notx === undefined) {
                         const ml = materialListData.find(function (item) {
                             return xmj.mx_id === item.mx_id && select.mb_id === item.mb_id;
                         });
                         if (ml === undefined) {
                             needAddList.push(xmj.mx_id);
+                            gather_qty.push(xmj.gather_qty);
                         }
                     }
                 }
@@ -403,9 +448,15 @@ $(document).ready(() => {
                 return false;
             }
             // 更新至服务器
-            postData(window.location.pathname + '/save', { type:'useOther', postData: { mx_id: needAddList, select: select  } }, function (result) {
+            postData(window.location.pathname + '/save', { type:'useOther', postData: { mx_id: needAddList, select: select, gather_qty: gather_qty } }, function (result) {
                 materialListData = result;
                 toastr.success('成功添加了' + needAddList.length + '条调差工料到其他清单明细中');
+                const index = gclGatherData.indexOf(ledgerSelect);
+                loadLeafXmjData(index);
+                const xmjSheet = leafXmjSpread.getActiveSheet();
+                const xmjSelect = SpreadJsObj.getSelectObject(xmjSheet);
+                const xmjIndex = gclGatherData[index].leafXmjs.indexOf(xmjSelect);
+                loadMaterialData(index, xmjIndex);
             });
         });
         $.contextMenu({
@@ -426,9 +477,7 @@ $(document).ready(() => {
                     disabled: function (key, opt) {
                         const sheet = leafXmjSpread.getActiveSheet();
                         const select = SpreadJsObj.getSelectObject(sheet);
-                        const notx = notJoinList.find(function (item) {
-                            return item.gcl_id === select.gcl_id && item.xmj_id === select.id && (select.mx_id === undefined || (select.mx_id !== undefined && select.mx_id === item.mx_id));
-                        });
+                        const notx = findNotJoinLeafXmj(select);
                         if (!readOnly && notx === undefined) {
                             return false;
                         } else {
@@ -511,6 +560,7 @@ $(document).ready(() => {
         SpreadJsObj.resetTopAndSelect(ledgerSpread.getActiveSheet());
         SpreadJsObj.resetTopAndSelect(leafXmjSpread.getActiveSheet());
         SpreadJsObj.resetTopAndSelect(materialSpread.getActiveSheet());
+        checkNotJoinMaterialData();
 
     });
 

+ 6 - 2
app/public/js/measure_compare.js

@@ -24,7 +24,9 @@ const billsSpreadSetting = {
     ],
     emptyRows: 3,
     headRows: 2,
-    headRowHeight: [40, 40],
+    headRowHeight: [25, 25],
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
     defaultRowHeight: 21,
     readOnly: true,
 };
@@ -38,8 +40,10 @@ const posSpreadSetting = {
     ],
     emptyRows: 3,
     headRows: 1,
-    headRowHeight: [40],
+    headRowHeight: [32],
     defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
     readOnly: true,
 };
 function initSpreadSettingWithRoles(compareRoles) {

+ 99 - 67
app/public/js/revise.js

@@ -10,7 +10,7 @@
 
 const ckBillsSpread = window.location.pathname + '-billsSelect';
 function transExpr(expr) {
-    return expr.replace('=', '').replace('%', '/100');
+    return $.trim(expr).replace('\t', '').replace('=', '').replace('%', '/100');
 }
 
 $(document).ready(() => {
@@ -42,7 +42,7 @@ $(document).ready(() => {
     });
     const posSearch = $.posSearch({selector: '#pos-search', searchSpread: posSpread});
 
-    // 初始化 清单树结构
+    // 初始化 节点树结构
     const treeSetting = {
         id: 'ledger_id',
         pid: 'ledger_pid',
@@ -64,7 +64,7 @@ $(document).ready(() => {
     // 加载至spread
     SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, billsTree);
     SpreadJsObj.loadTopAndSelect(billsSheet, ckBillsSpread);
-    // 初始化 部位明细
+    // 初始化 计量单元
     const pos = new PosData({ id: 'id', ledgerId: 'lid' });
     pos.loadDatas(posData);
 
@@ -96,7 +96,7 @@ $(document).ready(() => {
                     const rNode = sheet.zh_tree.nodes[sel.row + r];
                     if (rNode.level > node.level) continue;
                     if ((rNode.level < node.level) || (rNode.level === node.level && rNode.pid !== node.pid)) {
-                        toastr.warning('请选择同一清单下的节点,进行该操作');
+                        toastr.warning('请选择同一节点下的节点,进行该操作');
                         return;
                     }
                     count += 1;
@@ -235,7 +235,7 @@ $(document).ready(() => {
                 for (let i = 0; i < count; i++) {
                     const child = children[i+index];
                     if (tree.checkNodeUsed(child, pos)) {
-                        toastr.warning('选中的清单已计量,不可删除');
+                        toastr.warning('选中的节点已计量,不可删除');
                         return;
                     }
                 }
@@ -247,9 +247,9 @@ $(document).ready(() => {
                     const child = children[index];
                     if (tree.checkNodeUsed(child, pos)) {
                         if (i >= index + count) {
-                            toastr.warning('其后清单已计量,选中的清单不可升级');
+                            toastr.warning('其后节点已计量,选中的节点不可升级');
                         } else {
-                            toastr.warning('选中的清单已计量,不可升级');
+                            toastr.warning('选中的节点已计量,不可升级');
                         }
                         return;
                     }
@@ -261,7 +261,7 @@ $(document).ready(() => {
                 for (let i = 0; i < count; i++) {
                     const child = children[i+index];
                     if (tree.checkNodeUsed(child, pos)) {
-                        toastr.warning('选中的清单已计量,不可降级');
+                        toastr.warning('选中的节点已计量,不可降级');
                         return;
                     }
                 }
@@ -315,7 +315,7 @@ $(document).ready(() => {
                 if (orgValue == info.editingText || ((!orgValue || orgValue === '') && (info.editingText === ''))) {
                     return;
                 }
-                // 台账模式,检查部位明细相关
+                // 台账模式,检查计量单元相关
                 if (isTz) {
                     if (col.field === 'sgfh_qty' || col.field === 'sgfh_tp' ||
                         col.field === 'sjcl_qty' || col.field === 'sjcl_tp' ||
@@ -323,7 +323,7 @@ $(document).ready(() => {
                         if (!node.children || node.children.length ===0) {
                             const lPos = pos.getLedgerPos(node.id);
                             if (lPos && lPos.length > 0) {
-                                toastr.error('清单含有部位明细,不可修改施工图复核数量');
+                                toastr.error('清单含有计量单元,不可修改施工图复核数量');
                                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
                                 return;
                             }
@@ -332,7 +332,7 @@ $(document).ready(() => {
                     if (col.field === 'b_code' && (info.editingText === '' || !info.editingText)) {
                         const lPos = pos.getLedgerPos(node.id);
                         if (lPos && lPos.length > 0) {
-                            toastr.error('清单含有部位明细,请先删除部位明细,再删除清单编号');
+                            toastr.error('清单含有计量单元,请先删除计量单元,再删除清单编号');
                             SpreadJsObj.reLoadRowData(info.sheet, info.row);
                             return;
                         }
@@ -342,7 +342,7 @@ $(document).ready(() => {
                 if (info.editingText) {
                     const text = info.editingText.replace('\n', '');
                     if (node.used && (col.field === 'code' || col.field ==='b_code') && orgValue !== '' && text === '') {
-                        toastr.error('清单已计量,请删除编号');
+                        toastr.error('节点已计量,请勿删除编号');
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         return;
                     }
@@ -364,7 +364,7 @@ $(document).ready(() => {
                     }
                 } else {
                     if (node.used && (col.field === 'code' || col.field ==='b_code') && orgValue !== '') {
-                        toastr.error('清单已计量,请删除编号');
+                        toastr.error('节点已计量,请勿删除编号');
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         return;
                     }
@@ -392,11 +392,11 @@ $(document).ready(() => {
         },
         clipboardPasted: function (e, info) {
             const hint = {
-                usedUp: {type: 'error', msg: '清单已计量,不可修改单价'},
-                usedCode: {type: 'error', msg: '清单已计量,编号不可修改为空值'},
+                usedUp: {type: 'error', msg: '节点已计量,不可修改单价'},
+                usedCode: {type: 'error', msg: '节点已计量,编号不可修改为空值'},
                 invalidExpr: {type: 'error', msg: '粘贴的表达式非法'},
-                posCode: {type: 'error', msg: '清单含有部位明细,请先删除部位明细,再修改清单编号为空'},
-                posQty: {type: 'error', msg: '清单含有部位明细,数量金额根据部位明细汇总计算所得,不可修改'},
+                posCode: {type: 'error', msg: '清单含有计量单元,请先删除计量单元,再修改清单编号为空'},
+                posQty: {type: 'error', msg: '清单含有计量单元,数量金额根据计量单元汇总计算所得,不可修改'},
             };
 
             const tree = info.sheet.zh_tree;
@@ -514,6 +514,10 @@ $(document).ready(() => {
                 pos.updateDatas(data.pos);
                 const result = tree.loadPostData(data.ledger);
                 self.refreshTree(sheet, result);
+                const sel = sheet.getSelections()[0];
+                if (sel) {
+                    sheet.setSelection(tree.nodes.indexOf(refreshData.create[0]), sel.col, sel.rowCount, sel.colCount);
+                }
                 self.refreshOperationValid(sheet);
                 removeLocalCache(copyBlockTag);
             }, null, true);
@@ -528,6 +532,7 @@ $(document).ready(() => {
             switch (col.field) {
                 case 'unit_price':
                     info.cancel = (node.children && node.children.length > 0) || node.used;
+                    break;
                 case 'sgfh_qty':
                 case 'sgfh_tp':
                 case 'sjcl_qty':
@@ -556,6 +561,8 @@ $(document).ready(() => {
         });
 
         $('#bills-expr').bind('change mouseleave', function () {
+            if (this.readOnly) return;
+
             const expr = $(this);
             const select = SpreadJsObj.getSelectObject(billsSheet);
             const field = expr.attr('field'), orgValue = expr.attr('org'), newValue = expr.val();
@@ -601,7 +608,7 @@ $(document).ready(() => {
             },
             items: {
                 'batchInsertBillsPos': {
-                    name: '批量插入清单-部位',
+                    name: '批量插入节点-部位',
                     icon: 'fa-sign-in',
                     disabled: function (key, opt) {
                         const select = SpreadJsObj.getSelectObject(billsSheet);
@@ -637,7 +644,7 @@ $(document).ready(() => {
 
     const posSpreadObj = {
         /**
-         * 加载部位明细 根据当前台账选择节点
+         * 加载计量单元 根据当前台账选择节点
          */
         loadCurPosData: function () {
             const node = SpreadJsObj.getSelectObject(billsSheet);
@@ -675,11 +682,11 @@ $(document).ready(() => {
                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
                 return;
             } else if (newText && newText !== '' && node.children && node.children.length > 0) {
-                toastr.error('父节点不可插入部位明细');
+                toastr.error('父节点不可插入计量单元');
                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
                 return;
             } else if (newText && newText !== '' && (!node.b_code || node.b_code === '')) {
-                toastr.error('项目节不可插入部位明细');
+                toastr.error('项目节不可插入计量单元');
                 SpreadJsObj.reLoadRowData(info.sheet, info.row);
                 return;
             }
@@ -700,7 +707,7 @@ $(document).ready(() => {
                         return;
                     }
                 } else {
-                    data.posPostType = 'update-pos';
+                    data.posPostType = 'update';
                     data.postData = {id: posData.id, name: newText};
                 }
             } else if (!posData) {
@@ -789,7 +796,7 @@ $(document).ready(() => {
             }
         },
         /**
-         * 删除 部位明细
+         * 删除 计量单元
          * @param sheet
          */
         deletePos: function (sheet) {
@@ -844,12 +851,12 @@ $(document).ready(() => {
         clipboardPasted: function (e, info) {
             const node = SpreadJsObj.getSelectObject(billsSheet);
             if (node.code && (node.code !== '')) {
-                toastr.error('项目节不可含有清单明细');
+                toastr.error('项目节不可含有节点明细');
                 posSpreadObj.loadCurPosData();
                 return;
             }
             if (node.children && (node.children.length > 0)) {
-                toastr.error('仅清单子项可以含有部位明细');
+                toastr.error('仅节点子项可以含有计量单元');
                 posSpreadObj.loadCurPosData();
                 return;
             }
@@ -934,6 +941,8 @@ $(document).ready(() => {
     posSpread.bind(spreadNS.Events.SelectionChanged, posSpreadObj.selectionChanged);
     if (!readOnly) {
         $('#pos-expr').bind('change mouseleave', function () {
+            if (this.readOnly) return;
+
             const expr = $(this);
             const select = SpreadJsObj.getSelectObject(posSheet);
             const field = expr.attr('field'), orgValue = expr.attr('org'), newValue = expr.val();
@@ -1036,7 +1045,7 @@ $(document).ready(() => {
 
                     if (stdType === 'gcl') {
                         if (mainNode.code && mainNode.code !== '' && !mainTree.isLeafXmj(mainNode)) {
-                            toastr.warning('非最底层项目下,不应添加清单');
+                            toastr.warning('非最底层项目下,不应添加节点');
                             return;
                         }
                     }
@@ -1104,7 +1113,7 @@ $(document).ready(() => {
                     if (!mainNode || !mainTree) { return; }
 
                     if (mainNode.code && mainNode.code !== '' && !mainTree.isLeafXmj(mainNode)) {
-                        toastr.warning('非最底层项目下,不应添加清单');
+                        toastr.warning('非最底层项目下,不应添加节点');
                         return;
                     }
 
@@ -1165,7 +1174,9 @@ $(document).ready(() => {
                 ],
                 emptyRows: this.billsCount,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             this.qdSpread = SpreadJsObj.createNewSpread($('.batch-l-t', this.obj)[0]);
             // 初始化 部位数量复核表 参数
@@ -1176,15 +1187,17 @@ $(document).ready(() => {
                 ],
                 emptyRows: this.posCount,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             for (let iNum = 1; iNum <= this.billsCount; iNum++) {
                 this.posSpreadSetting.cols.push(
-                    {title: '清单' + iNum, field: 'bills' + iNum, hAlign: 2, width: 50}
+                    {title: '节点' + iNum, field: 'bills' + iNum, hAlign: 2, width: 50}
                 )
             }
             this.posSpread = SpreadJsObj.createNewSpread($('.batch-l-b', this.obj)[0]);
-            // 初始化 签约清单 参数
+            // 初始化 签约节点 参数
             this.dealSpreadSetting = {
                 cols: [
                     {title: '清单编号', field: 'code', width: 80, formatter: '@', readOnly: true},
@@ -1194,17 +1207,19 @@ $(document).ready(() => {
                 ],
                 emptyRows: 0,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             };
             this.dealSpread = SpreadJsObj.createNewSpread($('.batch-r', this.obj)[0]);
             // 初始化 清单编号、部位数量复核表 表格
             this.initView();
             SpreadJsObj.initSheet(this.dealSpread.getActiveSheet(), this.dealSpreadSetting);
             SpreadJsObj.refreshColumnAlign(this.dealSpread.getActiveSheet());
-            // 拉取签约清单数据
+            // 拉取签约节点数据
             dealBills.loadData();
             SpreadJsObj.loadSheetData(this.dealSpread.getActiveSheet(), 'data', dealBills.data);
-            // 双击签约清单,自动添加到清单编号窗口
+            // 双击签约节点,自动添加到清单编号窗口
             this.dealSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (e, info) {
                 const deal = info.sheet.zh_data[info.row];
                 const qdSheet = self.qdSpread.getActiveSheet(), posSheet = self.posSpread.getActiveSheet();
@@ -1216,7 +1231,7 @@ $(document).ready(() => {
                 if (sel.row + 1 === qdSheet.getRowCount()) {
                     const count = sel.row + 2;
                     qdSheet.setRowCount(count);
-                    qdSheet.getCell(sel.row + 1, 0, GC.Spread.Sheets.SheetArea.rowHeader).text('清单' + count);
+                    qdSheet.getCell(sel.row + 1, 0, GC.Spread.Sheets.SheetArea.rowHeader).text('节点' + count);
 
                     const colCount = posSheet.getColumnCount() + 1
                     posSheet.setColumnCount(colCount);
@@ -1261,7 +1276,7 @@ $(document).ready(() => {
             SpreadJsObj.beginMassOperation(qdSheet);
             qdSheet.clear(0, 0, qdSheet.getRowCount(), qdSheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
             for (let iRow = 1; iRow <= this.billsCount; iRow++) {
-                qdSheet.getCell(iRow - 1, 0, GC.Spread.Sheets.SheetArea.rowHeader).text('清单' + iRow);
+                qdSheet.getCell(iRow - 1, 0, GC.Spread.Sheets.SheetArea.rowHeader).text('节点' + iRow);
             }
             qdSheet.setSelection(0, 0, 1 ,1);
             SpreadJsObj.endMassOperation(qdSheet);
@@ -1275,7 +1290,7 @@ $(document).ready(() => {
             posSheet.clear(0, 0, posSheet.getRowCount(), posSheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
             posSheet.setSelection(0, 0, 1 ,1);
             SpreadJsObj.endMassOperation(posSheet);
-            // 检查签约清单数据,以工具栏数据为准
+            // 检查签约节点数据,以工具栏数据为准
             if (dealBills) {
                 SpreadJsObj.loadSheetData(this.dealSpread.getActiveSheet(), 'data', dealBills.data);
             }
@@ -1321,8 +1336,10 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 1,
-        headRowHeight: [40],
+        headRowHeight: [32],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     });
     $.divResizer({
         select: '#revise-right-spr',
@@ -1339,33 +1356,40 @@ $(document).ready(() => {
             }
         }
     });
-    // 展开收起标准清单
+    const showSideTools = function (show) {
+        const left = $('#left-view'), right = $('#right-view'), parent = left.parent();
+        if (show) {
+            right.show();
+            autoFlashHeight();
+            /**
+             * right.show()后, parent被撑开成2倍left.height, 导致parent.width减少了10px
+             * 第一次left.width调整后,parent的缩回left.height, 此时parent.width又增加了10px
+             * 故需要通过最终的parent.width再计算一次left.width
+             *
+             * Q: 为什么不通过先计算left.width的宽度,以避免计算两次left.width?
+             * A: 右侧工具栏不一定显示,当右侧工具栏显示过一次后,就必须使用parent和right来计算left.width
+             *
+             */
+                //left.css('width', parent.width() - right.outerWidth());
+                //left.css('width', parent.width() - right.outerWidth());
+            const percent = 100 - right.outerWidth() /parent.width() * 100;
+            left.css('width', percent + '%');
+        } else {
+            left.width(parent.width());
+            right.hide();
+        }
+    };
+    $('#content-tab').addClass('active');
+    $('#xd-content').addClass('active');
+    showSideTools(true);
+    billsSpread.refresh();
+    if (posSpread) {
+        posSpread.refresh();
+    }
+    // 展开收起标准节点
     $('a', '#side-menu').bind('click', function (e) {
         e.preventDefault();
         const tab = $(this), tabPanel = $(tab.attr('content'));
-        const showSideTools = function (show) {
-            const left = $('#left-view'), right = $('#right-view'), parent = left.parent();
-            if (show) {
-                right.show();
-                autoFlashHeight();
-                /**
-                 * right.show()后, parent被撑开成2倍left.height, 导致parent.width减少了10px
-                 * 第一次left.width调整后,parent的缩回left.height, 此时parent.width又增加了10px
-                 * 故需要通过最终的parent.width再计算一次left.width
-                 *
-                 * Q: 为什么不通过先计算left.width的宽度,以避免计算两次left.width?
-                 * A: 右侧工具栏不一定显示,当右侧工具栏显示过一次后,就必须使用parent和right来计算left.width
-                 *
-                 */
-                    //left.css('width', parent.width() - right.outerWidth());
-                    //left.css('width', parent.width() - right.outerWidth());
-                const percent = 100 - right.outerWidth() /parent.width() * 100;
-                left.css('width', percent + '%');
-            } else {
-                left.width(parent.width());
-                right.hide();
-            }
-        };
         // 展开工具栏、切换标签
         if (!tab.hasClass('active')) {
             const close = $('.active', '#side-menu').length === 0;
@@ -1392,8 +1416,10 @@ $(document).ready(() => {
                         treeCol: 0,
                         emptyRows: 0,
                         headRows: 1,
-                        headRowHeight: [40],
+                        headRowHeight: [32],
                         defaultRowHeight: 21,
+                        headerFont: '12px 微软雅黑',
+                        font: '12px 微软雅黑',
                     });
                     stdXmj.loadLib($('select', '#std-xmj').val());
                 }
@@ -1416,8 +1442,10 @@ $(document).ready(() => {
                         treeCol: 0,
                         emptyRows: 0,
                         headRows: 1,
-                        headRowHeight: [40],
+                        headRowHeight: [32],
                         defaultRowHeight: 21,
+                        headerFont: '12px 微软雅黑',
+                        font: '12px 微软雅黑',
                     });
                     stdGcl.loadLib($('select', '#std-gcl').val());
                 }
@@ -1441,8 +1469,10 @@ $(document).ready(() => {
                             ],
                             emptyRows: 0,
                             headRows: 1,
-                            headRowHeight: [40],
+                            headRowHeight: [32],
                             defaultRowHeight: 21,
+                            headerFont: '12px 微软雅黑',
+                            font: '12px 微软雅黑',
                         },
                         afterLocated: function () {
                             posSpreadObj.loadCurPosData();
@@ -1466,8 +1496,10 @@ $(document).ready(() => {
     if (!readOnly) {
         // 修订详情 保存
         $('#save').click(function () {
-            const content = $('textarea').val();
-            postData('save', { content: content });
+            const content = $('#content').val();
+            postData('save', { content: content }, function () {
+                $('#content').attr('org-value', content);
+            });
         });
     }
 

+ 4 - 2
app/public/js/revise_history.js

@@ -227,8 +227,10 @@ $(document).ready(() => {
                             ],
                             emptyRows: 0,
                             headRows: 1,
-                            headRowHeight: [40],
+                            headRowHeight: [32],
                             defaultRowHeight: 21,
+                            headerFont: '12px 微软雅黑',
+                            font: '12px 微软雅黑',
                         },
                         afterLocated: function () {
                             posSpreadObj.loadCurPosData();
@@ -280,7 +282,7 @@ $(document).ready(() => {
         postData(window.location.pathname + '/info', { rid: this.value }, function (result) {
             $('#user-name').val(result.user_name);
             $('#content')[0].textContent = result.content;
-            $('#end-time').val(result.end_time.toLocaleString());
+            $('#end-time').val(result.end_time_str);
         });
     });
 });

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

@@ -32,6 +32,7 @@ $(document).ready(() => {
         $('#edit-user input[name="id"]').val(account.id);
         $('#edit-user select[name="account_group"]').val(account.account_group);
         $('#edit-user input[class="account-check"]').val(account.account);
+        $('#edit-user input[class="auth-mobile"]').val(account.auth_mobile);
     });
 
     // 分配随机密码

+ 269 - 63
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -389,11 +389,17 @@ const SpreadJsObj = {
             sheet.getRange(-1, col, -1, 1).cellType(sheet.extendCellType.image);
         }
         if (colSetting.cellType === 'imageBtn') {
-            if (!sheet.extendCellType.image) {
+            if (!sheet.extendCellType.imageBtn) {
                 sheet.extendCellType.imageBtn = this.CellType.getImageButtonCellType();
             }
             sheet.getRange(-1, col, -1, 1).cellType(sheet.extendCellType.imageBtn);
         }
+        if (colSetting.cellType === 'activeImageBtn') {
+            if (!sheet.extendCellType.activeImageBtn) {
+                sheet.extendCellType.activeImageBtn = this.CellType.getActiveImageButtonCellType();
+            }
+            sheet.getRange(-1, col, -1, 1).cellType(sheet.extendCellType.activeImageBtn);
+        }
         if (colSetting.cellType === 'tree') {
             if (!sheet.extendCellType.tree) {
                 sheet.extendCellType.tree = this.CellType.getTreeNodeCellType();
@@ -1177,7 +1183,7 @@ const SpreadJsObj = {
             AutoTipCellType.prototype = SpreadJsObj.CellType.getTipCellType();
             const proto = AutoTipCellType.prototype
             proto.showTip = function (hitinfo, text) {
-                return text && text !== '' && this.getTextDisplayWidth(hitinfo, text) > hitinfo.cellRect.width;
+                return text && text !== '' && this.getTextDisplayWidth(hitinfo, text) > hitinfo.cellRect.widthidth;
             };
 
             return new AutoTipCellType();
@@ -1377,10 +1383,6 @@ const SpreadJsObj = {
                     sheetArea: context.sheetArea
                 };
             };
-            /**
-             * 鼠标点击
-             * @param {Object} hitinfo - 见getHitInfo
-             */
             proto.processMouseEnter = function (hitinfo) {
                 const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
                 // Drawing Image
@@ -1393,15 +1395,49 @@ const SpreadJsObj = {
             proto.processMouseLeave = function (hitinfo) {
                 const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
                 // Drawing Image
-                if (col.hoverImg) {
-                    const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
-                    cell.tag(null);
-                    hitinfo.sheet.repaint(hitinfo.cellRect);
-                }
+                const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                cell.tag(null);
+                hitinfo.sheet.repaint(hitinfo.cellRect);
             };
+            // proto.processMouseDown = function (hitinfo) {
+            //     const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+            //     if (col.activeImg) {
+            //         const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+            //         cell.tag(active);
+            //         hitinfo.sheet.repaint(hitinfo.cellRect);
+            //     }
+            // };
+            // proto.processMouseUp = function (hitinfo) {
+            //     const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+            //     const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
+            //     const data = sortData ? sortData[hitinfo.row] : null;
+            //     if (col.showImage && Object.prototype.toString.apply(col.showImage) === "[object Function]") {
+            //         if (!col.showImage(data)) {
+            //             return;
+            //         }
+            //     }
+            //     const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
+            //     if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
+            //         imageClick(data);
+            //         const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+            //         cell.tag(null);
+            //         hitinfo.sheet.repaint(hitinfo.cellRect);
+            //     }
+            // };
+            /*
+             注释部分以进入鼠标进入图片,点击图片为基准更新图片,鼠标快速移动时,可能失效
+              */
             proto.processMouseDown = function (hitinfo) {
                 const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
-                if (col.activeImg) {
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
                     const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
                     cell.tag(active);
                     hitinfo.sheet.repaint(hitinfo.cellRect);
@@ -1409,73 +1445,243 @@ const SpreadJsObj = {
             };
             proto.processMouseUp = function (hitinfo) {
                 const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
-                const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
-                const data = sortData ? sortData[hitinfo.row] : null;
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+                    const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
+                    if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
+                        const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
+                        const data = sortData ? sortData[hitinfo.row] : null;
+                        imageClick(data);
+                        const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                        cell.tag(null);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                }
+            };
+            proto.processMouseMove = function (hitinfo) {
+                const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+                const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+                    if (cell.tag() !== hover) {
+                        cell.tag(hover);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                } else {
+                    if (cell.tag() === hover) {
+                        cell.tag(null);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                }
+            };
+            return new ImageCellType();
+        },
+        getActiveImageButtonCellType: function () {
+            let show = 1, hover = 2, active = 2;
+            const ImageCellType = function (){};
+            ImageCellType.prototype = new spreadNS.CellTypes.Text();
+            const proto = ImageCellType.prototype;
+            proto.getImage = function (sheet, iRow, iCol) {
+                const col = sheet.zh_setting.cols[iCol];
+                let imgSource = null;
+                const cell = sheet.getCell(iRow, iCol), tag = cell.tag();
+                if (tag === show) {
+                    imgSource = col.normalImg;
+                } else if (tag === active) {
+                    imgSource = col.activeImg ? col.activeImg : (col.hoverImg ? col.hoverImg : col.normalImg);
+                } else if (tag === hover) {
+                    imgSource = col.hoverImg ? col.hoverImg : col.normalImg;
+                }
+                if (imgSource && Object.prototype.toString.apply(imgSource) === "[object Function]") {
+                    const sortData = SpreadJsObj.getSortData(sheet);
+                    const data = sortData ? sortData[iRow] : null;
+                    return data ? imgSource(data) : null;
+                } else {
+                    return $(imgSource)[0] ? $(imgSource)[0] : null;
+                }
+
+            };
+            proto.paint = function (canvas, value, x, y, w, h, style, options) {
+                const col = options.sheet.zh_setting.cols[options.col];
+
+                const sortData = SpreadJsObj.getSortData(options.sheet);
+                const data = sortData ? sortData[options.row] : null;
+                let showImage = true;
                 if (col.showImage && Object.prototype.toString.apply(col.showImage) === "[object Function]") {
-                    if (!col.showImage(data)) {
-                        return;
+                    showImage = col.showImage(data);
+                }
+                const img = showImage ? this.getImage(options.sheet, options.row, options.col) : null;
+
+                const indent = col.indent ? col.indent : 10;
+                if (style.hAlign === spreadNS.HorizontalAlign.right) {
+                    if (img) {
+                        if (style.backColor) {
+                            canvas.save();
+                            canvas.fillStyle = style.backColor;
+                            canvas.fillRect(x + w - indent - img.width, y, img.width, h);
+                            canvas.restore();
+                        }
+                        canvas.drawImage(img, x + w - indent - img.width, y + (h - img.height) / 2);
+                        w = w - indent - img.width;
+                    }
+                    // Drawing Text
+                    spreadNS.CellTypes.Text.prototype.paint.apply(this, [canvas, value, x, y, w, h, style, options]);
+                } else {
+                    if (img) {
+                        if (style.backColor) {
+                            canvas.save();
+                            canvas.fillStyle = style.backColor;
+                            canvas.fillRect(x, y, indent + img.width, h);
+                            canvas.restore();
+                        }
+                        canvas.drawImage(img, x + 10, y + (h - img.height) / 2);
+                        if (style.hAlign !== spreadNS.HorizontalAlign.left) {
+                            style.hAlign = spreadNS.HorizontalAlign.left;
+                        }
+                        x = x + indent + img.width;
+                        w = w - indent - img.width;
                     }
+                    // Drawing Text
+                    spreadNS.CellTypes.Text.prototype.paint.apply(this, [canvas, value, x, y, w, h, style, options]);
                 }
-                const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
-                if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
-                    imageClick(data);
+
+            };
+            /**
+             * 获取点击信息
+             * @param {Number} x
+             * @param {Number} y
+             * @param {Object} cellStyle
+             * @param {Object} cellRect
+             * @param {Object} context
+             * @returns {{x: *, y: *, row: *, col: *|boolean|*[]|number|{}|UE.dom.dtd.col, cellStyle: *, cellRect: *, sheet: *|StyleSheet, sheetArea: *}}
+             */
+            proto.getHitInfo = function (x, y, cellStyle, cellRect, context) {
+                return {
+                    x: x,
+                    y: y,
+                    row: context.row,
+                    col: context.col,
+                    cellStyle: cellStyle,
+                    cellRect: cellRect,
+                    sheet: context.sheet,
+                    sheetArea: context.sheetArea
+                };
+            };
+            proto.processMouseEnter = function (hitinfo) {
+                const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+                // Drawing Image
+                if (col.normalImg) {
                     const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
-                    cell.tag(null);
+                    cell.tag(show);
                     hitinfo.sheet.repaint(hitinfo.cellRect);
                 }
             };
-            /*
-             注释部分以进入鼠标进入图片,点击图片为基准更新图片,鼠标快速移动时,可能失效
-              */
+            proto.processMouseLeave = function (hitinfo) {
+                const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                cell.tag(null);
+                hitinfo.sheet.repaint(hitinfo.cellRect);
+            };
             // proto.processMouseDown = function (hitinfo) {
-            //     const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
-            //     const halfX = img.width / 2, halfY = img.height / 2;
-            //     const centerX = hitinfo.cellRect.x + indent + halfX;
-            //     const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
-            //
-            //     if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+            //     const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+            //     if (col.activeImg) {
             //         const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
-            //         cell.tag(down);
+            //         cell.tag(active);
             //         hitinfo.sheet.repaint(hitinfo.cellRect);
             //     }
             // };
             // proto.processMouseUp = function (hitinfo) {
-            //     const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
-            //     const halfX = img.width / 2, halfY = img.height / 2;
-            //     const centerX = hitinfo.cellRect.x + indent + halfX;
-            //     const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
-            //
-            //     // 点击展开节点时,如果已加载子项,则展开,反之这加载子项,展开
-            //     if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
-            //         const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
-            //         if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
-            //             const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
-            //             const data = sortData ? sortData[hitinfo.row] : null;
-            //             imageClick(data);
-            //             const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
-            //             cell.tag(null);
-            //             hitinfo.sheet.repaint(hitinfo.cellRect);
+            //     const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+            //     const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
+            //     const data = sortData ? sortData[hitinfo.row] : null;
+            //     if (col.showImage && Object.prototype.toString.apply(col.showImage) === "[object Function]") {
+            //         if (!col.showImage(data)) {
+            //             return;
             //         }
             //     }
-            // };
-            // proto.processMouseMove = function (hitinfo) {
-            //     const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
-            //     const halfX = img.width / 2, halfY = img.height / 2;
-            //     const centerX = hitinfo.cellRect.x + indent + halfX;
-            //     const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
-            //     const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
-            //     if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
-            //         if (cell.tag() !== hover) {
-            //             cell.tag(hover);
-            //             hitinfo.sheet.repaint(hitinfo.cellRect);
-            //         }
-            //     } else {
-            //         if (cell.tag() === hover) {
-            //             cell.tag(null);
-            //             hitinfo.sheet.repaint(hitinfo.cellRect);
-            //         }
+            //     const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
+            //     if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
+            //         imageClick(data);
+            //         const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+            //         cell.tag(null);
+            //         hitinfo.sheet.repaint(hitinfo.cellRect);
             //     }
             // };
+            /*
+             注释部分以进入鼠标进入图片,点击图片为基准更新图片,鼠标快速移动时,可能失效
+              */
+            proto.processMouseDown = function (hitinfo) {
+                const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+                    const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                    cell.tag(active);
+                    hitinfo.sheet.repaint(hitinfo.cellRect);
+                }
+            };
+            proto.processMouseUp = function (hitinfo) {
+                const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+                    const imageClick = hitinfo.sheet.zh_setting ? hitinfo.sheet.zh_setting.imageClick : null;
+                    if (imageClick && Object.prototype.toString.apply(imageClick) === "[object Function]") {
+                        const sortData = SpreadJsObj.getSortData(hitinfo.sheet);
+                        const data = sortData ? sortData[hitinfo.row] : null;
+                        imageClick(data);
+                        const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                        cell.tag(hover);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                }
+            };
+            proto.processMouseMove = function (hitinfo) {
+                const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
+                const img = this.getImage(hitinfo.sheet, hitinfo.row, hitinfo.col);
+                const halfX = img.width / 2, halfY = img.height / 2;
+                const indent = col.indent ? col.indent : 10;
+                const centerX = hitinfo.cellStyle.hAlign === spreadNS.HorizontalAlign.right
+                    ? hitinfo.cellRect.x + hitinfo.cellRect.width - indent -halfX
+                    : hitinfo.cellRect.x + indent + halfX;
+                const centerY = hitinfo.cellRect.y + hitinfo.cellRect.height / 2;
+                const cell = hitinfo.sheet.getCell(hitinfo.row, hitinfo.col);
+                if (Math.abs(hitinfo.x - centerX) < halfX && Math.abs(hitinfo.y - centerY) < halfY) {
+                    if (cell.tag() !== hover) {
+                        cell.tag(hover);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                } else {
+                    if (cell.tag() === hover) {
+                        cell.tag(show);
+                        hitinfo.sheet.repaint(hitinfo.cellRect);
+                    }
+                }
+            };
             return new ImageCellType();
         },
         /**
@@ -1649,7 +1855,7 @@ const SpreadJsObj = {
         };
         const getAnalysisPasteHtml = function () {
             return SpreadJsObj.analysisPasteHtml(cHtml);
-        }
+        };
         return {
             setCopyData, getPasteData, clearData,
             setSheetFilterCopyData,

+ 35 - 23
app/public/js/stage.js

@@ -13,7 +13,7 @@ function checkTzMeasureType () {
 }
 
 function transExpr(expr) {
-    return expr.replace('=', '').replace('%', '/100');
+    return $.trim(expr).replace('\t', '').replace('=', '').replace('%', '/100');
 }
 
 /**
@@ -162,7 +162,7 @@ $(document).ready(() => {
         node.final_dgn_price = ZhCalc.round(ZhCalc.div(node.end_gather_tp, ZhCalc.add(node.deal_dgn_qty1, node.c_dgn_qty1)), tenderInfo.decimal.up);
     };
     const stageTree = createNewPathTree('stage', stageTreeSetting);
-    // 初始化 部位明细 数据结构
+    // 初始化 计量单元 数据结构
     const stagePosSetting = {
         id: 'id', ledgerId: 'lid',
         updateFields: ['contract_qty', 'qc_qty', 'postil'],
@@ -194,13 +194,16 @@ $(document).ready(() => {
                     }},
                     {title: '变更令号', field: 'code', width: 100, formatter: '@', readOnly: true, hAlign: 0, },
                     {title: '名称', field: 'name', width: 120, formatter: '@', readOnly: true, hAlign: 0,},
-                    {title: '总数量', field: 'b_amount', width: 60, formatter: '@', readOnly: true, hAlign: 2, },
+                    {title: '变更部位', field: 'b_bwmx', width: 100, formatter: '@', readOnly: true, hAlign: 0,},
+                    //{title: '总数量', field: 'b_amount', width: 60, formatter: '@', readOnly: true, hAlign: 2, },
                     {title: '可变更数量', field: 'vamount', width: 60, readOnly: true, hAlign: 2, getValue: function (data) {return data.vamount ? data.vamount + '' : '0';}},
                     {title: '本期计量', field: 'uamount', width: 60, formatter: '@', hAlign: 2, type: 'Number', },
                 ],
                 emptyRows: 0,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
                 getColor: function (sheet, data, col, defaultColor) {
                     if (col.field === 'uamount') {
                         if (!data.vamount) {
@@ -433,8 +436,8 @@ $(document).ready(() => {
     // 数量变更列,添加按钮
     const col = _.find(ledgerSpreadSetting.cols, {field: 'qc_qty'});
     col.readOnly = true;
-    col.cellType = 'imageBtn';
-    col.hoverImg = '#ellipsis-icon';
+    col.cellType = 'activeImageBtn';
+    col.normalImg = '#ellipsis-icon';
     col.indent = 5;
     col.showImage = function (data) {
         if (!data || (data.children && data.children.length > 0) || !(data.b_code && data.b_code !== '')) {
@@ -445,6 +448,9 @@ $(document).ready(() => {
         }
     };
     ledgerSpreadSetting.imageClick = function (data) {
+        const nodePos = stagePos.getLedgerPos(data.id);
+        if (nodePos && nodePos.length > 0) return;
+
         changesObj.loadChanges({bills: data});
     };
     ledgerSpreadSetting.dgnUpFields = ['deal_dgn_qty1', 'deal_dgn_qty2', 'c_dgn_qty1', 'c_dgn_qty2'];
@@ -465,15 +471,15 @@ $(document).ready(() => {
     //初始化所有附件列表
     getAllList();
 
-    // 初始化 部位明细 Spread
+    // 初始化 计量单元 Spread
     const spSpread = SpreadJsObj.createNewSpread($('#stage-pos')[0]);
     const spCol = _.find(posSpreadSetting.cols, {field: 'qc_qty'});
     spCol.readOnly = true;
-    spCol.cellType = 'imageBtn';
-    spCol.hoverImg = '#ellipsis-icon';
+    spCol.cellType = 'activeImageBtn';
+    spCol.normalImg = '#ellipsis-icon';
     spCol.indent = 5;
     spCol.showImage = function (data) {
-        return data;
+        return data !== undefined && data !== null;
     };
     posSpreadSetting.imageClick = function (data) {
         const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -554,7 +560,7 @@ $(document).ready(() => {
                     } else {
                         const nodePos = stagePos.getLedgerPos(node.id);
                         if (nodePos && nodePos.length > 0) {
-                            toastr.error('该清单有部位明细,请在部位明细处计量');
+                            toastr.error('该清单有计量单元,请在计量单元处计量');
                             SpreadJsObj.reLoadRowData(info.sheet, info.row);
                             return;
                         }
@@ -787,7 +793,7 @@ $(document).ready(() => {
                 }
             }
             if (data.updateData.length === 0) {
-                toastr.info('其下全部部位明细均已计量');
+                toastr.info('其下全部计量单元均已计量');
                 return;
             }
             postData(window.location.pathname + '/update', {pos: data}, function (result) {
@@ -822,7 +828,7 @@ $(document).ready(() => {
         },
         items: {
             'measureAll': {
-                name: '计量其下所有部位明细',
+                name: '计量其下所有计量单元',
                 icon: 'fa-rocket',
                 callback: function (key, opt) {
                     const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -834,7 +840,7 @@ $(document).ready(() => {
                 }
             },
             'measureAllFiveTenth': {
-                name: '计量其下所有部位明细(计量50%)',
+                name: '计量其下所有计量单元(计量50%)',
                 icon: 'fa-plane',
                 callback: function (key, opt) {
                     const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -846,7 +852,7 @@ $(document).ready(() => {
                 }
             },
             'measureAllOneTenth': {
-                name: '计量其下所有部位明细(计量10%)',
+                name: '计量其下所有计量单元(计量10%)',
                 icon: 'fa-car',
                 callback: function (key, opt) {
                     const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -858,7 +864,7 @@ $(document).ready(() => {
                 }
             },
             'hint1': {
-                name: '最多计量200条清单下1000条部位明细',
+                name: '最多计量200条清单下1000条计量单元',
                 className: 'text-danger',
                 visible: function (key, opt) {
                     const select = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -927,6 +933,8 @@ $(document).ready(() => {
     });
     if (!readOnly) {
         $('#bills-expr').bind('change mouseleave', function () {
+            if (this.readOnly) return;
+
             const expr = $(this);
             const sheet = slSpread.getActiveSheet();
             const select = SpreadJsObj.getSelectObject(sheet);
@@ -985,7 +993,7 @@ $(document).ready(() => {
             }
         },
         /**
-         * 加载部位明细 根据当前台账选择节点
+         * 加载计量单元 根据当前台账选择节点
          */
         loadCurPosData: function () {
             const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
@@ -1013,11 +1021,11 @@ $(document).ready(() => {
                 }
                 // 台账模式下,不可新增
                 if (checkTzMeasureType() && !posData) {
-                    toastr.error('台账模式不可新增部位明细数据');
+                    toastr.error('台账模式不可新增计量单元数据');
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return ;
                 }
-                // 不同节点下,部位明细检查输入
+                // 不同节点下,计量单元检查输入
                 //const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
                 const node = stagePosSpreadObj.stageTreeNode;
                 if (!node) {
@@ -1025,11 +1033,11 @@ $(document).ready(() => {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 } else if (info.editingText !== '' && node.children && node.children > 0) {
-                    toastr.error('父节点不可插入部位明细');
+                    toastr.error('父节点不可插入计量单元');
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 } else if (info.editingText !== '' && !node.b_code || node.b_code === '') {
-                    toastr.error('项目节不可插入部位明细');
+                    toastr.error('项目节不可插入计量单元');
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                 }
@@ -1288,7 +1296,7 @@ $(document).ready(() => {
         }
     });
 
-    // 加载部位明细数据 - 暂时统一加载,如有需要,切换成动态加载并缓存
+    // 加载计量单元数据 - 暂时统一加载,如有需要,切换成动态加载并缓存
     console.time('loadPosFromServer');
     postData(window.location.pathname + '/pos', null, function (result) {
         console.timeEnd('loadPosFromServer');
@@ -1306,6 +1314,8 @@ $(document).ready(() => {
     SpreadJsObj.addDeleteBind(spSpread, stagePosSpreadObj.deletePress);
     if (!readOnly) {
         $('#pos-expr').bind('change mouseleave', function () {
+            if (this.readOnly) return;
+
             const expr = $(this);
             const posSheet = spSpread.getActiveSheet();
             const select = SpreadJsObj.getSelectObject(posSheet);
@@ -1460,8 +1470,10 @@ $(document).ready(() => {
                 ],
                 emptyRows: 0,
                 headRows: 1,
-                headRowHeight: [40],
+                headRowHeight: [32],
                 defaultRowHeight: 21,
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
                 readOnly: true
             };
             this.spread = SpreadJsObj.createNewSpread($('#search-result', this.obj)[0]);

+ 15 - 9
app/public/js/stage_change.js

@@ -77,15 +77,17 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 1,
-        headRowHeight: [40],
+        headRowHeight: [32],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     };
     const changeSpread = SpreadJsObj.createNewSpread($('#bgl-spread')[0]);
     SpreadJsObj.initSheet(changeSpread.getActiveSheet(), changeSpreadSetting);
     // 初始化变更清单spread
     const billsSpreadSetting = {
         cols: [
-            {title: '本期使用', colSpan: '1', rowSpan: '1', field: '', hAlign: 1, width: 40, formatter: '@', readOnly: true, cellType: 'image', img: function (data) {
+            {title: '本期使用', colSpan: '1', rowSpan: '1', field: '', hAlign: 1, width: 55, formatter: '@', readOnly: true, cellType: 'image', img: function (data) {
                 if (data.cur_qty && !checkZero(data.cur_qty)) {
                     return $('#icon-ok')[0];
                 } else {
@@ -103,24 +105,28 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 1,
-        headRowHeight: [40],
+        headRowHeight: [32],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     };
     const billsSpread = SpreadJsObj.createNewSpread($('#bills-spread')[0]);
     SpreadJsObj.initSheet(billsSpread.getActiveSheet(), billsSpreadSetting);
     // 初始化相关台账spread
     const posSpreadSetting = {
         cols: [
-            {title: '相关台账|项目节编号', colSpan: '5|1', rowSpan: '1|1', field: 'l_code', hAlign: 0, width: 120, formatter: '@', readOnly: true},
-            {title: '|名称', colSpan: '|1', rowSpan: '1', field: 'l_name', hAlign: 0, width: 150, formatter: '@', readOnly: true},
-            {title: '|部位明细', colSpan: '|1', rowSpan: '1', field: 'p_name', hAlign: 0, width: 150, type: 'Number', readOnly: true},
-            {title: '|0号台帐数量', colSpan: '|1', rowSpan: '1', field: 'l_qty', hAlign: 2, width: 60, formatter: '@', readOnly: true},
-            {title: '|本期变更数量', colSpan: '|1', rowSpan: '1', field: 'qty', hAlign: 2, width: 65, type: 'Number', readOnly: true},
+            {title: '相关台账|项目节编号', colSpan: '5|1', rowSpan: '1|1', field: 'leaf_xmj_code', hAlign: 0, width: 120, formatter: '@', readOnly: true},
+            {title: '|名称', colSpan: '|1', rowSpan: '1', field: 'leaf_xmj_name', hAlign: 0, width: 150, formatter: '@', readOnly: true},
+            {title: '|计量单元', colSpan: '|1', rowSpan: '1', field: 'p_name', hAlign: 0, width: 150, type: 'Number', readOnly: true},
+            {title: '|0号台帐数量', colSpan: '|1', rowSpan: '1', field: 'l_qty', hAlign: 2, width: 80, formatter: '@', readOnly: true},
+            {title: '|本期变更数量', colSpan: '|1', rowSpan: '1', field: 'qty', hAlign: 2, width: 80, type: 'Number', readOnly: true},
         ],
         emptyRows: 0,
         headRows: 2,
-        headRowHeight: [25, 40],
+        headRowHeight: [25, 25],
         defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
     };
     const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]);
     SpreadJsObj.initSheet(posSpread.getActiveSheet(), posSpreadSetting);

+ 6 - 2
app/public/js/stage_detail.js

@@ -39,7 +39,9 @@ $(document).ready(() => {
         headRows: 1,
         emptyRows: 0,
         headRowHeight: [32],
-        defaultRowHeight: 32,
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: readOnly,
     };
     const detailSpread = SpreadJsObj.createNewSpread($('#detail-spread')[0]);
@@ -405,8 +407,10 @@ $(document).ready(() => {
                 ],
                 headRows: 1,
                 emptyRows: 0,
-                headRowHeight: [40],
+                headRowHeight: [32],
                 defaultRowHeight: 21,
+                headerFont: '12px 微软雅黑',
+                font: '12px 微软雅黑',
             });
             gsSpread.bind(spreadNS.Events.ButtonClicked, function (e, info) {
                 function checkParent(node) {

+ 10 - 6
app/public/js/stage_pay.js

@@ -108,7 +108,7 @@ $(document).ready(() => {
         cols: [
             {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 150, formatter: '@', readOnly: 'readOnly.name'},
             {title: '扣款', colSpan: '1', rowSpan: '1', field: 'minus', hAlign: 1, width: 50, cellType: 'checkbox', readOnly: 'readOnly.minus'},
-            {title: '本期金额(表达式)', colSpan: '1', rowSpan: '1', field: 'tp', hAlign: 2, width: 100, readOnly: 'readOnly.tp', /*cellType: 'tip', getTip: function (data) {return data ? data.expr : '';}*/},
+            {title: '本期金额(表达式)', colSpan: '1', rowSpan: '1', field: 'tp', hAlign: 2, width: 120, readOnly: 'readOnly.tp', /*cellType: 'tip', getTip: function (data) {return data ? data.expr : '';}*/},
             {title: '截止上期金额',  colSpan: '1', rowSpan: '1', field: 'pre_tp', hAlign: 2, width: 100, readOnly: true},
             {title: '截止本期金额',  colSpan: '1', rowSpan: '1', field: 'end_tp', hAlign: 2, width: 100, readOnly: true},
             {title: '起扣金额',  colSpan: '1', rowSpan: '1', field: 'sprice', hAlign: 2, width: 100, readOnly: 'readOnly.sprice', /*cellType: 'tip', getTip: function (data) {return data ? data.sexpr : '';}*/},
@@ -142,8 +142,10 @@ $(document).ready(() => {
         ],
         emptyRows: 0,
         headRows: 1,
-        headRowHeight: [50],
-        defaultRowHeight: 30,
+        headRowHeight: [32],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
         readOnly: readOnly,
         pos: SpreadJsObj.getObjPos($('#pay-spread')[0]),
     };
@@ -395,7 +397,7 @@ $(document).ready(() => {
 
             const num = text ? _.toNumber(text) : null;
             let expr = text ? (num ? null : text) : null;
-            expr = expr ? expr.replace('=', '').toLowerCase(): null;
+            expr = expr ? $.trim(expr).replace('\t', '').replace('=', '').toLowerCase(): null;
             const [valid, msg] = this._checkExprValid(expr, ['bqwc', 'ybbqwc']);
             if (!valid) return [valid, msg];
 
@@ -421,7 +423,7 @@ $(document).ready(() => {
 
             const num = text ? _.toNumber(text) : null;
             let expr = text ? (num ? null : text) : null;
-            expr = expr ? expr.replace('=', '').toLowerCase(): null;
+            expr = expr ? $.trim(expr).replace('\t', '').replace('=', '').toLowerCase(): null;
             const [valid, msg] = this._checkExprValid(expr, ['bqwc', 'ybbqwc']);
             if (!valid) return [valid, msg];
 
@@ -445,7 +447,7 @@ $(document).ready(() => {
                     data.tp = num;
                     data.expr = null;
                 } else {
-                    const expr = text.replace('=', '').toLowerCase();
+                    const expr = $.trim(text).replace('\t', '').replace('=', '').toLowerCase();
                     const [valid, msg] = this._checkExprValid(expr);
                     if (!valid) return [valid, msg];
                     data.expr = expr;
@@ -829,6 +831,8 @@ $(document).ready(() => {
         $('#up-move').click(paySpreadObj.upMove);
         $('#down-move').click(paySpreadObj.downMove);
         $('#expr').bind('change mouseleave', function () {
+            if (this.readOnly) return;
+
             const expr = $(this);
             const select = SpreadJsObj.getSelectObject(paySpread.getActiveSheet());
             const field = expr.attr('field'), orgValue = expr.attr('org'), newValue = expr.val();

+ 15 - 3
app/public/js/tender.js

@@ -130,8 +130,13 @@ $(document).ready(function() {
         SpreadJsObj.protectedSheet(sheet);
         sheet.options.rowHeaderVisible = false;
         sheet.options.colHeaderVisible = false;
+
+        const vStyle = new spreadNS.Style();
+        vStyle.font = '12px 微软雅黑';
+        sheet.setDefaultStyle(vStyle, spreadNS.SheetArea.viewport);
+
         SpreadJsObj.massOperationSheet(sheet, function () {
-            sheet.defaults.rowHeight = 28;
+            sheet.defaults.rowHeight = 25;
             sheet.setColumnCount(3);
             sheet.setRowCount(14);
             sheet.setColumnWidth(0, 1);
@@ -271,10 +276,15 @@ $(document).ready(function() {
         spread.options.showHorizontalScrollbar = false;
         const sheet = spread.getActiveSheet();
         SpreadJsObj.protectedSheet(sheet);
+
+        const vStyle = new spreadNS.Style();
+        vStyle.font = '12px 微软雅黑';
+        sheet.setDefaultStyle(vStyle, spreadNS.SheetArea.viewport);
+
         SpreadJsObj.massOperationSheet(sheet, function () {
             sheet.options.rowHeaderVisible = false;
             sheet.options.colHeaderVisible = false;
-            sheet.defaults.rowHeight = 35;
+            sheet.defaults.rowHeight = 25;
             sheet.setColumnCount(3);
             sheet.setRowCount(6);
             sheet.setColumnWidth(0, 1);
@@ -382,8 +392,10 @@ $(document).ready(function() {
             ],
             emptyRows: 0,
             headRows: 1,
-            headRowHeight: [40],
+            headRowHeight: [32],
             defaultRowHeight: 21,
+            headerFont: '12px 微软雅黑',
+            font: '12px 微软雅黑',
         };
         const spread = SpreadJsObj.createNewSpread($('#chapter-spread')[0]);
         spread.options.showVerticalScrollbar = false;

+ 12 - 48
app/public/js/tender_list.js

@@ -258,12 +258,16 @@ function recursiveGetTenderNodeHtml (node, arr) {
         html.push('<a href="javascript: void(0)" id="' + node.id + '">', node.name, '</a>');
     }
     html.push('</td>');
+    // 创建人
+    html.push('<td>', node.user_name ? node.user_name : '', '</td>');
+    // 创建时间
+    html.push('<td>', node.create_time ? moment(node.create_time).format('YYYY-MM-DD HH:mm:ss') : '', '</td>');
     // 计量模式
-    html.push('<td>');
-    if (node.measure_type) {
-        html.push(node.measure_type === measureType.tz.value ? '0号台账' : '工程量清单');
-    }
-    html.push('</td>');
+    // html.push('<td>');
+    // if (node.measure_type) {
+    //     html.push(node.measure_type === measureType.tz.value ? '0号台账' : '工程量清单');
+    // }
+    // html.push('</td>');
     // 计量期数
     html.push('<td>');
     if (!node.cid) {
@@ -274,39 +278,6 @@ function recursiveGetTenderNodeHtml (node, arr) {
     html.push('<td>');
     html.push(node.lastStage ? auditConst.stage.statusString[node.lastStage.status] : auditConst.ledger.statusString[node.ledger_status]);
     html.push('</td>');
-    // 0号台账合同
-    html.push('<td class="text-right">');
-    html.push(node.total_price);
-    console.log(node);
-    html.push('</td>');
-    // 本期完成
-    html.push('<td class="text-right">');
-    html.push(node.gather_tp);
-    html.push('</td>');
-    // 截止本期合同
-    html.push('<td class="text-right">');
-    html.push(node.end_contract_tp);
-    html.push('</td>');
-    // 截止本期变更
-    html.push('<td class="text-right">');
-    html.push(node.end_qc_tp);
-    html.push('</td>');
-    // 截止本期完成
-    html.push('<td class="text-right">');
-    html.push(node.end_gather_tp);
-    html.push('</td>');
-    // 截止上期完成
-    html.push('<td class="text-right">');
-    html.push(node.pre_gather_tp);
-    html.push('</td>');
-    // 本期应付
-    html.push('<td class="text-right">');
-    html.push(node.yf_tp);
-    html.push('</td>');
-    // 截止本期应付
-    html.push('<td class="text-right">');
-    html.push(node.end_yf_tp);
-    html.push('</td>');
     html.push('</tr>');
     if (node.children) {
         for (const c of node.children) {
@@ -321,18 +292,11 @@ function getTenderTreeHtml () {
         const html = [];
         html.push('<table class="table table-hover table-bordered">');
         html.push('<thead>', '<tr>');
-        html.push('<th>', '名称', '</th>');
-        html.push('<th>', '计量模式', '</th>');
+        html.push('<th>', '标段名称', '</th>');
+        html.push('<th>', '创建人', '</th>');
+        html.push('<th>', '创建时间', '</th>');
         html.push('<th>', '计量期数', '</th>');
         html.push('<th>', '审批状态', '</th>');
-        html.push('<th>', '0号台帐', '</th>');
-        html.push('<th>', '本期完成', '</th>');
-        html.push('<th>', '截止本期合同', '</th>');
-        html.push('<th>', '截止本期变更', '</th>');
-        html.push('<th>', '截止本期完成', '</th>');
-        html.push('<th>', '截止上期完成', '</th>');
-        html.push('<th>', '本期应付', '</th>');
-        html.push('<th>', '截止本期应付', '</th>');
         html.push('</tr>', '</thead>');
         for (const t of tenderTree) {
             html.push(recursiveGetTenderNodeHtml(t, tenderTree));

+ 431 - 0
app/public/js/tender_list_info.js

@@ -0,0 +1,431 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date 2018/10/11
+ * @version
+ */
+const EmptyTenderHtml = [
+    '<div class="jumbotron">',
+    '<h3 class="display-6">还没有标段数据</h3>',
+    '</div>'
+];
+// levelTree - setting
+const levelTreeSetting = {
+    view: {
+        selectedMulti: false
+    },
+    data: {
+        simpleData: {
+            idKey: 'lid',
+            pIdKey: 'lpId',
+            rootPId: 0,
+            enable: true,
+        }
+    },
+    edit: {
+        enable: true,
+        showRemoveBtn: false,
+        showRenameBtn: false,
+        drag: {
+            autoExpandTrigger: true,
+            isCopy: false,
+            isMove:  true,
+            prev: false,
+            next: false,
+            inner: true,
+        }
+    },
+    callback: {
+        beforeDrop: beforeDropNode,
+        onDrop: onDropNode,
+    }
+};
+const levelNodes =[];
+const tenderTree = [];
+function createTree() {
+    const zTree = $.fn.zTree.getZTreeObj('treeLevel');
+    if (zTree) {
+        zTree.destroy();
+    }
+    $.fn.zTree.init($("#treeLevel"), levelTreeSetting, levelNodes);
+}
+function beforeDropNode(treeId, treeNodes, targetNode, moveType, isCopy) {
+    if (targetNode.lid !== 1) {
+        const parent = targetNode.getParentNode();
+        if (parent && parent.lid === 1) {
+            return false;
+        }
+    }
+}
+function onDropNode(event, treeId, treeNodes, targetNode, moveType) {
+    const zTree = $.fn.zTree.getZTreeObj(treeId);
+    function resetFixNode(id) {
+        const node = zTree.getNodeByParam('lid', id);
+        node.isParent = true;
+        zTree.updateNode(node, false);
+        zTree.expandNode(node, true);
+    }
+    function moveChildren(children, node) {
+        if (!children || children.length === 0) { return }
+        for (const c of children) {
+            moveChildren(c.children, node);
+            zTree.moveNode(node, c, 'inner');
+        }
+    }
+    resetFixNode(1);
+    resetFixNode(2);
+    if (targetNode.lid === 1 && treeNodes[0].children && treeNodes[0].children.length !== 0) {
+        moveChildren(treeNodes[0].children, zTree.getNodeByParam('lid', 1));
+    } else if (targetNode.lid !== 1) {
+        if (targetNode.children.length >= 2) {
+            for (const c of targetNode.children) {
+                if (c.lid !== treeNodes[0].lid) {
+                    zTree.moveNode(treeNodes[0], c, 'inner');
+                }
+            }
+        }
+    }
+}
+// 查询方法
+function findNode (key, value, arr) {
+    for (const a of arr) {
+        if (a[key] && a[key] === value) {
+            return a;
+        }
+    }
+}
+function getPId(level) {
+    if (level !== 1) {
+        const p = findNode('level', level - 1, levelNodes);
+        if (p) {
+            return p.lid
+        } else {
+            return 1;
+        }
+    } else {
+        return 2;
+    }
+}
+// 分类数据排序
+function sortCategory() {
+    category.sort(function (a, b) {
+        return a.level ? (b.level ? a.level - b.level : -1) : a.id - b.id;
+    });
+}
+// 初始化分类树结构数据
+function initCategoryLevelNode() {
+    levelNodes.splice(0, levelNodes.length);
+    levelNodes.push(
+        { lid:1, lpId:0, name:"可用类别", open:true, isParent: true},
+        { lid:2, lpId:0, name:"已用类别", open:true, isParent: true}
+    );
+    for (const c of category) {
+        const cate = JSON.parse(JSON.stringify(c));
+        cate.lid = levelNodes.length + 1;
+        cate.open = true;
+        if (!cate.level) {
+            cate.lpId = 1;
+            levelNodes.push(cate);
+        } else {
+            cate.lpId = getPId(cate.level);
+            levelNodes.push(cate);
+        }
+    }
+}
+// 新建标段 -- 分类属性选择
+function getCategoryHtml() {
+    function getSelectCategoryHtml (cate) {
+        const html = [];
+        html.push('<div class="form-group" cate-id="' + cate.id + '">');
+        html.push('<lable>', cate.name, '</lable>');
+        html.push('<select class="form-control">');
+        for (const v of cate.value) {
+            html.push('<option value="' + v.id + '">', v.value, '</option>');
+        }
+        html.push('</select>');
+        html.push('</div>');
+        return html.join('');
+    }
+    function getRadioCategoryHtml (cate) {
+        const html = [];
+        html.push('<div class="form-group" cate-id="' + cate.id + '">');
+        html.push('<lable>', cate.name, '</lable>');
+        html.push('<div>');
+        for (const iV in cate.value) {
+            const v = cate.value[iV];
+            html.push('<div class="form-check-inline">');
+            html.push('<input class="form-check-input" type="radio"', 'name="' + cate.name + '" ', 'value="' , v.id, (iV == 0 ? '" checked="' : ''),  '">');
+            html.push('<label class="form-check-label">', v.value, '</label>');
+            html.push('</div>');
+        }
+        html.push('</div>');
+        html.push('</div>');
+        return html.join('');
+    }
+    const html = [];
+    for (const c of category) {
+        if (c.type === categoryType.key.dropDown) {
+            html.push(getSelectCategoryHtml(c));
+        } else if (c.type === categoryType.key.radio) {
+            html.push(getRadioCategoryHtml(c));
+        }
+    }
+    return html.join('');
+}
+// 初始化TenderTree数据
+function initTenderTree () {
+    const levelCategory = category.filter(function (c) {
+        return c.level && c.level > 0;
+    });
+    function findCategoryNode(cid, value, array) {
+        for (const a of array) {
+            if (a.cid === cid && a.vid === value) {
+                return a;
+            }
+        }
+    }
+    function getCategoryNode(category, value, parent) {
+        const array = parent ?  parent.children : tenderTree;
+        let cate = findCategoryNode(category.id, value, array);
+        if (!cate) {
+            const cateValue = findNode('id', value, category.value);
+            cate = {
+                cid: category.id,
+                vid: value,
+                name: cateValue.value,
+                children: [],
+                level: category.level,
+            };
+            array.push(cate);
+        }
+        return cate;
+    }
+    function loadTenderCategory (tender) {
+        let tenderCategory = null;
+        for (const lc of levelCategory) {
+            const tenderCate = findNode('cid', lc.id, tender.category);
+            if (tenderCate) {
+                tenderCategory = getCategoryNode(lc, tenderCate.value, tenderCategory);
+            } else {
+                return tenderCategory;
+            }
+        }
+        return tenderCategory;
+    }
+    function calculateTender(tender) {
+        if (tender.lastStage) {
+            tender.gather_tp = ZhCalc.add(tender.lastStage.contract_tp, tender.lastStage.qc_tp);
+            tender.end_contract_tp = ZhCalc.add(tender.lastStage.pre_contract_tp, tender.lastStage.contract_tp);
+            tender.end_qc_tp = ZhCalc.add(tender.lastStage.pre_qc_tp, tender.lastStage.qc_tp);
+            tender.end_gather_tp = ZhCalc.add(tender.end_contract_tp, tender.end_qc_tp);
+            tender.pre_gather_tp = ZhCalc.add(tender.lastStage.pre_contract_tp, tender.lastStage.pre_qc_tp);
+            tender.yf_tp = ZhCalc.add(tender.lastStage.yf_tp);
+            tender.end_yf_tp = ZhCalc.add(tender.lastStage.pre_yf_tp, tender.yf_tp);
+        }
+    }
+    tenderTree.splice(0, tenderTree.length);
+    for (const t of tenders) {
+        calculateTender(t);
+        t.valid = true;
+        if (t.category && levelCategory.length > 0) {
+            const parent = loadTenderCategory(t);
+            if (parent) {
+                t.level = parent.level + 1;
+                parent.children.push(t);
+            } else {
+                tenderTree.push(t);
+            }
+        } else {
+            tenderTree.push(t);
+        }
+    }
+}
+function recursiveGetTenderNodeHtml (node, arr) {
+    const html = [];
+    html.push('<tr>');
+    // 名称
+    html.push('<td class="in-' + node.level + '">');
+    if (node.cid) {
+        html.push('<i class="fa fa-folder-o"></i> ', node.name);
+    } else {
+        html.push('<span class="text-muted mr-2">');
+        html.push(arr.indexOf(node) === arr.length - 1 ? '└' : '├');
+        html.push('</span>');
+        //html.push('<a href="/tender/' + node.id + '">', node[c.field], '</a>');
+        html.push('<a href="javascript: void(0)" id="' + node.id + '">', node.name, '</a>');
+    }
+    html.push('</td>');
+    // 计量模式
+    html.push('<td>');
+    if (node.measure_type) {
+        html.push(node.measure_type === measureType.tz.value ? '0号台账' : '工程量清单');
+    }
+    html.push('</td>');
+    // 计量期数
+    html.push('<td>');
+    if (!node.cid) {
+        html.push(node.lastStage ? '第' + node.lastStage.order + '期' : '台账');
+    }
+    html.push('</td>');
+    // 审批状态
+    html.push('<td>');
+    html.push(node.lastStage ? auditConst.stage.statusString[node.lastStage.status] : auditConst.ledger.statusString[node.ledger_status]);
+    html.push('</td>');
+    // 0号台账合同
+    html.push('<td class="text-right">');
+    html.push(node.total_price);
+    console.log(node);
+    html.push('</td>');
+    // 本期完成
+    html.push('<td class="text-right">');
+    html.push(node.gather_tp);
+    html.push('</td>');
+    // 截止本期合同
+    html.push('<td class="text-right">');
+    html.push(node.end_contract_tp);
+    html.push('</td>');
+    // 截止本期变更
+    html.push('<td class="text-right">');
+    html.push(node.end_qc_tp);
+    html.push('</td>');
+    // 截止本期完成
+    html.push('<td class="text-right">');
+    html.push(node.end_gather_tp);
+    html.push('</td>');
+    // 截止上期完成
+    html.push('<td class="text-right">');
+    html.push(node.pre_gather_tp);
+    html.push('</td>');
+    // 本期应付
+    html.push('<td class="text-right">');
+    html.push(node.yf_tp);
+    html.push('</td>');
+    // 截止本期应付
+    html.push('<td class="text-right">');
+    html.push(node.end_yf_tp);
+    html.push('</td>');
+    html.push('</tr>');
+    if (node.children) {
+        for (const c of node.children) {
+            html.push(recursiveGetTenderNodeHtml(c, node.children));
+        }
+    }
+    return html.join('');
+}
+// 根据TenderTree数据获取Html代码
+function getTenderTreeHtml () {
+    if (tenderTree.length > 0) {
+        const html = [];
+        html.push('<table class="table table-hover table-bordered">');
+        html.push('<thead>', '<tr>');
+        html.push('<th>', '名称', '</th>');
+        html.push('<th>', '计量模式', '</th>');
+        html.push('<th>', '计量期数', '</th>');
+        html.push('<th>', '审批状态', '</th>');
+        html.push('<th>', '0号台帐', '</th>');
+        html.push('<th>', '本期完成', '</th>');
+        html.push('<th>', '截止本期合同', '</th>');
+        html.push('<th>', '截止本期变更', '</th>');
+        html.push('<th>', '截止本期完成', '</th>');
+        html.push('<th>', '截止上期完成', '</th>');
+        html.push('<th>', '本期应付', '</th>');
+        html.push('<th>', '截止本期应付', '</th>');
+        html.push('</tr>', '</thead>');
+        for (const t of tenderTree) {
+            html.push(recursiveGetTenderNodeHtml(t, tenderTree));
+        }
+        html.push('</table>');
+        return html.join('');
+    } else {
+        return EmptyTenderHtml.join('');
+    }
+}
+function bindTenderUrl() {
+    $('a', '.c-body').bind('click', function () {
+        const tenderId = parseInt($(this).attr('id'));
+        const tender = _.find(tenders, function (t) {
+            return t.id === tenderId;
+        });
+        if (tender.measure_type) {
+            window.location.href = '/tender/' + tenderId;
+        } else {
+            for (const a of $('a', '#jlms')) {
+                a.href = '/tender/' + tenderId + '/type?type=' + $(a).attr('mst');
+            }
+            $('#jlms').modal('show');
+        }
+    });
+}
+
+$(document).ready(() => {
+    sortCategory();
+    // 初始化分类数据
+    initCategoryLevelNode();
+    $('.modal-body', '#add-bd').append(getCategoryHtml());
+    // 初始化标段树结构
+    initTenderTree();
+    $('.c-body').html(getTenderTreeHtml());
+    bindTenderUrl();
+    // 分类
+    $('#cate-set').on('show.bs.modal', function () {
+        createTree();
+    });
+    $('#set-cate-ok').click(function () {
+        const data = [];
+        const zTree = $.fn.zTree.getZTreeObj('treeLevel');
+        for (const c of category) {
+            const node = zTree.getNodeByParam('id', c.id);
+            const parent = node.getParentNode();
+            if (parent.lid === 1) {
+                data.push({id: c.id, level: 0});
+            } else {
+                data.push({id: c.id, level: node.getPath().length - 1});
+            }
+        }
+        postData('/setting/category/level', data, function (rst) {
+            for (const d of data) {
+                const c = findNode('id', d.id, category);
+                c.level = d.level;
+            }
+            sortCategory();
+            initCategoryLevelNode();
+            initTenderTree();
+            $('.c-body').html(getTenderTreeHtml());
+            $('#cate-set').modal('hide');
+        });
+    });
+    // 新增标段
+    $('#add-bd-ok').click(function () {
+        const data = {
+            name: $('[name=name]', '#add-bd').val(),
+            valuation: $('[name=valuation]:checked').val(),
+            category: [],
+        };
+        if (!data.name || data.name === '') {
+            // TODO 提示用户
+            return;
+        }
+        for (const c of category) {
+            const cate = {cid: c.id};
+            if (c.type === categoryType.key.dropDown) {
+                cate.value = parseInt($('select', '[cate-id=' + c.id + ']').val());
+            } else if (c.type === categoryType.key.radio) {
+                cate.value = parseInt($('input:checked', '[cate-id=' + c.id + ']').val());
+            }
+            data.category.push(cate);
+        }
+        $('#hide-all').show();
+        postData('/list/add', data, function (result) {
+            tenders.push(result);
+            initTenderTree();
+            $('.c-body').html(getTenderTreeHtml());
+            bindTenderUrl();
+            $('#add-bd').modal('hide');
+            $('[name=name]', '#add-bd').val('');
+            $('#hide-all').hide();
+        });
+    });
+});

+ 3 - 1
app/router.js

@@ -69,7 +69,8 @@ module.exports = app => {
      * 标段管理
      */
     // 金额概况
-    app.get('/list', sessionAuth, 'tenderController.listInfo');
+    app.get('/list', sessionAuth, 'tenderController.listDefault');
+    app.get('/list/info', sessionAuth, 'tenderController.listInfo');
     // 计量进度
     app.get('/list/progress', sessionAuth, 'tenderController.listProgress');
     // 管理标段
@@ -215,6 +216,7 @@ module.exports = app => {
     app.get('/tender/:id/measure/material', sessionAuth, tenderCheck, 'materialController.index');
     app.post('/tender/:id/measure/material/add', sessionAuth, tenderCheck, 'materialController.add');
     app.post('/tender/:id/measure/material/delete', sessionAuth, tenderCheck, 'materialController.delete');
+    app.post('/tender/:id/measure/material/auditors', sessionAuth, tenderCheck, 'materialController.materialAuditors');
     // 审批
     app.post('/tender/:id/measure/material/:order/audit/add', sessionAuth, tenderCheck, materialCheck, 'materialController.addAudit');
     app.post('/tender/:id/measure/material/:order/audit/delete', sessionAuth, tenderCheck, materialCheck, 'materialController.deleteAudit');

+ 3 - 1
app/service/ledger.js

@@ -840,7 +840,9 @@ module.exports = app => {
                 await this._importCacheTreeNodes(transaction, cacheTree.items);
                 //console.timeEnd('insertBills');
                 //console.time('insertPos');
-                await transaction.insert(this.ctx.service.pos.tableName, cacheTree.pos);
+                if (cacheTree.pos && cacheTree.pos.length > 0) {
+                    await transaction.insert(this.ctx.service.pos.tableName, cacheTree.pos);
+                }
                 //console.timeEnd('insertPos');
                 await transaction.commit();
                 this.cache.set(cacheKey, cacheTree.items.length + 1, 'EX', this.ctx.app.config.cacheTime);

+ 2 - 2
app/service/ledger_revise.js

@@ -100,9 +100,9 @@ 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,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid)' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder)' +
                 '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' +
-                '     sgfh_qty, sjcl_qty, qtcl_qty, crid' +
+                '     sgfh_qty, sjcl_qty, qtcl_qty, crid, in_time, porder' +
                 '  From ' + this.ctx.service.pos.tableName +
                 '  Where `tid` = ?';
             const sqlParam = [tid];

+ 22 - 7
app/service/material.js

@@ -127,8 +127,7 @@ module.exports = app => {
             try {
                 if (preMaterial) {
                     newMaterial.rate = preMaterial.rate;
-                    newMaterial.pre_tp = preMaterial.m_tp + preMaterial.pre_tp;
-                    // 计算新一期本期金额
+                    newMaterial.pre_tp = this.ctx.helper.add(preMaterial.m_tp, preMaterial.pre_tp);
                 }
                 // 新增期记录
                 const result = await transaction.insert(this.tableName, newMaterial);
@@ -137,17 +136,20 @@ module.exports = app => {
                 } else {
                     throw '新增期数据失败';
                 }
-                // 存在上一期时,复制上一期审批流程、不参与调差的清单
+                // 存在上一期时,复制上一期审批流程、不参与调差的清单、上期清单并算本期有效价差,本期应耗数量,并算本期总金额
                 if (preMaterial) {
                     const auditResult = await this.ctx.service.materialAudit.copyPreMaterialAuditors(transaction, preMaterial, newMaterial);
                     if (!auditResult) {
                         throw '复制上一期审批流程失败';
                     }
+                    // 复制不参与调差清单
                     const preNotJoinList = await this.ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: this.ctx.tender.id, mid: preMaterial.id } });
-                    const materialResult = await this.ctx.service.materialListNotjoin.copyNewStageNotJoinList(transaction, preNotJoinList, newMaterial.id);
-                    if (materialResult.affectedRows === 0) {
-                        throw '新增不参与调差清单数据失败';
-                    }
+                    await this.ctx.service.materialListNotjoin.copyNewStageNotJoinList(transaction, preNotJoinList, newMaterial.id);
+                    // 复制调差清单工料关联表
+                    await this.ctx.service.materialList.copyPreMaterialList(transaction, preMaterial, newMaterial);
+                    // 修改本期应耗数量值和有效价差,需要剔除不参与调差的清单数据
+                    await this.ctx.service.materialBills.updateNewMaterial(transaction, preNotJoinList);
+                    // 计算得出本期总金额
                 }
 
                 await transaction.commit();
@@ -199,6 +201,19 @@ module.exports = app => {
             }
             return list;
         }
+
+        /**
+         * 修改增税税率
+         * @param {int} rate 税率
+         * @returns {Promise<*>}
+         */
+        async changeRate(rate) {
+            const updateData = {
+                id: this.ctx.material.id,
+                rate,
+            };
+            return await this.db.update(this.tableName, updateData);
+        }
     }
 
     return Material;

+ 14 - 6
app/service/material_audit.js

@@ -184,16 +184,24 @@ module.exports = app => {
             const transaction = await this.db.beginTransaction();
             try {
                 await transaction.update(this.tableName, { id: audit.id, status: auditConst.status.checking, begin_time: new Date() });
-                // 计算原报最终数据
-                // await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
-                // 复制一份下一审核人数据
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, 1, transaction);
-                // 更新期数据
-                // const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
                 await transaction.update(this.ctx.service.material.tableName, {
                     id: materialId, status: auditConst.status.checking,
                 });
 
+                // 把material_bills本期应耗数量设置成s_quantity里的历史本期应耗数量
+                const materialBillsData = await this.ctx.service.materialBills.getAllDataByCondition({ tid: this.ctx.tender.id });
+                for (const mb of materialBillsData) {
+                    const order = this.ctx.material.order;
+                    const s_quantity = mb.s_quantity !== null ? mb.s_quantity.split(',') : [];
+                    const quantity = mb.quantity !== null ? mb.quantity : '';
+                    if (s_quantity.length === order) {
+                        s_quantity[order - 1] = quantity;
+                    } else {
+                        s_quantity.push(quantity);
+                    }
+                    await transaction.update(this.ctx.service.materialBills.tableName, { id: mb.id, s_quantity: s_quantity.join(',') });
+                }
+
                 // 添加短信通知-需要审批提醒功能
                 // const smsUser = await this.ctx.service.projectAccount.getDataById(audit.aid);
                 // if (smsUser.auth_mobile !== '' && smsUser.auth_mobile !== undefined && smsUser.sms_type !== '') {

+ 132 - 32
app/service/material_list.js

@@ -35,11 +35,13 @@ module.exports = app => {
             for (const mb of data.mb_id) {
                 const newLists = {
                     tid: this.ctx.tender.id,
+                    order: this.ctx.material.order,
                     mid: this.ctx.material.id,
                     mb_id: mb,
                     gcl_id: data.gcl_id,
                     xmj_id: data.xmj_id,
                     mx_id: data.mx_id,
+                    gather_qty: data.gather_qty,
                     in_time: new Date(),
                 };
                 list.push(newLists);
@@ -50,7 +52,7 @@ module.exports = app => {
             if (result.affectedRows === 0) {
                 throw '新增工料数据失败';
             }
-            return await this.getMaterialData(this.ctx.tender.id);
+            return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
         }
 
         /**
@@ -58,25 +60,46 @@ module.exports = app => {
          * @param {int} id 工料id
          * @return {void}
          */
-        async del(id) {
+        async del(id, mb_id) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            // 判断是否可删
-            return await this.deleteById(id);
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 判断是否可删
+                await transaction.delete(this.tableName, { id });
+                await this.calcQuantityByML(transaction, mb_id);
+                await transaction.commit();
+                return true;
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
         }
 
         /**
          * 修改工料清单关联信息
          * @param {Object} data 工料内容
+         * @param {int} order 期数
          * @return {void}
          */
-        async save(data) {
+        async save(data, order) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            // 判断是否可修改
-            return await this.db.update(this.tableName, data);
+
+            const transaction = await this.db.beginTransaction();
+            try {
+                const mb_id = data.mb_id;
+                delete data.mb_id;
+                await transaction.update(this.tableName, data);
+                await this.calcQuantityByML(transaction, mb_id);
+                await transaction.commit();
+                return true;
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
         }
 
         /**
@@ -87,46 +110,123 @@ module.exports = app => {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            const list = [];
-            const select = data.select;
-            for (const mb of data.mx_id) {
-                const newLists = {
-                    tid: this.ctx.tender.id,
-                    mid: this.ctx.material.id,
-                    mb_id: select.mb_id,
-                    gcl_id: select.gcl_id,
-                    xmj_id: select.xmj_id,
-                    mx_id: mb,
-                    quantity: select.quantity,
-                    in_time: new Date(),
-                };
-                list.push(newLists);
+            const transaction = await this.db.beginTransaction();
+            try {
+                const list = [];
+                const select = data.select;
+                for (const index in data.mx_id) {
+                    const newLists = {
+                        tid: this.ctx.tender.id,
+                        order: this.ctx.material.order,
+                        mid: this.ctx.material.id,
+                        mb_id: select.mb_id,
+                        gcl_id: select.gcl_id,
+                        xmj_id: select.xmj_id,
+                        mx_id: data.mx_id[index],
+                        gather_qty: data.gather_qty[index],
+                        quantity: select.quantity,
+                        in_time: new Date(),
+                    };
+                    list.push(newLists);
+                }
+                // 新增工料
+                const result = await transaction.insert(this.tableName, list);
+                if (result.affectedRows === 0) {
+                    throw '新增工料数据失败';
+                }
+                await this.calcQuantityByML(transaction, select.mb_id);
+                await transaction.commit();
+                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
             }
+        }
 
-            // 新增工料
-            const result = await this.db.insert(this.tableName, list);
-            if (result.affectedRows === 0) {
-                throw '新增工料数据失败';
+        /**
+         * 修改material_bills的quantity值和计算本期金额
+         * @param transaction
+         * @param mb_id
+         * @returns {Promise<*>}
+         */
+        async calcQuantityByML(transaction, mb_id) {
+            // 修改material_bills值
+            const mbInfo = await this.ctx.service.materialBills.getDataById(mb_id);
+            if (!mbInfo) {
+                throw '不存在该工料';
             }
-            return await this.getMaterialData(this.ctx.tender.id);
+            const sql = 'SELECT SUM(`gather_qty`*`quantity`) as quantity FROM ' + this.tableName + ' WHERE `mid`=? AND `mb_id`=?';
+            const sqlParam = [this.ctx.material.id, mb_id];
+            const mb_quantity = await transaction.queryOne(sql, sqlParam);
+            console.log(mb_quantity);
+            mbInfo.quantity = this.ctx.helper.round(mb_quantity.quantity, 3);
+            const updateData = {
+                id: mb_id,
+                quantity: mbInfo.quantity,
+            };
+            await transaction.update(this.ctx.service.materialBills.tableName, updateData);
+            // 计算本期总金额
+            const sql2 = 'SELECT SUM(`m_spread`*`quantity`) as total_price FROM ' + this.ctx.service.materialBills.tableName + ' WHERE `tid` = ?';
+            const sqlParam2 = [this.ctx.tender.id];
+            const tp = await transaction.queryOne(sql2, sqlParam2);
+            console.log(tp);
+            const updateData2 = {
+                id: this.ctx.material.id,
+                m_tp: tp.total_price,
+            };
+            return await transaction.update(this.ctx.service.material.tableName, updateData2);
         }
 
         /**
          * 获取工料清单关联表
          * @param {int} tid 标段id
-         * @param {Object} midList 期id列表
+         * @param {Object} mid 期id
          * @return {void}
          */
-        async getMaterialData(tid, midList = []) {
-            const midsql = midList.length !== 0 ? ' AND ml.mid in (' + this.ctx.helper.getInArrStrSqlFilter(midList) + ')' : '';
-            const sql = 'SELECT ml.`id`, mb.`code`, mb.`name`, mb.`unit`, ml.`quantity`, ml.`mb_id`, ml.`gcl_id`, ml.`xmj_id`, ml.`mx_id`, ml.`tid`, ml.`mid`' +
+        async getMaterialData(tid, mid) {
+            const sql = 'SELECT ml.`id`, mb.`code`, mb.`name`, mb.`unit`, ml.`order`, ml.`quantity`, ml.`mb_id`, ml.`gcl_id`, ml.`xmj_id`, ml.`mx_id`, ml.`tid`, ml.`mid`' +
                 ' FROM ' + this.tableName + ' as ml' +
                 ' LEFT JOIN ' + this.ctx.service.materialBills.tableName + ' as mb' +
                 ' ON ml.`mb_id` = mb.`id`' +
-                ' WHERE ml.`tid` = ?' + midsql;
-            const sqlParam = [tid];
+                ' WHERE ml.`tid` = ? AND ml.`mid` = ?';
+            const sqlParam = [tid, mid];
             return await this.db.query(sql, sqlParam);
         }
+
+        /**
+         * 复制上一期并生成新一期清单工料关联,计算新一期小计值
+         * @param transaction
+         * @param preMaterial
+         * @param newMid
+         * @returns {Promise<void>}
+         */
+        async copyPreMaterialList(transaction, preMaterial, newMaterial) {
+            const materialListData = await this.getAllDataByCondition({ where: { tid: this.ctx.tender.id, mid: preMaterial.id } });
+            const copyMLArray = [];
+            for (const ml of materialListData) {
+                // 获取小计值
+                let gather_qty = null;
+                if (ml.mx_id !== null) {
+                    gather_qty = await this.ctx.service.stagePos.getGatherQtyByMaterial(ml.tid, newMaterial.stage_id, ml.gcl_id, ml.mx_id);
+                } else {
+                    gather_qty = await this.ctx.service.stageBills.getGatherQtyByMaterial(ml.tid, newMaterial.stage_id, ml.gcl_id);
+                }
+                const newMaterialList = {
+                    tid: ml.tid,
+                    order: ml.order,
+                    mid: newMaterial.id,
+                    mb_id: ml.mb_id,
+                    gcl_id: ml.gcl_id,
+                    xmj_id: ml.xmj_id,
+                    mx_id: ml.mx_id,
+                    gather_qty,
+                    quantity: ml.quantity,
+                    in_time: new Date(),
+                };
+                copyMLArray.push(newMaterialList);
+            }
+            return await transaction.insert(this.tableName, copyMLArray);
+        }
     }
     return MaterialList;
 };

+ 1 - 1
app/service/pos.js

@@ -235,7 +235,7 @@ module.exports = app => {
             const pos = await this.getPosData({tid: tid, id: data});
             const bills = await this.ctx.service.ledger.getDataById(pos[0].lid);
             const billsPos = await this.getAllDataByCondition({ where: {lid: bills.id} });
-            const updateBills = {id: 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);

+ 9 - 8
app/service/revise_pos.js

@@ -27,7 +27,8 @@ module.exports = app => {
                 '  FROM ' + this.tableName + ' p ' +
                 '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s' +
                 '  ON add_stage = s.id'
-                + this.ctx.helper.whereSql(condition, 'p');
+                + this.ctx.helper.whereSql(condition, 'p') +
+                '  ORDER By p.porder ASC';
             return await this.db.query(sql);
         }
 
@@ -122,7 +123,7 @@ module.exports = app => {
         async updatePos(tid, data) {
             if (data.sgfh_qty !== undefined || data.sjcl_qty !== undefined || data.qtcl_qty !== undefined) {
                 const op = await this.getDataById(data.id);
-                const bills = await this.ctx.service.ledger.getDataById(op.lid);
+                const bills = await this.ctx.service.reviseBills.getDataById(op.lid);
                 const billsPos = await this.getAllDataByCondition({where: {lid: op.lid} });
 
                 const precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, bills.unit);
@@ -160,7 +161,7 @@ module.exports = app => {
                 const transaction = await this.db.beginTransaction();
                 try {
                     transaction.update(this.tableName, data);
-                    transaction.update(this.ctx.service.ledger.tableName, updateBills);
+                    transaction.update(this.ctx.service.reviseBills.tableName, updateBills);
                     await transaction.commit();
                     updateBills.ledger_id = bills.ledger_id;
                     return {
@@ -180,7 +181,7 @@ module.exports = app => {
         async updatePosArr(tid, data) {
             if (data.length === 0) return;
             const op = await this.getDataById(data[0].id);
-            const bills = await this.ctx.service.ledger.getDataById(op.lid);
+            const bills = await this.ctx.service.reviseBills.getDataById(op.lid);
             const billsPos = await this.getAllDataByCondition({where: {lid: op.lid} });
             const precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, bills.unit);
             for (const d of data) {
@@ -223,7 +224,7 @@ module.exports = app => {
                 for (const d of data) {
                     transaction.update(this.tableName, d);
                 }
-                transaction.update(this.ctx.service.ledger.tableName, updateBills);
+                transaction.update(this.ctx.service.reviseBills.tableName, updateBills);
                 await transaction.commit();
                 updateBills.ledger_id = bills.ledger_id;
                 return {
@@ -242,9 +243,9 @@ module.exports = app => {
             }
 
             const pos = await this.getPosData({tid: tid, id: data});
-            const bills = await this.ctx.service.ledger.getDataById(pos[0].lid);
+            const bills = await this.ctx.service.reviseBills.getDataById(pos[0].lid);
             const billsPos = await this.getAllDataByCondition({ where: {lid: bills.id} });
-            const updateBills = {id: 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);
@@ -261,7 +262,7 @@ module.exports = app => {
             const transaction = await this.db.beginTransaction();
             try {
                 await transaction.delete(this.tableName, {tid: tid, id: data});
-                await transaction.update(this.ctx.service.ledger.tableName, updateBills);
+                await transaction.update(this.ctx.service.reviseBills.tableName, updateBills);
                 await transaction.commit();
                 updateBills.ledger_id = bills.ledger_id;
                 return { ledger: { update: [updateBills] }, pos: data };

+ 28 - 1
app/service/stage_bills.js

@@ -115,7 +115,7 @@ module.exports = app => {
         }
 
         async getStageUsedBills(tid, sid) {
-            const sql = 'SELECT Bills.lid, (Bills.contract_qty <> 0 and Bills.qc_qty <> 0) As used FROM ' + this.tableName + ' As Bills ' +
+            const sql = 'SELECT Bills.lid, (Bills.contract_qty <> 0 or Bills.qc_qty <> 0) As used FROM ' + this.tableName + ' As Bills ' +
                 '  INNER JOIN ( ' +
                 '    SELECT MAX(`times` * ' + timesLen + ' + `order`) As `progress`, `lid`, `sid` From ' + this.tableName +
                 '      WHERE tid = ? And sid = ?' +
@@ -393,6 +393,33 @@ module.exports = app => {
             const result = await this.db.query(sql, sqlParam);
             return result;
         }
+
+        /**
+         * 获取多期(合同和数量变更相加)计量-小计(材料调差调用)
+         * @param {Number} tid - 标段id
+         * @param {String} stage_id_list - 期id列表
+         * @param {String} lid - 台账id
+         * @param {String} xid - 项目节id
+         * @returns {Promise<void>}
+         */
+        async getGatherQtyByMaterial(tid, stage_id_list, lid) {
+            stage_id_list = stage_id_list !== null ? stage_id_list.split(',') : [];
+            let gather_qty = 0;
+            for (const sid of stage_id_list) {
+                const sql = 'SELECT Bills.* FROM ' + this.tableName + ' As Bills ' +
+                    '  INNER JOIN ( ' +
+                    '    SELECT MAX(`times` * ' + timesLen + ' + `order`) As `progress`, `lid`, `sid` From ' + this.tableName +
+                    '      WHERE tid = ? And sid = ?' +
+                    '      GROUP BY `lid`' +
+                    '  ) As MaxFilter ' +
+                    '  ON (Bills.times * ' + timesLen + ' + `order`) = MaxFilter.progress And Bills.lid = MaxFilter.lid And Bills.`sid` = MaxFilter.`sid`' +
+                    ' WHERE Bills.lid = ?';
+                const sqlParam = [tid, sid, lid];
+                const result = await this.db.queryOne(sql, sqlParam);
+                gather_qty = this.ctx.helper.add(gather_qty, this.ctx.helper.add(result.contract_qty, result.qc_qty));
+            }
+            return gather_qty !== 0 ? gather_qty : null;
+        }
     }
 
     return StageBills;

+ 30 - 2
app/service/stage_pos.js

@@ -128,7 +128,7 @@ module.exports = app => {
             const self = this;
             const stagePos = await this.getLastestStageData2(tid, sid, where);
             const pids = this._.map(stagePos, function (sp) {
-                if (self.ctx.helper.checkZero(sp.contract_qty) && self.ctx.helper.checkZero(sp.qc_qty)) {
+                if (self.ctx.helper.checkZero(sp.contract_qty) || self.ctx.helper.checkZero(sp.qc_qty)) {
                     return sp.pid;
                 } else {
                     return -1;
@@ -265,7 +265,7 @@ module.exports = app => {
                                 sp.qc_qty = this.ctx.helper.round(d.qc_qty, precision.value);
                             }
                             if (d.postil !== undefined) {
-                                sp.postil = this.ctx.helper.round(d.postil, precision.value);
+                                sp.postil = d.postil;
                             }
                             await transaction.update(this.tableName, sp, {where: {id: osp.id}});
                         } else {
@@ -481,6 +481,34 @@ module.exports = app => {
             const result = await this.db.query(sql, sqlParam);
             return result;
         }
+
+        /**
+         * 获取多期(合同和数量变更相加)计量-小计(材料调差调用)
+         * @param {Number} tid - 标段id
+         * @param {String} stage_id_list - 期id列表
+         * @param {String} lid - 台账id
+         * @param {String} pid - 部位id
+         * @returns {Promise<void>}
+         */
+        async getGatherQtyByMaterial(tid, stage_id_list, lid, pid) {
+            stage_id_list = stage_id_list !== null ? stage_id_list.split(',') : [];
+            let gather_qty = 0;
+            for (const sid of stage_id_list) {
+                const sql = 'SELECT Pos.contract_qty, Pos.qc_qty FROM ' +
+                    '  (SELECT * FROM ' + this.tableName + ' WHERE tid = ? AND sid = ?) As Pos ' +
+                    '  INNER JOIN ( ' +
+                    '    SELECT MAX(`times` * ' + timesLen + ' + `order`) As `flow`, `tid`, `sid`, `pid` From ' + this.tableName +
+                    '      WHERE `tid` = ? AND sid = ?' +
+                    '      GROUP BY `pid`' +
+                    '  ) As MaxFilter ' +
+                    '  ON (Pos.times * ' + timesLen + ' + Pos.order) = MaxFilter.flow And Pos.pid = MaxFilter.pid And Pos.sid = MaxFilter.sid' +
+                    ' WHERE Pos.lid = ? AND Pos.pid = ?';
+                const sqlParam = [tid, sid, tid, sid, lid, pid];
+                const result = await this.db.queryOne(sql, sqlParam);
+                gather_qty = this.ctx.helper.add(gather_qty, this.ctx.helper.add(result.contract_qty, result.qc_qty));
+            }
+            return gather_qty !== 0 ? gather_qty : null;
+        }
     }
 
     return StagePos;

+ 7 - 7
app/view/boot/index.ejs

@@ -42,31 +42,31 @@
                     <div class="card-body">
                         <form action="" method="post">
                             <div class="form-group">
-                                <input class="form-control" placeholder="你的姓名" name="name" autofocus="">
+                                <input class="form-control form-control-sm" placeholder="你的姓名" name="name" autofocus="">
                             </div>
                             <div class="form-group">
-                                <input class="form-control" placeholder="企业名称" name="company" autofocus="">
+                                <input class="form-control form-control-sm" placeholder="企业名称" name="company" autofocus="">
                             </div>
                             <div class="form-group">
-                                <select class="form-control" name="province">
+                                <select class="form-control form-control-sm" name="province">
                                     <option value="">请选择企业所在地区</option>
                                     <option value="1">广东省</option>
                                     <option value="2">北京市</option>
                                 </select>
                             </div>
                             <div class="form-group">
-                                <a class="btn btn-link" data-toggle="collapse" href="#moreinfo" aria-expanded="false" aria-controls="moreinfo">更多选项</a>
+                                <a class="btn btn-sm btn-link" data-toggle="collapse" href="#moreinfo" aria-expanded="false" aria-controls="moreinfo">更多选项</a>
                             </div>
                             <div class="collapse" id="moreinfo">
                                 <div class="form-group">
-                                    <select class="form-control" name="company_type">
+                                    <select class="form-control form-control-sm" name="company_type">
                                         <option value="">请选择企业类型</option>
                                         <option name="1">设计</option>
                                         <option name="2">施工</option>
                                     </select>
                                 </div>
                                 <div class="form-group">
-                                    <select class="form-control" name="scale">
+                                    <select class="form-control form-control-sm" name="scale">
                                         <option value="">请选择企业规模</option>
                                         <option value="1">1-20</option>
                                         <option value="2">20-50</option>
@@ -77,7 +77,7 @@
                             </div>
                             <div class="form-group">
                                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>"/>
-                                <button class="btn btn-primary btn-block" type="submit">下一步</button>
+                                <button class="btn btn-primary btn-sm btn-block" type="submit">下一步</button>
                             </div>
                         </form>
                     </div>

+ 5 - 5
app/view/change/bills_modal.ejs

@@ -177,8 +177,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm">添加</button>
             </div>
         </div>
     </div>
@@ -200,10 +200,10 @@
             </div>
             <div class="modal-footer">
                 <!--无法提交-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">好的</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">好的</button>
                 <!--确认提交-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary" data-dismiss="modal">确认提交</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal">确认提交</button>
             </div>
         </div>
     </div>

+ 5 - 5
app/view/change/file_modal.ejs

@@ -13,8 +13,8 @@
                 <p><a href="" class="btn btn-primary">选择文件</a></p>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm">添加</button>
             </div>
         </div>
     </div>
@@ -36,10 +36,10 @@
             </div>
             <div class="modal-footer">
                 <!--无法提交-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">好的</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">好的</button>
                 <!--确认提交-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary" data-dismiss="modal">确认提交</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal">确认提交</button>
             </div>
         </div>
     </div>

+ 48 - 46
app/view/change/index.ejs

@@ -16,8 +16,8 @@
             </div>
             <% if (tender.user_id === uid) { %>
             <div class="ml-auto">
-                <a href="#add-bj" data-toggle="modal" data-target="#add-bj" class="btn btn-sm btn-primary pull-right">新建变更令</a>
-                <a href="#setting" data-toggle="modal" data-target="#setting" class="btn btn-sm btn-outline-primary pull-right"><i class="fa fa-cog"></i></a>
+                <a href="#add-bj" data-toggle="modal" data-target="#add-bj" class="btn btn-sm btn-primary pull-right ml-1">新建变更令</a>
+                <a href="#setting" data-toggle="modal" data-target="#setting" class="btn btn-sm btn-outline-primary pull-right ml-1"><i class="fa fa-cog"></i></a>
             </div>
             <% } %>
         </div>
@@ -26,54 +26,56 @@
         <div class="c-body">
             <input id="tenderName" value="<%= tender.name %>" type="hidden">
             <input id="tenderId" value="<%= tender.id %>" type="hidden">
-            <table class="table">
-                <thead>
-                <tr>
-                    <th width="32%">申请编号/变更令号</th><th width="30%">工程名称</th>
-                    <th width="90">变更类别</th><th width="90">变更金额</th>
-                    <th width="100">审批状态</th><th>审批进度</th><th width="80"></th>
-                </tr>
-                </thead>
-                <tbody id="changeList">
-                <% const classArray = []; %>
-                <% for (const t in changeConst.class) { %>
+            <div class="sjs-height-0">
+                <table class="table">
+                    <thead>
+                    <tr>
+                        <th width="32%">申请编号/变更令号</th><th width="30%">工程名称</th>
+                        <th width="90">变更类别</th><th width="90">变更金额</th>
+                        <th width="100">审批状态</th><th>审批进度</th><th width="80"></th>
+                    </tr>
+                    </thead>
+                    <tbody id="changeList">
+                    <% const classArray = []; %>
+                    <% for (const t in changeConst.class) { %>
                     <% const cClass = changeConst.class[t] %>
                     <% classArray[cClass.value] = cClass.name %>
-                <% } %>
-                <% for (const c of changes) { %>
-                <tr>
-                    <td><a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info"><% if (c.status !== auditConst.status.checked) { %><%- c.code %><% } else { %><%- c.p_code %><% } %></a></td>
-                    <td><%- c.name %></td>
-                    <td><%- classArray[c.class] %><% c.class %></td>
-                    <td><%- c.total_price %></td>
-                    <% if (c.auditStatus) { %>
-                    <td>
-                        <a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm">
-                            <%- auditConst.statusButton[c.status] %>
-                        </a>
-                    </td>
-                    <% } else {  %>
-                    <td>
-                        <span class="<%- auditConst.statusClass[c.status] %>"><%- auditConst.statusString[c.status] %></span>
-                    </td>
                     <% } %>
-                    <% if (c.status === auditConst.status.uncheck) { %>
-                    <td>
-                        待上报
-                    </td>
-                    <% } else { %>
-                    <td>
-                        <%- c.changeAudit.name %>-<%- c.changeAudit.jobs %>
-                        <span class="<%- auditConst.auditStatusClass[c.changeAudit.status] %>"><%- auditConst.auditStatusString[c.changeAudit.status] %></span>
-                    </td>
+                    <% for (const c of changes) { %>
+                    <tr>
+                        <td><a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info"><% if (c.status !== auditConst.status.checked) { %><%- c.code %><% } else { %><%- c.p_code %><% } %></a></td>
+                        <td><%- c.name %></td>
+                        <td><%- classArray[c.class] %><% c.class %></td>
+                        <td><%- c.total_price %></td>
+                        <% if (c.auditStatus) { %>
+                        <td>
+                            <a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm">
+                                <%- auditConst.statusButton[c.status] %>
+                            </a>
+                        </td>
+                        <% } else {  %>
+                        <td>
+                            <span class="<%- auditConst.statusClass[c.status] %>"><%- auditConst.statusString[c.status] %></span>
+                        </td>
+                        <% } %>
+                        <% if (c.status === auditConst.status.uncheck) { %>
+                        <td>
+                            待上报
+                        </td>
+                        <% } else { %>
+                        <td>
+                            <%- c.changeAudit.name %>-<%- c.changeAudit.jobs %>
+                            <span class="<%- auditConst.auditStatusClass[c.changeAudit.status] %>"><%- auditConst.auditStatusString[c.changeAudit.status] %></span>
+                        </td>
+                        <% } %>
+                        <td><% if (c.status === auditConst.status.uncheck || (c.status === auditConst.status.back && c.uid === uid)) { %><a href="#del-bg" cid="<%= c.cid %>" data-toggle="modal" data-target="#del-bg" class="btn btn-outline-danger btn-sm delete-cid-modal">删除</a><% } %></td>
+                    </tr>
                     <% } %>
-                    <td><% if (c.status === auditConst.status.uncheck || (c.status === auditConst.status.back && c.uid === uid)) { %><a href="#del-bg" cid="<%= c.cid %>" data-toggle="modal" data-target="#del-bg" class="btn btn-outline-danger btn-sm delete-cid-modal">删除</a><% } %></td>
-                </tr>
-                <% } %>
-                </tbody>
-            </table>
-            <!--翻页-->
-            <% include ../layout/page.ejs %>
+                    </tbody>
+                </table>
+                <!--翻页-->
+                <% include ../layout/page.ejs %>
+            </div>
         </div>
     </div>
 </div>

+ 33 - 35
app/view/change/info.ejs

@@ -131,12 +131,8 @@
                     <div class="d-inline-block">
                         <a href="javascript:void(0);" class="btn btn-sm btn-light text-primary" id="add-white-btn" data-original-title="添加清单"><i class="fa fa-plus" aria-hidden="true"></i> 添加空白清单</a>
                     </div>
-                    <% } else { %>
-                    <div class="d-inline-block">
-                        <h2 class="change-title">变更清单</h2>
-                    </div>
                     <% } %>
-                    <div class="d-inline-block ml-3">
+                    <div class="d-inline-block">
                         <div class="custom-control custom-checkbox" style="line-height: normal;">
                             <input type="checkbox" class="custom-control-input change-detail-checkbox" id="customCheck1" checked>
                             <label class="custom-control-label" for="customCheck1">变更详情</label>
@@ -181,45 +177,45 @@
                         <div class="form-group">
                             <label><b class="text-danger">*&nbsp;</b>申请编号</label>
                             <a href="javascript:void(0);" class="pull-right reduction-code" data-toggle="tooltip" data-placement="bottom" title="" data-code="<%- change.code %>" data-original-title="重置"><i class="fa fa-repeat"></i></a>
-                            <input class="form-control" name="code" value="<%- change.code %>" type="text">
+                            <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>
-                            <input class="form-control" name="name" value="<%- change.name %>" type="text">
+                            <input class="form-control form-control-sm" name="name" value="<%- change.name %>" type="text">
                         </div>
                         <div class="form-group">
                             <label>桩号</label>
-                            <input class="form-control" name="peg" value="<%- change.peg %>" type="text">
+                            <input class="form-control form-control-sm" name="peg" value="<%- change.peg %>" type="text">
                         </div>
                         <div class="form-group">
                             <label>原设计图名称</label>
-                            <input class="form-control" name="org_name" placeholder="" type="text" value="<%- change.org_name %>">
+                            <input class="form-control form-control-sm" name="org_name" placeholder="" type="text" value="<%- change.org_name %>">
                         </div>
                         <div class="form-group">
                             <label>原图号</label>
-                            <input class="form-control" name="org_code" placeholder="" type="text" value="<%- change.org_code %>">
+                            <input class="form-control form-control-sm" name="org_code" placeholder="" type="text" value="<%- change.org_code %>">
                         </div>
                         <div class="form-group">
                             <label>变更设计图名称</label>
-                            <input class="form-control" name="new_name" placeholder="" type="text" value="<%- change.new_name %>">
+                            <input class="form-control form-control-sm" name="new_name" placeholder="" type="text" value="<%- change.new_name %>">
                         </div>
                         <div class="form-group">
                             <label>变更图号</label>
-                            <input class="form-control" name="new_code" placeholder="" type="text" value="<%- change.new_code %>">
+                            <input class="form-control form-control-sm" name="new_code" placeholder="" type="text" value="<%- change.new_code %>">
                         </div>
                     </div>
                     <div class="col-md-4" style="z-index:999">
                         <div class="form-group">
                             <label><b class="text-danger">*&nbsp;</b>工程变更理由及内容</label>
-                            <textarea class="form-control" name="content" rows="6"><%- change.content %></textarea>
+                            <textarea class="form-control form-control-sm" name="content" rows="6"><%- change.content %></textarea>
                         </div>
                         <div class="form-group">
                             <label>工程变更合同依据</label>
-                            <textarea class="form-control" name="basis" rows="6"><%- change.basis %></textarea>
+                            <textarea class="form-control form-control-sm" name="basis" rows="6"><%- change.basis %></textarea>
                         </div>
                         <div class="form-group">
                             <label>备注</label>
-                            <textarea class="form-control" name="memo" rows="3"><%- change.memo %></textarea>
+                            <textarea class="form-control form-control-sm" name="memo" rows="3"><%- change.memo %></textarea>
                         </div>
                     </div>
                     <div class="col-md-4">
@@ -238,7 +234,7 @@
                         </div>
                         <div class="form-group">
                             <label>变更类别 </label>
-                            <select class="form-control" name="class">
+                            <select class="form-control form-control-sm" name="class">
                                 <% for (const c in changeConst.class) { %>
                                 <% const cClass = changeConst.class[c] %>
                                 <option value="<%- cClass.value %>"<% if (cClass.value === change.class) { %> selected<% } %>><%- cClass.name %></option>
@@ -247,7 +243,7 @@
                         </div>
                         <div class="form-group">
                             <label>变更性质 </label>
-                            <select class="form-control" name="quality">
+                            <select class="form-control form-control-sm" name="quality">
                                 <% for (const q in changeConst.quality) { %>
                                 <% const cQuality = changeConst.quality[q] %>
                                 <option value="<%- cQuality.value %>"<% if (cQuality.value === change.quality) { %> selected<% } %>><%- cQuality.name %></option>
@@ -257,7 +253,7 @@
                         <div class="form-group">
                             <label>变更提出单位</label>
                             <a href="#editcompany" style="float:right;" class="" data-toggle="modal">编辑</a>
-                            <select class="form-control" id="company" name="company">
+                            <select class="form-control form-control-sm" id="company" name="company">
                                 <% for (const company of companyList) { %>
                                 <option <% if (company.name === change.company) { %>selected<% } %>><%- company.name %></option>
                                 <% } %>
@@ -289,37 +285,37 @@
                     <form>
                         <div class="form-group">
                             <label>申请编号</label>
-                            <input class="form-control" value="<%- change.code %>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%- change.code %>" type="text" readonly>
                         </div>
                         <% if (auditStatus === 4) { %>
                         <div class="form-group">
                             <label>变更令号(批复编号)</label>
-                            <input class="form-control" value="<%- change.p_code %>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%- change.p_code %>" type="text" readonly>
                         </div>
                         <% } %>
                         <div class="form-group">
                             <label>工程名称</label>
-                            <input class="form-control" value="<%- change.name %>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%- change.name %>" type="text" readonly>
                         </div>
                         <div class="form-group">
                             <label>桩号</label>
-                            <input class="form-control" value="<%- change.peg %>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%- change.peg %>" type="text" readonly>
                         </div>
                         <div class="form-group">
                             <label>原设计图名称</label>
-                            <input class="form-control" placeholder="" type="text" value="<%- change.org_name %>" readonly>
+                            <input class="form-control form-control-sm" placeholder="" type="text" value="<%- change.org_name %>" readonly>
                         </div>
                         <div class="form-group">
                             <label>原图号</label>
-                            <input class="form-control" placeholder="" type="text" value="<%- change.org_code %>" readonly>
+                            <input class="form-control form-control-sm" placeholder="" type="text" value="<%- change.org_code %>" readonly>
                         </div>
                         <div class="form-group">
                             <label>变更设计图名称</label>
-                            <input class="form-control" placeholder="" type="text" value="<%- change.new_name %>" readonly>
+                            <input class="form-control form-control-sm" placeholder="" type="text" value="<%- change.new_name %>" readonly>
                         </div>
                         <div class="form-group">
                             <label>变更图号</label>
-                            <input class="form-control" placeholder="" type="text" value="<%- change.new_code %>" readonly>
+                            <input class="form-control form-control-sm" placeholder="" type="text" value="<%- change.new_code %>" readonly>
                         </div>
                     </form>
                 </div>
@@ -327,15 +323,15 @@
                     <form>
                         <div class="form-group">
                             <label>工程变更理由及内容</label>
-                            <textarea class="form-control" rows="6" readonly><%- change.content %></textarea>
+                            <textarea class="form-control form-control-sm" rows="6" readonly><%- change.content %></textarea>
                         </div>
                         <div class="form-group">
                             <label>工程变更合同依据</label>
-                            <textarea class="form-control" rows="6" readonly><%- change.basis %></textarea>
+                            <textarea class="form-control form-control-sm" rows="6" readonly><%- change.basis %></textarea>
                         </div>
                         <div class="form-group">
                             <label>备注</label>
-                            <textarea class="form-control" rows="3" readonly><%- change.memo %></textarea>
+                            <textarea class="form-control form-control-sm" rows="3" readonly><%- change.memo %></textarea>
                         </div>
                     </form>
                 </div>
@@ -357,7 +353,7 @@
                         </div>
                         <div class="form-group">
                             <label>变更类别 </label>
-                            <select class="form-control" disabled>
+                            <select class="form-control form-control-sm" disabled>
                                 <% for (const c in changeConst.class) { %>
                                 <% const cClass = changeConst.class[c] %>
                                 <% if (cClass.value === change.class) { %>
@@ -368,7 +364,7 @@
                         </div>
                         <div class="form-group">
                             <label>变更性质 </label>
-                            <select class="form-control" disabled>
+                            <select class="form-control form-control-sm" disabled>
                                 <% for (const q in changeConst.quality) { %>
                                 <% const cQuality = changeConst.quality[q] %>
                                 <% if (cQuality.value === change.quality) { %>
@@ -379,7 +375,7 @@
                         </div>
                         <div class="form-group">
                             <label>变更提出单位</label>
-                            <select class="form-control" disabled>
+                            <select class="form-control form-control-sm" disabled>
                                 <option><%- change.company %></option>
                             </select>
                         </div>
@@ -398,7 +394,7 @@
                         </div>
                         <div class="form-group">
                             <label>批复文号</label>
-                            <input class="form-control" id="w_code" placeholder="" type="text" value="<%- change.w_code %>" <% if (auditStatus !== 6) { %>readonly<% } %>>
+                            <input class="form-control form-control-sm" id="w_code" placeholder="" type="text" value="<%- change.w_code %>" <% if (auditStatus !== 6) { %>readonly<% } %>>
                         </div>
                     </form>
                 </div>
@@ -454,7 +450,7 @@
                         <td data-site="2"><input class="form-control form-control-sm" placeholder="变更部位" type="text" value="<%= cl.bwmx %>"></td>
                         <td data-site="3"><input class="form-control form-control-sm" placeholder="变更详情" type="text" value="<%= cl.detail %>"></td>
                         <td data-site="4">
-                            <select class="form-control input-sm">
+                            <select class="form-control form-control-sm input-sm">
                                 <% for (const j in changeUnits) { %>
                                     <% if (changeUnits[j].unit !== undefined && changeUnits[j].unit === cl.unit) { %>
                                 <option selected="selected"><%= changeUnits[j].unit %></option>
@@ -725,9 +721,11 @@
 <script src="/public/js/datatable/dataTables.fixedColumns.min.js"></script>
 <script src="/public/js/datatable/jlzf-change-table.js"></script>
 <script src="/public/js/change_calculation.js"></script>
-<% if (auditStatus === 1 || auditStatus === 2) { %>
 <script>
     const whiteList = JSON.parse('<%- JSON.stringify(whiteList) %>');
+</script>
+<% if (auditStatus === 1 || auditStatus === 2) { %>
+<script>
     const changeUnits = JSON.parse('<%- JSON.stringify(changeUnits) %>');
     const precision = JSON.parse('<%- JSON.stringify(precision) %>');
     const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');

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

@@ -13,19 +13,19 @@
                 <div id="companyshow">
                     <% for (const company of companyList) { %>
                     <div class="form-group">
-                        <input type="text" id="<%= company.id %>" class="form-control" value="<%= company.name %>">
+                        <input type="text" id="<%= company.id %>" class="form-control form-control-sm" value="<%= company.name %>">
                     </div>
                     <% } %>
                 </div>
                 <div class="alert alert-warning" role="alert">修改后,已创建的变更不受影响。</div>
                 <p><button class="btn btn-primary btn-sm" id="addcompany" role="button" title="填写公司"><b class="fa fa-plus"></b></button></p>
                 <div id="companyadddiv">
-                    <!--<input type="text" class="form-control" placeholder="请输入公司名称">-->
+                    <!--<input type="text" class="form-control form-control-sm" placeholder="请输入公司名称">-->
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" id="updatecompany" class="btn btn-primary">确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" id="updatecompany" class="btn btn-primary btn-sm">确定</button>
             </div>
         </div>
     </div>
@@ -45,14 +45,14 @@
                         <label>选择审批人</label>
                         <div class="input-group">
                             <div class="input-group-prepend">
-                                <select class="form-control" id="account_group">
+                                <select class="form-control form-control-sm" id="account_group">
                                     <option value="0">所有分组</option>
                                     <% for (const dw in accountGroup) { %>
                                         <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                     <% } %>
                                 </select>
                             </div>
-                            <select class="form-control" id="account_list">
+                            <select class="form-control form-control-sm" id="account_list">
                                 <option value="0">选择审批人</option>
                                 <% for (const account of accountList) { %>
                                     <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
@@ -82,9 +82,9 @@
                     </div>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" data-sumbit="sumbit_change" data-category="up_change" class="btn btn-primary up-change">确认上报</button>
-                    <button type="button" data-sumbit="sumbit_change" data-category="save_change" class="btn btn-success save-change">保存修改</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" data-sumbit="sumbit_change" data-category="up_change" class="btn btn-primary btn-sm up-change">确认上报</button>
+                    <button type="button" data-sumbit="sumbit_change" data-category="save_change" class="btn btn-success btn-sm save-change">保存修改</button>
                 </div>
             </form>
         </div>
@@ -213,9 +213,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <!--<button type="button" class="add-list-btn btn btn-outline-primary">添加空白清单</button>-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" id="cancel-list-btn">取消</button>
-                <button type="button" class="add-list-btn btn btn-primary">添加</button>
+                <!--<button type="button" class="add-list-btn btn btn-sm btn-outline-primary">添加空白清单</button>-->
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="cancel-list-btn">取消</button>
+                <button type="button" class="add-list-btn btn btn-primary btn-sm">添加</button>
             </div>
         </div>
     </div>
@@ -312,9 +312,9 @@
                     </div>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" data-sumbit="sumbit_change" data-category="up_change" class="btn btn-primary up-change">确认上报</button>
-                    <button type="button" data-sumbit="sumbit_change" data-category="save_change" class="btn btn-success save-change">保存修改</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" data-sumbit="sumbit_change" data-category="up_change" class="btn btn-primary btn-sm up-change">确认上报</button>
+                    <button type="button" data-sumbit="sumbit_change" data-category="save_change" class="btn btn-success btn-sm save-change">保存修改</button>
                 </div>
             </div>
         </div>
@@ -406,7 +406,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -455,13 +455,13 @@
                                 <% if (a.status === 2) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="sdesc">同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="sdesc">同意</textarea>
                                         <input type="hidden" name="audit_id" value="<%= a.id %>">
                                         <% if (a.usort !== 0 && index+1 === auditList.length) { %>
                                         <!--终审填写批复编号-->
                                         <div class="form-group mt-3">
                                             <label><b class="text-danger">*&nbsp;</b>变更令号(批复编号)</label>
-                                            <input class="form-control" value="<%= change.code %>" name="p_code" type="text">
+                                            <input class="form-control form-control-sm" value="<%= change.code %>" name="p_code" type="text">
                                         </div>
                                         <% } else { %>
                                             <input type="hidden" name="audit_next_id" value="<%= auditList[index+1].id %>">
@@ -478,8 +478,8 @@
                     <input type="hidden" name="w_code" value="<%= change.w_code %>">
                     <input type="hidden" name="change_id" value="<%= change.cid %>">
                     <input type="hidden" name="bills_list" id="change-list-approval" value="">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" class="btn btn-success approval-btn">确认通过</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-success btn-sm approval-btn">确认通过</button>
                 </div>
                 </form>
             </div>
@@ -526,7 +526,7 @@
                                     <% if (a.status === 2) { %>
                                         <div class="form-group">
                                             <label>审批意见<b class="text-danger">*</b></label>
-                                            <textarea class="form-control" name="sdesc">不同意</textarea>
+                                            <textarea class="form-control form-control-sm" name="sdesc">不同意</textarea>
                                             <input type="hidden" name="audit_id" value="<%= a.id %>">
                                         </div>
                                         <div class="alert alert-warning">
@@ -558,9 +558,9 @@
                 <div class="modal-footer">
                     <input type="hidden" name="w_code" value="<%= change.w_code %>">
                     <input type="hidden" name="change_id" value="<%= change.cid %>">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" class="btn btn-warning change-approval-back approval-btn">确认退回</button>
-                    <button type="button" class="btn btn-danger change-approval-stop approval-btn" style="display: none">确认终止</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-warning btn-sm change-approval-back approval-btn">确认退回</button>
+                    <button type="button" class="btn btn-danger btn-sm change-approval-stop approval-btn" style="display: none">确认终止</button>
                 </div>
                 </form>
             </div>
@@ -580,11 +580,11 @@
             </div>
             <div class="modal-body">
                 <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
-                <p><input class="btn btn-primary" value="选择文件" type="file" id="upload-file" multiple /></p>
+                <p><input class="btn btn-primary btn-sm" value="选择文件" type="file" id="upload-file" multiple /></p>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary" id="upload-file-btn">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm" id="upload-file-btn">添加</button>
             </div>
         </div>
     </div>
@@ -603,8 +603,8 @@
             <div class="modal-footer">
                 <input type="hidden" name="cid" value="<%= change.cid %>">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-warning">确定重审</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-warning btn-sm">确定重审</button>
             </div>
         </form>
     </div>

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

@@ -11,8 +11,8 @@
             <form class="modal-footer" action="/tender/<%- tender.id %>/change/delete" method="post">
                 <input type="hidden" name="cid" id="delete-cid" value="">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="submit" class="btn btn-danger">确定删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="submit" class="btn btn-danger btn-sm">确定删除</button>
             </form>
         </div>
     </div>
@@ -29,22 +29,22 @@
                 <div class="form-group">
                     <label>申请编号<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input type="text" class="form-control is-invalid" placeholder="请输入变更令号" value="变更申请编号" id="bj-code">
+                        <input type="text" class="form-control form-control-sm is-invalid" placeholder="请输入变更令号" value="变更申请编号" id="bj-code">
                         <div class="input-group-append" id="autoCodeShow" <% if (codeRule.length === 0) { %>style="display: none"<% } %>>
-                            <button class="btn btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
+                            <button class="btn btn-sm btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
                         </div>
                         <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在。</div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>工程名称<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" type="text" id="bj-name">
+                    <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" data-dismiss="modal" id="addCancel">关闭</button>
-                <a href="javascript: void(0)" class="btn btn-primary" id="addOk">确认添加</a>
+                <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>
             </div>
         </div>
     </div>
@@ -90,7 +90,7 @@
                         </h5>
                         <h5 class="my-3">连接符</h5>
                         <div class="form-group">
-                            <select class="form-control connector-change">
+                            <select class="form-control form-control-sm connector-change">
                                 <option disabled selected>请选择</option>
                                 <% for (const index in ruleConst.connectorString) { %>
                                     <option value="<%- index %>" <% if (tender.c_connector !== null && tender.c_connector === parseInt(index)) { %>selected<% } %>><%- ruleConst.connectorString[index] %></option>
@@ -99,7 +99,7 @@
                         </div>
                         <h5 class="my-3">添加新规则组件</h5>
                         <div class="form-group">
-                            <select class="form-control rule-change">
+                            <select class="form-control form-control-sm rule-change">
                                 <option disabled selected>请选择组件</option>
                                 <% for (const index in ruleConst.ruleString) { %>
                                 <option value="<%- index %>"><%- ruleConst.ruleString[index] %></option>
@@ -108,20 +108,20 @@
                         </div>
                         <div class="form-group" id="format" style="display: none">
                             <label>自动编号位数</label>
-                            <input min="3" class="form-control" step="1" max="6" value="3" type="number">
+                            <input min="3" class="form-control form-control-sm" step="1" max="6" value="3" type="number">
                         </div>
                         <div class="form-group" id="text" style="display: none">
                             <label>起始编号</label>
-                            <input class="form-control" value="001" type="text">
+                            <input class="form-control form-control-sm" value="001" type="text">
                         </div>
-                        <button class="btn btn-outline-primary" id="addRule">添加组件</button>
+                        <button class="btn btn-sm btn-outline-primary" id="addRule">添加组件</button>
                     </div>
                 </div>
             </div>
             <div class="modal-footer">
-                <% if (tender.c_rule_first) { %><button type="button" class="btn btn-secondary" data-dismiss="modal" id="changeFirst">暂时不需要</button><% } %>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" id="hide_modal" <% if (tender.c_rule_first) { %>style="display: none"<% } %>>关闭</button>
-                <button type="button" class="btn btn-primary" id="setRule">确定添加</button>
+                <% if (tender.c_rule_first) { %><button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="changeFirst">暂时不需要</button><% } %>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="hide_modal" <% if (tender.c_rule_first) { %>style="display: none"<% } %>>关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="setRule">确定添加</button>
             </div>
         </div>
     </div>

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

@@ -4,7 +4,6 @@
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title><%= ctx.menu.name === undefined ? '主页' : ctx.menu.name %>-计量支付</title>
     <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">
     <link rel="stylesheet" href="/public/css/main.css">

+ 6 - 6
app/view/layout/modal.ejs

@@ -8,8 +8,8 @@
             <div class="modal-body">
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="modify-permission">提交修改</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="modify-permission">提交修改</button>
             </div>
         </div>
     </div>
@@ -25,16 +25,16 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>变更编号<b class="text-danger">*</b></label>
-                    <input class="form-control"  value="0006" type="text" readonly>
+                    <input class="form-control form-control-sm"  value="0006" type="text" readonly>
                 </div>
                 <div class="form-group">
                     <label>变更名称<b class="text-danger">*</b></label>
-                    <input class="form-control"  placeholder="输入标段名称" type="text">
+                    <input class="form-control form-control-sm"  placeholder="输入标段名称" type="text">
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确定新建</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确定新建</button>
             </div>
         </div>
     </div>

+ 2 - 21
app/view/layout/page.ejs

@@ -1,24 +1,5 @@
-<!--<div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">-->
-    <!--<div class="btn-group mr-2" role="group" aria-label="First group">-->
-        <!--<button type="button" class="btn btn-light" disabled title="首页"><i class="fa fa-caret-left"></i></button>-->
-        <!--<button type="button" class="btn btn-light" disabled title="上一页"><i class="fa fa-angle-left"></i></button>-->
-    <!--</div>-->
-    <!--<div class="btn-group mr-2" role="group" aria-label="Second group">-->
-        <!--<button type="button" class="btn btn-light active">1</button>-->
-        <!--<button type="button" class="btn btn-light">2</button>-->
-        <!--<button type="button" class="btn btn-light">3</button>-->
-        <!--<button type="button" class="btn btn-light">4</button>-->
-        <!--<button type="button" class="btn btn-light">5</button>-->
-        <!--<button type="button" class="btn btn-light" title="更多">...</button>-->
-    <!--</div>-->
-    <!--<div class="btn-group" role="group" aria-label="Third group">-->
-        <!--<button type="button" class="btn btn-light" title="下一页"><i class="fa fa-angle-right"></i></button>-->
-        <!--<button type="button" class="btn btn-light" title="尾页"><i class="fa fa-caret-right"></i></button>-->
-    <!--</div>-->
-<!--</div>-->
-
 <nav aria-label="Page navigation example">
-    <ul class="pagination"></ul>
+    <ul class="pagination pagination-sm"></ul>
 </nav>
 <script type="text/javascript" src="/public/js/bootstrap/bootstrap-paginator.js"></script>
 <script type="text/javascript">
@@ -27,7 +8,7 @@
         currentPage: "<%= pageInfo.page %>",
         totalPages: "<%= pageInfo.total %>",
         numberOfPages: 5,
-        size: "normal",
+        size: "small",
         itemContainerClass: function(type, page, current) {
             let className = 'page-item';
             this.currentPage = parseInt(this.currentPage);

+ 2 - 2
app/view/layout/project_list.ejs

@@ -3,7 +3,7 @@
     <span class="name"><%= ctx.session.sessionProject.name %></span>
     <% if (ctx.session.sessionProjectList.length > 0) { %>
     <div class="btn-group">
-        <a class=" btn" data-toggle="dropdown">
+        <a class=" btn btn-sm" data-toggle="dropdown">
             <span class="fa fa-caret-down" data-toggle="tooltip" data-placement="bottom" title="切换项目"></span>
         </a>
         <div class="dropdown-menu">
@@ -15,7 +15,7 @@
         </div>
     </div>
     <% } %>
-    <a href="/project/info" class="btn" data-toggle="tooltip" data-placement="bottom" title="项目设置"><i
+    <a href="/project/info" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="项目设置"><i
             class="fa fa-cogs"></i></a>
 </div>
 <% } %>

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

@@ -1,7 +1,7 @@
 <div class="poj-name">
     <span class="name" id="tenderName"><%- ctx.session.sessionUser.tenderName %></span>
     <div class="btn-group">
-        <a class=" btn" data-toggle="dropdown">
+        <a class=" btn btn-sm" data-toggle="dropdown">
             <span class="fa fa-caret-down" data-toggle="tooltip" data-placement="bottom" title="切换标段"></span>
         </a>
         <div class="dropdown-menu">

+ 6 - 6
app/view/ledger/audit.ejs

@@ -22,16 +22,16 @@
             <div></div>
             <div class="ml-auto">
                 <% if (tender.ledger_status === auditConst.status.checkNo) { %>
-                    <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark">退回意见</a>
+                    <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark mr-1">退回意见</a>
                 <% } else if (tender.ledger_status === auditConst.status.checking) { %>
                     <% if (curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
-                        <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a>
+                        <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right mr-1">审批通过</a>
+                        <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right mr-1">审批退回</a>
                     <% } else {%>
-                        <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark">审批中</a>
+                        <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark mr-1">审批中</a>
                     <% } %>
                 <% } else if (tender.ledger_status === auditConst.status.checked) { %>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-success btn-sm pull-right text-dark">审批通过</a>
+                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-success btn-sm pull-right text-dark mr-1">审批通过</a>
                 <% } %>
             </div>
         </div>
@@ -51,7 +51,7 @@
                     <div class="bc-bar mb-1">
                         <ul class="nav nav-tabs">
                             <li class="nav-item">
-                                <a class="nav-link active" href="javascript:void(0)">部位明细</a>
+                                <a class="nav-link active" href="javascript:void(0)">计量单元</a>
                             </li>
                             <li class="nav-item" id="pos-search">
                             </li>

+ 7 - 7
app/view/ledger/audit_modal.ejs

@@ -20,7 +20,7 @@
                             <% } else if (auditors[i].status === auditConst.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion">同意</textarea>
+                                <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
                             </div>
                             <% } %>
                         </li>
@@ -29,10 +29,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -58,7 +58,7 @@
                             <% } else if (auditors[i].status === auditConst.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion">不同意</textarea>
+                                <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
                             </div>
                             <div class="alert alert-warning">审批退回,将直接退回给上报人。</div>
                             <% } %>
@@ -68,10 +68,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checkNo %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -203,7 +203,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 6 - 6
app/view/ledger/explode.ejs

@@ -21,7 +21,7 @@
                     </div>
                 </div>
                 <div class="d-inline-block">
-                    <a href="javascript:void(0)" id="insert" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-plus" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" id="insert" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" id="delete" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" id="up-level" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" id="down-level" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
@@ -32,11 +32,11 @@
                     <a href="javascript:void(0)" id="paste" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
                 </div>
                 <div class="d-inline-block">
-                    <div class="input-group input-group-sm ml-2 mt-1">
+                    <div class="input-group input-group-sm ml-2">
                         <div class="input-group-prepend">
                             <span class="input-group-text" id="basic-addon1">表达式</span>
                         </div>
-                        <input type="text" class="form-control m-0" id="bills-expr" readonly="">
+                        <input type="text" class="form-control form-control-sm m-0" id="bills-expr" readonly="">
                     </div>
                 </div>
             </div>
@@ -72,17 +72,17 @@
                     <div class="bc-bar mb-1">
                         <ul class="nav nav-tabs">
                             <li class="nav-item">
-                                <a class="nav-link active" href="javascript:void(0)">部位明细</a>
+                                <a class="nav-link active" href="javascript:void(0)">计量单元</a>
                             </li>
                             <li class="nav-item" id="pos-search">
                             </li>
                             <li class="nav-item">
                                 <div class="d-inline-block">
-                                    <div class="input-group input-group-sm ml-2 mt-1">
+                                    <div class="input-group input-group-sm ml-2">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text" id="basic-addon1">表达式</span>
                                         </div>
-                                        <input type="text" class="form-control m-0" id="pos-expr" readonly="">
+                                        <input type="text" class="form-control form-control-sm m-0" id="pos-expr" readonly="">
                                     </div>
                                 </div>
                             </li>

+ 15 - 15
app/view/ledger/explode_modal.ejs

@@ -19,8 +19,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="upload-ledger-ok">确认上传</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="upload-ledger-ok">确认上传</button>
             </div>
         </div>
     </div>
@@ -35,16 +35,16 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label for="exampleFormControlFile1">Excel模板</label>
-                    <div class="form-control"><a id="downloadDealTemplate" href="/tender/<%- ctx.tender.id %>/deal/download/template.xls" class="btn btn-sm btn-link">下载</a></div>
+                    <div class="form-control form-control-sm"><a id="downloadDealTemplate" href="/tender/<%- ctx.tender.id %>/deal/download/template.xls" class="btn btn-sm btn-link">下载</a></div>
                 </div>
                 <div class="form-group">
                     <label for="exampleFormControlFile1">上传签约清单Excel文件</label>
-                    <div class="form-control"><input type="file" class="form-control-file" id="deal-bills-file"></div>
+                    <div class="form-control form-control-sm"><input type="file" class="form-control-file" id="deal-bills-file"></div>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="upload-deal-bills">确认上传</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="upload-deal-bills">确认上传</button>
             </div>
         </div>
     </div>
@@ -74,8 +74,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary" id="batch-ok">确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm" id="batch-ok">确定</button>
             </div>
         </div>
     </div>
@@ -93,14 +93,14 @@
                     <label>选择审批人</label>
                     <div class="input-group">
                         <div class="input-group-prepend">
-                            <select class="form-control" id="account_group">
+                            <select class="form-control form-control-sm" id="account_group">
                                 <option value="0">所有分组</option>
                                 <% for (const dw in accountGroup) { %>
                                     <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                 <% } %>
                             </select>
                         </div>
-                        <select class="form-control" id="account_list">
+                        <select class="form-control form-control-sm" id="account_list">
                             <option value="0">选择审批人</option>
                             <% for (const account of accountList) { %>
                                 <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
@@ -124,9 +124,9 @@
                 </div>
             </div>
             <form class="modal-footer" method="post" action="/tender/<%- tender.id %>/ledger/audit/start" onsubmit="return checkAuditorFrom()">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button class="btn btn-primary" type="submit">确认上报</button>
+                <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
             </form>
         </div>
     </div>
@@ -240,8 +240,8 @@
             </div>
             <form class="modal-footer" action="/tender/<%- tender.id %>/ledger/audit/start" method="post" onsubmit="return checkAuditorFrom()">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">确认上报</button>
             </form>
         </div>
     </div>
@@ -374,7 +374,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 6 - 6
app/view/login/login.ejs

@@ -21,10 +21,10 @@
         <div class="tab-content">
             <!--<div class="tab-pane active" id="preview" role="tabpanel">-->
                 <!--<div class="form-group <% if (errorMessage !== undefined && errorMessage !== null) { %>has-danger<% } %>">-->
-                    <!--<input id="username" name="username" class="form-control " placeholder="通行账号 邮箱/手机" value="laiku123@qq.com" autofocus="">-->
+                    <!--<input id="username" name="username" class="form-control form-control-sm" placeholder="通行账号 邮箱/手机" value="laiku123@qq.com" autofocus="">-->
                 <!--</div>-->
                 <!--<div class="form-group <% if (errorMessage !== undefined && errorMessage !== null) { %>has-danger<% } %>">-->
-                    <!--<input id="password" name="password" class="form-control " placeholder="输入密码" value="19930523" type="password">-->
+                    <!--<input id="password" name="password" class="form-control form-control-sm" placeholder="输入密码" value="19930523" type="password">-->
                 <!--</div>-->
             <!--</div>-->
             <div class="tab-pane active" id="paid" role="tabpanel">
@@ -49,10 +49,10 @@
             <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
             <input type="hidden" name="type" value="2" />
         </div>
-        <div class="pt-1 d-flex justify-content-center">
-            <a href="http://sso.smartcost.com.cn/getpasswd" target="_blank" class="mr-3">忘记密码</a>
-            <a href="http://sso.smartcost.com.cn/reg" target="_blank">免费注册</a>
-        </div>
+        <!--<div class="pt-1 d-flex justify-content-center">-->
+            <!--<a href="http://sso.smartcost.com.cn/getpasswd" target="_blank" class="mr-3">忘记密码</a>-->
+            <!--<a href="http://sso.smartcost.com.cn/reg" target="_blank">免费注册</a>-->
+        <!--</div>-->
     </form>
     <!--项目版-->
 </div>

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

@@ -11,14 +11,14 @@
                     <label>选择审批人</label>
                     <div class="input-group">
                         <div class="input-group-prepend">
-                            <select class="form-control" id="account_group">
+                            <select class="form-control form-control-sm" id="account_group">
                                 <option value="0">所有分组</option>
                                 <% for (const dw in accountGroup) { %>
                                     <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                 <% } %>
                             </select>
                         </div>
-                        <select class="form-control" id="account_list">
+                        <select class="form-control form-control-sm" id="account_list">
                             <option value="0">选择审批人</option>
                             <% for (const account of accountList) { %>
                                 <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
@@ -42,9 +42,9 @@
                 </div>
             </div>
             <form class="modal-footer" method="post" action="<%- preUrl %>/audit/start" onsubmit="return checkAuditorFrom()">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button class="btn btn-primary" type="submit">确认上报</button>
+                <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
             </form>
         </div>
     </div>
@@ -109,7 +109,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
                                     </div>
                                     <% } %>
                                 </li>
@@ -120,10 +120,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -185,7 +185,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">不同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
                                     </div>
                                     <% } %>
                                 </li>
@@ -196,10 +196,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checkNo %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -332,7 +332,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -418,7 +418,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -503,7 +503,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -618,8 +618,8 @@
                 </div>
                 <form class="modal-footer" method="post" action="<%- preUrl %>/audit/start" onsubmit="return checkAuditorFrom()">
                     <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button class="btn btn-primary" type="submit">确认上报</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
                 </form>
             </div>
         </div>

+ 47 - 45
app/view/material/index.ejs

@@ -16,52 +16,54 @@
     </div>
     <div class="content-wrap">
         <div class="c-body">
-            <table class="table table-bordered">
-                <thead>
-                <tr>
-                    <th>期数</th>
-                    <th class="text-center">添加时间</th>
-                    <th class="text-center">计量期</th>
-                    <th class="text-center">价差费用(含税)</th>
-                    <th class="text-center">价差费用</th>
-                    <th class="text-center">审批进度</th>
-                    <th class="text-center">操作</th>
-                </tr>
-                </thead>
-                <tbody>
-                <% for (const m of materials) { %>
-                <tr>
-                    <td>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>">第 <%- m.order %> 期</a>
-                    </td>
-                    <td class="text-center"><%= moment(m.in_time).format('YYYY-MM-DD') %></td>
-                    <td class="text-center">第 <%= m.s_order %> 期</td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></td>
-                    <td class="<%- auditConst.auditProgressClass[m.status] %>">
-                        <% if (m.curAuditor) { %>
-                            <a href="#sp-list" data-toggle="modal" data-target="#sp-list" m-order="<%- m.order %>"><%- m.curAuditor.name %><%if (m.curAuditor.role !== '' && m.curAuditor.role !== null) { %>-<%- m.curAuditor.role %><% } %></a>
-                        <% } %>
-                        <%- auditConst.auditProgress[m.status] %>
-                    </td>
-                    <td class="text-center">
-                    <% if (m.status === auditConst.status.uncheck && m.user_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
-                    <% } else if (m.status === auditConst.status.checkNo && m.curAuditor && m.user_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
-                    <% } else if (m.status === auditConst.status.checking && m.curAuditor && m.curAuditor.aid === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
-                    <% } else { %>
-                        <span class="<%- auditConst.auditProgressClass[m.status] %>"><%- auditConst.auditProgress[m.status] %></span>
+            <div class="sjs-height-0">
+                <table class="table table-bordered">
+                    <thead>
+                    <tr>
+                        <th>期数</th>
+                        <th class="text-center">添加时间</th>
+                        <th class="text-center">计量期</th>
+                        <th class="text-center">价差费用(含税)</th>
+                        <th class="text-center">价差费用</th>
+                        <th class="text-center">审批进度</th>
+                        <th class="text-center">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <% for (const m of materials) { %>
+                        <tr>
+                            <td>
+                                <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>">第 <%- m.order %> 期</a>
+                            </td>
+                            <td class="text-center"><%= moment(m.in_time).format('YYYY-MM-DD') %></td>
+                            <td class="text-center">第 <%= m.s_order %> 期</td>
+                            <td class="text-right"><%= m.m_tp !== null ? ctx.helper.round(ctx.helper.mul(m.m_tp, 1+m.rate/100), 2) : null %></td>
+                            <td class="text-right"><%= m.m_tp %></td>
+                            <td class="<%- auditConst.auditProgressClass[m.status] %>">
+                                <% if (m.curAuditor) { %>
+                                    <a href="#sp-list" data-toggle="modal" data-target="#sp-list" m-order="<%- m.order %>"><%- m.curAuditor.name %><%if (m.curAuditor.role !== '' && m.curAuditor.role !== null) { %>-<%- m.curAuditor.role %><% } %></a>
+                                <% } %>
+                                <%- auditConst.auditProgress[m.status] %>
+                            </td>
+                            <td class="text-center">
+                                <% if (m.status === auditConst.status.uncheck && m.user_id === ctx.session.sessionUser.accountId) { %>
+                                    <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
+                                <% } else if (m.status === auditConst.status.checkNo && m.curAuditor && m.user_id === ctx.session.sessionUser.accountId) { %>
+                                    <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
+                                <% } else if (m.status === auditConst.status.checking && m.curAuditor && m.curAuditor.aid === ctx.session.sessionUser.accountId) { %>
+                                    <a href="<%- '/tender/' + ctx.tender.id + '/measure/material/' + m.order %>" class="btn <%- auditConst.statusButtonClass[m.status] %> btn-sm"><%- auditConst.statusButton[m.status] %></a>
+                                <% } else { %>
+                                    <span class="<%- auditConst.auditProgressClass[m.status] %>"><%- auditConst.auditProgress[m.status] %></span>
+                                <% } %>
+                                <% if (m.user_id === ctx.session.sessionUser.accountId && m.order === materials.length) { %>
+                                    <a href="#del-qi" class="btn btn-outline-danger btn-sm ml-1" data-toggle="modal" data-target="#del-qi">删除</a>
+                                <% } %>
+                            </td>
+                        </tr>
                     <% } %>
-                    <% if (m.user_id === ctx.session.sessionUser.accountId && m.order === materials.length) { %>
-                        <a href="#del-qi" class="btn btn-outline-danger btn-sm ml-1" data-toggle="modal" data-target="#del-qi">删除</a>
-                    <% } %>
-                    </td>
-                </tr>
-                <% } %>
-                </tbody>
-            </table>
+                    </tbody>
+                </table>
+            </div>
         </div>
     </div>
 </div>

+ 13 - 11
app/view/material/info.ejs

@@ -4,14 +4,14 @@
         <div class="title-main d-flex justify-content-between">
             <% include ./material_sub_mini_menu.ejs %>
             <div>
-                <% if ((ctx.material.status === auditConst.status.uncheck || ctx.material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.material.user_id) { %>
+                <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) { %>
                 <div class="d-inline-block">
                     <a href="javascript: void(0);" id="add" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增材料"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" id="del" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除材料"><i class="fa fa-remove" aria-hidden="true"></i></a>
                 </div>
                 <% } %>
                 <div class="d-inline-block">
-                    本期调差计量期:第<span class="mx-2"><%= ctx.material.s_order.split(',').join(',') %></span>期
+                    本期调差计量期:第<span class="mx-2"><%= material.s_order.split(',').join(',') %></span>期
                 </div>
             </div>
             <div class="ml-auto">
@@ -33,13 +33,13 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text" id="basic-addon1">增税税率</span>
                             </div>
-                            <select class="form-control col-1" id="changeRate">
-                                <% if (ctx.material.readOnly) { %>
-                                <option value="9" <% if(ctx.material.rate === 9) { %>selected<% } %>>9%</option>
-                                <option value="10" <% if(ctx.material.rate === 10) { %>selected<% } %>>10%</option>
-                                <option value="11" <% if(ctx.material.rate === 11) { %>selected<% } %>>11%</option>
+                            <select class="form-control form-control-sm col-1" id="changeRate">
+                                <% if (!material.readOnly) { %>
+                                <option value="9" <% if(material.rate === 9) { %>selected<% } %>>9%</option>
+                                <option value="10" <% if(material.rate === 10) { %>selected<% } %>>10%</option>
+                                <option value="11" <% if(material.rate === 11) { %>selected<% } %>>11%</option>
                                 <% } else { %>
-                                <option value="<%= ctx.material.rate %>" selected><%= ctx.material.rate %>%</option>
+                                <option value="<%= material.rate %>" selected><%= material.rate %>%</option>
                                 <% } %>
                             </select>
                         </div>
@@ -48,8 +48,8 @@
                         <div class="col-4 p-0">
                             <table class="table table-sm table-bordered">
                                 <tr><th></th><th>本期金额</th><th>截止本期金额</th></tr>
-                                <tr><td>材料价差费用</td><td><%= ctx.material.m_tp %></td><td><%= ctx.material.pre_tp %></td></tr>
-                                <tr><td>材料价差费用(含税)</td><td></td><td></td></tr>
+                                <tr><td>材料价差费用</td><td><%= material.m_tp %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.add(material.pre_tp, material.m_tp), 2) : null %></td></tr>
+                                <tr id="rate_set"><td>材料价差费用(含税)</td><td><%= material.m_tp !== null ? ctx.helper.mul(material.m_tp, 1+material.rate/100) : null %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(ctx.helper.add(material.pre_tp, material.m_tp), 1+material.rate/100), 2) : null %></td></tr>
                             </table>
                         </div>
                     </div>
@@ -58,7 +58,7 @@
         </div>
     </div>
 </div>
-<% if ((ctx.material.status === auditConst.status.uncheck || ctx.material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.material.user_id) {%>
+<% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) {%>
 <script>
     const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');
 </script>
@@ -69,4 +69,6 @@
     const materialListData = JSON.parse('<%- JSON.stringify(materialListData) %>');
     const readOnly = <%- material.readOnly %>;
     const materialID = <%- material.id %>;
+    const m_tp = <%= material.m_tp !== null ? material.m_tp : 0 %>;
+    const pre_tp = <%= material.pre_tp !== null ? material.pre_tp : 0 %>;
 </script>

+ 1 - 1
app/view/material/list.ejs

@@ -76,5 +76,5 @@
     const pos = JSON.parse('<%- JSON.stringify(pos) %>');
     const curPosData = JSON.parse('<%- JSON.stringify(curPosData) %>');
     const readOnly = <%- material.readOnly %>;
-    const materialID = <%- material.id %>;
+    const stage_order = <%- material.order %>;
 </script>

+ 4 - 4
app/view/material/list_modal.ejs

@@ -8,9 +8,9 @@
             </div>
             <div class="modal-body">
                 <div class="input-group input-group-sm mb-2">
-                    <input type="text" class="form-control" name="search" id="search_input" placeholder="输入 工料编号 / 名称 检索" aria-describedby="button-addon2">
+                    <input type="text" class="form-control form-control-sm" name="search" id="search_input" placeholder="输入 工料编号 / 名称 检索" aria-describedby="button-addon2">
                     <div class="input-group-append">
-                        <button class="btn btn-outline-secondary" type="button" id="search_btn"><i class="fa fa-search"></i></button>
+                        <button class="btn btn-outline-secondary btn-sm" type="button" id="search_btn"><i class="fa fa-search"></i></button>
                     </div>
                 </div>
                 <div class="modal-height-300">
@@ -36,8 +36,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="add_material_bill">确定添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="add_material_bill">确定添加</button>
             </div>
         </div>
     </div>

+ 6 - 6
app/view/material/modal.ejs

@@ -10,7 +10,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>调差期</label>
-                    <input class="form-control" value="第 <%- materials.length + 1 %> 期" type="text" readonly="">
+                    <input class="form-control form-control-sm" value="第 <%- materials.length + 1 %> 期" type="text" readonly="">
                 </div>
                 <div class="form-group">
                     <label>本期调差,包含计量期<span class="ml-2 text-danger" id="show_order" style="display: none">第<b class="mx-2"></b>期</span></label>
@@ -29,8 +29,8 @@
             <div class="modal-footer">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="s_order" value="" id="s_order" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" id="addMaterial" class="btn btn-primary">确定添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" id="addMaterial" class="btn btn-primary btn-sm">确定添加</button>
             </div>
         </form>
     </div>
@@ -51,8 +51,8 @@
             <div class="modal-footer">
                 <input type="hidden" name="material_id" value="<%= materials[0].id %>">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="submit" class="btn btn-danger">确定删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="submit" class="btn btn-danger btn-sm">确定删除</button>
             </div>
         </form>
     </div>
@@ -135,7 +135,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 3 - 3
app/view/measure/audit.ejs

@@ -195,7 +195,7 @@
                                     <div class="input-group-prepend">
                                         <span class="input-group-text" id="basic-addon3">表号前缀</span>
                                     </div>
-                                    <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
+                                    <input type="text" class="form-control form-control-sm" id="basic-url" aria-describedby="basic-addon3">
                                 </div>
                             </div>
                         </div>
@@ -231,12 +231,12 @@
                             </div>
                             <div class="form-group">
                                 <label>计算式说明:</label>
-                                <textarea class="form-control"></textarea>
+                                <textarea class="form-control form-control-sm"></textarea>
                             </div>
                             <div class="form-group">
                                 <a href="#edit-img" data-toggle="modal" data-target="#edit-img"  class="pull-right">添加草图</a>
                                 <label>计算草图:</label>
-                                <p class="form-control"><img src="img/sketch/2.png" class="d-100"></p>
+                                <p class="form-control form-control-sm"><img src="img/sketch/2.png" class="d-100"></p>
                             </div>
                         </div>
                     </div>

+ 7 - 7
app/view/measure/audit_modal.ejs

@@ -20,7 +20,7 @@
                             <% } else if (auditors[i].status === auditConst.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion"></textarea>
+                                <textarea class="form-control form-control-sm" name="opinion"></textarea>
                             </div>
                             <% } %>
                         </li>
@@ -29,11 +29,11 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="mid" value="<%- measure.mid %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -59,7 +59,7 @@
                             <% } else if (auditors[i].status === auditConst.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion"></textarea>
+                                <textarea class="form-control form-control-sm" name="opinion"></textarea>
                             </div>
                             <% } %>
                         </li>
@@ -68,11 +68,11 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="mid" value="<%- measure.mid %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checkNo %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -101,7 +101,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 1 - 1
app/view/measure/compare.ejs

@@ -37,7 +37,7 @@
                 <div class="bc-bar mb-1">
                     <ul class="nav nav-tabs">
                         <li class="nav-item">
-                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">部位明细</a>
+                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">计量单元</a>
                         </li>
                     </ul>
                 </div>

+ 2 - 2
app/view/measure/compare_modal.ejs

@@ -14,8 +14,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="select-qi-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="select-qi-ok">确认</button>
             </div>
         </div>
     </div>

+ 55 - 53
app/view/measure/stage.ejs

@@ -16,61 +16,63 @@
     </div>
     <div class="content-wrap">
         <div class="c-body">
-            <table class="table table-bordered">
-                <thead>
-                <tr>
-                    <th>期数</th>
-                    <th class="text-center">计量月份</th>
-                    <th class="text-center">本期合同计量</th>
-                    <th class="text-center">本期数量变更计量</th>
-                    <th class="text-center">本期完成计量</th>
-                    <th class="text-center">截止上期完成计量</th>
-                    <th class="text-center">截止本期完成计量</th>
-                    <th class="text-center">审批进度</th>
-                    <th class="text-center">操作</th>
-                </tr>
-                </thead>
-                <tbody>
-                <% for (const s of stages) { %>
-                <tr>
-                    <td>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>">第 <%- s.order %> 期</a>
-                        <% if (s.status === auditConst.status.uncheck && s.user_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="#edit" data-toggle="modal" data-target="#edit"><i class="fa fa-pencil-square-o "></i></a>
-                        <% } %>
-                    </td>
-                    <td class="text-center"><%- s.s_time %></td>
-                    <td class="text-right"><%- (s.contract_tp ? s.contract_tp : '')%></td>
-                    <td class="text-right"><%- (s.qc_tp ? s.qc_tp : '')%></td>
-                    <td class="text-right"><%- (s.tp ? s.tp : '')%></td>
-                    <td class="text-right"><%- (s.pre_tp ? s.pre_tp : '')%></td>
-                    <td class="text-right"><%- (s.end_tp ? s.end_tp : '')%></td>
-                    <td class="<%- auditConst.auditProgressClass[s.status] %>">
-                        <% if (s.curAuditor) { %>
+            <div class="sjs-height-0">
+                <table class="table table-bordered">
+                    <thead>
+                    <tr>
+                        <th>期数</th>
+                        <th class="text-center">计量月份</th>
+                        <th class="text-center">本期合同计量</th>
+                        <th class="text-center">本期数量变更计量</th>
+                        <th class="text-center">本期完成计量</th>
+                        <th class="text-center">截止上期完成计量</th>
+                        <th class="text-center">截止本期完成计量</th>
+                        <th class="text-center">审批进度</th>
+                        <th class="text-center">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <% for (const s of stages) { %>
+                    <tr>
+                        <td>
+                            <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>">第 <%- s.order %> 期</a>
+                            <% if (s.status === auditConst.status.uncheck && s.user_id === ctx.session.sessionUser.accountId) { %>
+                            <a href="#edit" data-toggle="modal" data-target="#edit"><i class="fa fa-pencil-square-o "></i></a>
+                            <% } %>
+                        </td>
+                        <td class="text-center"><%- s.s_time %></td>
+                        <td class="text-right"><%- (s.contract_tp ? s.contract_tp : '')%></td>
+                        <td class="text-right"><%- (s.qc_tp ? s.qc_tp : '')%></td>
+                        <td class="text-right"><%- (s.tp ? s.tp : '')%></td>
+                        <td class="text-right"><%- (s.pre_tp ? s.pre_tp : '')%></td>
+                        <td class="text-right"><%- (s.end_tp ? s.end_tp : '')%></td>
+                        <td class="<%- auditConst.auditProgressClass[s.status] %>">
+                            <% if (s.curAuditor) { %>
                             <a href="#sp-list" data-toggle="modal" data-target="#sp-list" s-order="<%- s.order %>"><%- s.curAuditor.name %><%if (s.curAuditor.role !== '' && s.curAuditor.role !== null) { %>-<%- s.curAuditor.role %><% } %></a>
-                        <% } %>
-                        <%- auditConst.auditProgress[s.status] %>
-                    </td>
-                    <td class="text-center">
-                    <% if (s.status === auditConst.status.uncheck && s.user_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
-                    <% } else if (s.status === auditConst.status.checkNo && s.curAuditor && s.user_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
-                    <% } else if (s.status === auditConst.status.checking && s.curAuditor && s.curAuditor.aid === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
-                    <% } else if (s.status === auditConst.status.checkNoPre && s.curAuditor && s.curAuditor2.aid === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
-                    <% } else { %>
-                        <span class="<%- auditConst.auditStringClass[s.status] %>"><%- auditConst.auditString[s.status] %></span>
+                            <% } %>
+                            <%- auditConst.auditProgress[s.status] %>
+                        </td>
+                        <td class="text-center">
+                            <% if (s.status === auditConst.status.uncheck && s.user_id === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
+                            <% } else if (s.status === auditConst.status.checkNo && s.curAuditor && s.user_id === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
+                            <% } else if (s.status === auditConst.status.checking && s.curAuditor && s.curAuditor.aid === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
+                            <% } else if (s.status === auditConst.status.checkNoPre && s.curAuditor && s.curAuditor2.aid === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- '/tender/' + ctx.tender.id + '/measure/stage/' + s.order %>" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>
+                            <% } else { %>
+                            <span class="<%- auditConst.auditStringClass[s.status] %>"><%- auditConst.auditString[s.status] %></span>
+                            <% } %>
+                            <% if (s.user_id === ctx.session.sessionUser.accountId && s.order === stages.length) { %>
+                            <a href="#del-qi" class="btn btn-outline-danger btn-sm ml-1" data-toggle="modal" data-target="#del-qi">删除</a>
+                            <% } %>
+                        </td>
+                    </tr>
                     <% } %>
-                    <% if (s.user_id === ctx.session.sessionUser.accountId && s.order === stages.length) { %>
-                        <a href="#del-qi" class="btn btn-outline-danger btn-sm ml-1" data-toggle="modal" data-target="#del-qi">删除</a>
-                    <% } %>
-                    </td>
-                </tr>
-                <% } %>
-                </tbody>
-            </table>
+                    </tbody>
+                </table>
+            </div>
         </div>
     </div>
 </div>

+ 13 - 13
app/view/measure/stage_modal.ejs

@@ -10,21 +10,21 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>期</label>
-                    <input class="form-control" value="第 <%- stages.length + 1 %> 期" type="text" readonly="">
+                    <input class="form-control form-control-sm" value="第 <%- stages.length + 1 %> 期" type="text" readonly="">
                 </div>
                 <div class="form-group">
                     <label>计量年月</label>
-                    <input class="datepicker-here form-control" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" name="date" autocomplete="off">
+                    <input class="datepicker-here form-control form-control-sm" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" name="date" autocomplete="off">
                 </div>
                 <div class="form-group">
                     <label>开始-截止日期</label>
-                    <input class="datepicker-here form-control" placeholder="点击选择时间" data-range="true" data-multiple-dates-separator=" ~ " data-language="zh" type="text" name="period" autocomplete="off">
+                    <input class="datepicker-here form-control form-control-sm" placeholder="点击选择时间" data-range="true" data-multiple-dates-separator=" ~ " data-language="zh" type="text" name="period" autocomplete="off">
                 </div>
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary" id="add-stage-btn">确定添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm" id="add-stage-btn">确定添加</button>
             </div>
         </form>
     </div>
@@ -45,8 +45,8 @@
             <div class="modal-footer">
                 <input type="hidden" name="stage_id" value="<%= stages[0].id %>">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="submit" class="btn btn-danger">确定删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="submit" class="btn btn-danger btn-sm">确定删除</button>
             </div>
         </form>
     </div>
@@ -129,7 +129,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -145,22 +145,22 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>期</label>
-                    <input class="form-control" value="第 <%- stages[0].order %> 期" type="text" readonly="" name="name">
+                    <input class="form-control form-control-sm" value="第 <%- stages[0].order %> 期" type="text" readonly="" name="name">
                 </div>
                 <div class="form-group">
                     <label>计量年月</label>
-                    <input class="datepicker-here form-control" id="edit-date" name="date" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text">
+                    <input class="datepicker-here form-control form-control-sm" id="edit-date" name="date" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text">
                 </div>
                 <div class="form-group">
                     <label>开始-截止日期</label>
-                    <input class="datepicker-here form-control" id="edit-period" name="period" placeholder="点击选择时间" data-range="true" data-multiple-dates-separator=" ~ " data-language="zh" type="text">
+                    <input class="datepicker-here form-control form-control-sm" id="edit-period" name="period" placeholder="点击选择时间" data-range="true" data-multiple-dates-separator=" ~ " data-language="zh" type="text">
                 </div>
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="order" value="<%- stages[0].order %>">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary" id="edit-ok" >确定修改</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm" id="edit-ok" >确定修改</button>
             </div>
         </form>
     </div>

+ 28 - 28
app/view/measure/wlist_modal.ejs

@@ -9,27 +9,27 @@
                 <div class="form-group">
                     <label>中间计量编号<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input type="text" class="form-control" placeholder="请输入中间计量编号" value="WJQR1-201711" id="mj-code">
+                        <input type="text" class="form-control form-control-sm" placeholder="请输入中间计量编号" value="WJQR1-201711" id="mj-code">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
                         </div>
                         <div class="invalid-feedback" style="display: none" id="mj-Hint">您输入的编号已存在</div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>计量月份</label>
-                    <input data-view="months" data-min-view="months" class="datepicker-here form-control" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh" id="mj-date">
+                    <input data-view="months" data-min-view="months" class="datepicker-here form-control form-control-sm" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh" id="mj-date">
                 </div>
                 <div class="form-group">
                     <label>计量期</label>
-                    <select class="form-control">
+                    <select class="form-control form-control-sm">
                         <option disabled>选填</option>
                     </select>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" id="addCancel">关闭</button>
-                <button type="button" class="btn btn-primary" id="addOk">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="addOk">添加</button>
             </div>
         </div>
     </div>
@@ -55,9 +55,9 @@
                         <div class="form-group">
                             <label>中间计量编号<b class="text-danger">*</b></label>
                             <div class="input-group">
-                                <input type="text" class="form-control" placeholder="请输入中间计量编号" value="WJQR1-201711">
+                                <input type="text" class="form-control form-control-sm" placeholder="请输入中间计量编号" value="WJQR1-201711">
                                 <div class="input-group-append">
-                                    <button class="btn btn-outline-secondary" type="button" title="自动编号"><i class="fa fa-repeat"></i></button>
+                                    <button class="btn btn-outline-secondary btn-sm" type="button" title="自动编号"><i class="fa fa-repeat"></i></button>
                                 </div>
                             </div>
                         </div>
@@ -67,7 +67,7 @@
                         </div>
                         <div class="form-group">
                             <label>计量期</label>
-                            <select class="form-control">
+                            <select class="form-control form-control-sm">
                                 <option>选填</option>
                                 <option>15</option>
                                 <option>14</option>
@@ -97,7 +97,7 @@
                         </h5>
                         <h5>添加新规则组件</h5>
                         <div class="form-group">
-                            <select class="form-control">
+                            <select class="form-control form-control-sm">
                                 <option disabled selected>请选择组件</option>
                                 <% for (const index in ruleConst.ruleString) { %>
                                 <option value="<%- index %>"><%- ruleConst.ruleString[index] %></option>
@@ -106,20 +106,20 @@
                         </div>
                         <div class="form-group" id="format" style="display: none">
                             <label>自动编号位数</label>
-                            <input min="3" class="form-control" step="1" max="6" value="3" type="number">
+                            <input min="3" class="form-control form-control-sm" step="1" max="6" value="3" type="number">
                         </div>
                         <div class="form-group" id="text" style="display: none">
                             <label>起始编号</label>
-                            <input class="form-control" value="001" type="text">
+                            <input class="form-control form-control-sm" value="001" type="text">
                         </div>
-                        <button class="btn btn-primary" id="addRule">添加组件</button>
+                        <button class="btn btn-primary btn-sm" id="addRule">添加组件</button>
                     </div>
                 </div>
             </div>
             <div class="modal-footer d-flex justify-content-between">
                 <div>
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" class="btn btn-primary">确定</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-primary btn-sm">确定</button>
                 </div>
             </div>
         </div>
@@ -136,22 +136,22 @@
                 <div class="form-group">
                     <label>中间计量编号<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input id="codeEdit" type="text" class="form-control" placeholder="请输入中间计量编号" value="WJQR1-201711">
+                        <input id="codeEdit" type="text" class="form-control form-control-sm" placeholder="请输入中间计量编号" value="WJQR1-201711">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button" title="自动编号"><i class="fa fa-repeat"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button" title="自动编号"><i class="fa fa-repeat"></i></button>
                         </div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>计量月份</label>
-                    <input data-view="months" data-min-view="months" class="datepicker-here form-control" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh">
+                    <input data-view="months" data-min-view="months" class="datepicker-here form-control form-control-sm" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh">
                 </div>
             </div>
             <div class="modal-footer d-flex justify-content-between">
                 <a href="javascript: void(0)" data-toggle="modal" data-target="#del" class="btn btn-outline-danger btn-sm pull-right">删除 WJQR1-201710</a>
                 <div>
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button type="button" class="btn btn-primary" id="editOk">确定</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-primary btn-sm" id="editOk">确定</button>
                 </div>
             </div>
         </div>
@@ -191,7 +191,7 @@
                 </h5>
                 <h5>添加新规则组件</h5>
                 <div class="form-group">
-                    <select class="form-control">
+                    <select class="form-control form-control-sm">
                         <option disabled selected>请选择组件</option>
                         <% for (const index in ruleConst.ruleString) { %>
                         <option value="<%- index %>"><%- ruleConst.ruleString[index] %></option>
@@ -200,17 +200,17 @@
                 </div>
                 <div class="form-group" id="format" style="display: none">
                     <label>自动编号位数</label>
-                    <input min="3" class="form-control" step="1" max="6" value="3" type="number">
+                    <input min="3" class="form-control form-control-sm" step="1" max="6" value="3" type="number">
                 </div>
                 <div class="form-group" id="text" style="display: none">
                     <label>起始编号</label>
-                    <input class="form-control" value="001" type="text">
+                    <input class="form-control form-control-sm" value="001" type="text">
                 </div>
-                <button class="btn btn-primary" id="addRule">添加组件</button>
+                <button class="btn btn-primary btn-sm" id="addRule">添加组件</button>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button class="btn btn-primary" id="setRule">确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button class="btn btn-primary btn-sm" id="setRule">确定</button>
             </div>
         </div>
     </div>
@@ -223,8 +223,8 @@
                 <h5>确认删除 <span id="code">WJQR1-201710</span> ?</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-danger" id="delOk">确认删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-danger btn-sm" id="delOk">确认删除</button>
             </div>
         </div>
     </div>

+ 3 - 3
app/view/measure/work.ejs

@@ -173,7 +173,7 @@
                                     <div class="input-group-prepend">
                                         <span class="input-group-text" id="basic-addon3">表号前缀</span>
                                     </div>
-                                    <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
+                                    <input type="text" class="form-control form-control-sm" id="basic-url" aria-describedby="basic-addon3">
                                 </div>
                             </div>
                         </div>
@@ -209,12 +209,12 @@
                             </div>
                             <div class="form-group">
                                 <label>计算式说明:</label>
-                                <textarea class="form-control"></textarea>
+                                <textarea class="form-control form-control-sm"></textarea>
                             </div>
                             <div class="form-group">
                                 <a href="#edit-img" data-toggle="modal" data-target="#edit-img"  class="pull-right">添加草图</a>
                                 <label>计算草图:</label>
-                                <p class="form-control"><img src="img/sketch/2.png" class="d-100"></p>
+                                <p class="form-control form-control-sm"><img src="img/sketch/2.png" class="d-100"></p>
                             </div>
                         </div>
                     </div>

+ 24 - 24
app/view/measure/work_modal.ejs

@@ -9,27 +9,27 @@
                 <div class="form-group">
                     <label>中间计量编号<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input type="text" class="form-control" placeholder="请输入中间计量编号" value="WJQR1-201711" id="mj-code">
+                        <input type="text" class="form-control form-control-sm" placeholder="请输入中间计量编号" value="WJQR1-201711" id="mj-code">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
                         </div>
                         <div class="invalid-feedback" style="display: none" id="mj-Hint">您输入的编号已存在</div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>计量月份</label>
-                    <input data-view="months" data-min-view="months" class="datepicker-here form-control" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh" id="mj-date">
+                    <input data-view="months" data-min-view="months" class="datepicker-here form-control form-control-sm" placeholder="按时间筛选" type="text" data-date-format="yyyy MM " data-language="zh" id="mj-date">
                 </div>
                 <div class="form-group">
                     <label>计量期</label>
-                    <select class="form-control">
+                    <select class="form-control form-control-sm">
                         <option disabled>选填</option>
                     </select>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" id="addCancel">关闭</button>
-                <button type="button" class="btn btn-primary" id="addOk">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="addOk">添加</button>
             </div>
         </div>
     </div>
@@ -43,9 +43,9 @@
             </div>
             <div class="modal-body">
                 <div class="input-group mb-3">
-                    <input type="text" class="form-control" placeholder="输入项目节编号/名称 检索">
+                    <input type="text" class="form-control form-control-sm" placeholder="输入项目节编号/名称 检索">
                     <div class="input-group-append">
-                        <button class="btn btn-primary" type="button" id="search-pos">检索</button>
+                        <button class="btn btn-primary btn-sm" type="button" id="search-pos">检索</button>
                     </div>
                 </div>
                 <!--检索结果-->
@@ -63,8 +63,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="chooseBills">选择计量清单</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="chooseBills">选择计量清单</button>
             </div>
         </div>
     </div>
@@ -78,9 +78,9 @@
             </div>
             <div class="modal-body">
                 <div class="input-group mb-3">
-                    <input type="text" class="form-control" placeholder="输入清单编号/名称 检索">
+                    <input type="text" class="form-control form-control-sm" placeholder="输入清单编号/名称 检索">
                     <div class="input-group-append">
-                        <button class="btn btn-primary" type="button" id="search-bills">检索</button>
+                        <button class="btn btn-primary btn-sm" type="button" id="search-bills">检索</button>
                     </div>
                 </div>
                 <!--检索结果-->
@@ -95,8 +95,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-primary" id="choosePos">选择计量范围</button>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="choosePos">选择计量范围</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -128,7 +128,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -144,9 +144,9 @@
                 <div class="form-group">
                     <label>搜索审批人</label>
                     <div class="input-group">
-                        <input class="form-control" placeholder="请输入姓名进行检索" type="text" id="searchName">
+                        <input class="form-control form-control-sm" placeholder="请输入姓名进行检索" type="text" id="searchName">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button" id="searchAccount"><i class="fa fa-search"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button" id="searchAccount"><i class="fa fa-search"></i></button>
                         </div>
                     </div>
                 </div>
@@ -169,8 +169,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="auditStart">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="auditStart">确认上报</button>
             </div>
         </div>
     </div>
@@ -194,8 +194,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-primary" id="auditRestart">确认上报</button>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="auditRestart">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -227,7 +227,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -257,8 +257,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" >确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" >确认</button>
             </div>
         </div>
     </div>

+ 1 - 1
app/view/profile/info.ejs

@@ -18,7 +18,7 @@
                         <input-text label="手机" value="<%= accountData.mobile %>" name="mobile" maxlength="11"></input-text>
                         <input-text label="电话" value="<%= accountData.telephone %>" name="telephone"></input-text>
                         <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                        <button type="submit" class="btn btn-primary" id="base-submit">确认修改</button>
+                        <button type="submit" class="btn btn-primary btn-sm" id="base-submit">确认修改</button>
                     </form>
                 </div>
             </div>

+ 1 - 1
app/view/profile/safe.ejs

@@ -16,7 +16,7 @@
                         <input-text label="新密码" password="true" name="new_password" id="new_password"></input-text>
                         <input-text label="确认新密码" password="true" name="confirm_password"></input-text>
                         <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                        <button type="submit" class="btn btn-primary" id="modify-password">修改密码</button>
+                        <button type="submit" class="btn btn-primary btn-sm" id="modify-password">修改密码</button>
                         <% } else { %>
                         <p>SSO用户请到<a href="#">此处</a>修改密码</p>
                         <% } %>

+ 1 - 1
app/view/profile/sign.ejs

@@ -31,7 +31,7 @@
                             <div><img src="/profile/qrCode" width="150"></div>
                             <small class="form-text text-danger">微信扫码使用在线手写程序</small>
                         </div>
-                        <button type="button" class="btn btn-danger" id="delete-sign">移除签名</button>
+                        <button type="button" class="btn btn-danger btn-sm" id="delete-sign">移除签名</button>
                         <div class="form-group">
                             <label>签名图预览</label>
                             <div>

+ 7 - 7
app/view/profile/sms.ejs

@@ -14,9 +14,9 @@
                     <div class="form-group">
                         <label>已认证手机(用于 找回密码、接收通知)</label>
                         <div class="input-group mb-3">
-                            <input class="form-control" readonly="" value="<%= accountData.auth_mobile %>">
+                            <input class="form-control form-control-sm" readonly="" value="<%= accountData.auth_mobile %>">
                             <div class="input-group-append">
-                                <button class="btn btn-outline-secondary" id="change-mobile">修改手机</button>
+                                <button class="btn btn-outline-secondary btn-sm" id="change-mobile">修改手机</button>
                             </div>
                         </div>
                     </div>
@@ -26,19 +26,19 @@
                         <div class="form-group">
                             <label>认证手机(用于 找回密码、接收通知)</label>
                             <div class="input-group mb-3">
-                                <input class="form-control" placeholder="输入11位手机号码" value="" name="auth_mobile" maxlength="11"/>
+                                <input class="form-control form-control-sm" placeholder="输入11位手机号码" value="" name="auth_mobile" maxlength="11"/>
                                 <div class="input-group-append">
-                                    <button class="btn btn-outline-secondary" type="button" id="get-code">获取验证码</button>
+                                    <button class="btn btn-outline-secondary btn-sm" type="button" id="get-code">获取验证码</button>
                                 </div>
                             </div>
                         </div>
                         <div class="form-group">
                             <div class="input-group mb-3">
-                                <input class="form-control" type="text" readonly="readonly" name="code" placeholder="输入短信中的6位验证码" />
+                                <input class="form-control form-control-sm" type="text" readonly="readonly" name="code" placeholder="输入短信中的6位验证码" />
                                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
                             </div>
                         </div>
-                        <button type="button" class="btn btn-secondary disabled" id="bind-btn">确认绑定</button>
+                        <button type="button" class="btn btn-secondary btn-sm disabled" id="bind-btn">确认绑定</button>
                     </form>
                     <% if (accountData.auth_mobile !== '') { %>
                     <!--短信通知开关(已有认证手机后显示)-->
@@ -61,7 +61,7 @@
                                 </div>
                             </div>
                             <% } %>
-                            <button type="submit" class="btn btn-primary">确认修改</button>
+                            <button type="submit" class="btn btn-primary btn-sm">确认修改</button>
                         </form>
                     </div>
                     <% } %>

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

@@ -112,7 +112,7 @@
                                         <div class="input-group-prepend">
                                             <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上一页" onclick="rptControlObj.prePage(this)"><i class="fa fa-chevron-left"></i></button>
                                         </div>
-                                        <input class="form-control" id="rpt_page_num" value="1/10" onKeydown="rptControlObj.onKeydown(event, this)" style="width:60px" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">
+                                        <input class="form-control form-control-sm" id="rpt_page_num" value="1/10" onKeydown="rptControlObj.onKeydown(event, this)" style="width:60px" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">
                                         <div class="input-group-append">
                                             <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下一页" onclick="rptControlObj.nextPage(this)"><i class="fa fa-chevron-right"></i></button>
                                         </div>

+ 17 - 17
app/view/report/rpt_all_popup.ejs

@@ -14,7 +14,7 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text">上</span>
                             </div>
-                            <input type="number" class="form-control" id="elementMargin_Top" value="12" onchange="rptControlObj.changeMargin('Top', this)" onkeyup="rptControlObj.changeMargin('Top', this)">
+                            <input type="number" class="form-control form-control-sm" id="elementMargin_Top" value="12" onchange="rptControlObj.changeMargin('Top', this)" onkeyup="rptControlObj.changeMargin('Top', this)">
                         </div>
                     </div>
                 </div>
@@ -24,7 +24,7 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text">左</span>
                             </div>
-                            <input type="number" class="form-control" id="elementMargin_Left" value="12" onchange="rptControlObj.changeMargin('Left', this)" onkeyup="rptControlObj.changeMargin('Left', this)">
+                            <input type="number" class="form-control form-control-sm" id="elementMargin_Left" value="12" onchange="rptControlObj.changeMargin('Left', this)" onkeyup="rptControlObj.changeMargin('Left', this)">
                         </div>
                     </div>
                     <div class="col-6">
@@ -35,7 +35,7 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text">右</span>
                             </div>
-                            <input type="number" class="form-control" id="elementMargin_Right" value="12" onchange="rptControlObj.changeMargin('Right', this)" onkeyup="rptControlObj.changeMargin('Right', this)">
+                            <input type="number" class="form-control form-control-sm" id="elementMargin_Right" value="12" onchange="rptControlObj.changeMargin('Right', this)" onkeyup="rptControlObj.changeMargin('Right', this)">
                         </div>
                     </div>
                 </div>
@@ -45,15 +45,15 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text">下</span>
                             </div>
-                            <input type="number" class="form-control" id="elementMargin_Bottom"value="12" onchange="rptControlObj.changeMargin('Bottom', this)" onkeyup="rptControlObj.changeMargin('Bottom', this)">
+                            <input type="number" class="form-control form-control-sm" id="elementMargin_Bottom"value="12" onchange="rptControlObj.changeMargin('Bottom', this)" onkeyup="rptControlObj.changeMargin('Bottom', this)">
                         </div>
                     </div>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.restoreMargine(); zTreeOprObj.changeCfg();">恢复默认值</button>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a href="javascript:void(0)" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
+                <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="rptControlObj.restoreMargine(); zTreeOprObj.changeCfg();">恢复默认值</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
             </div>
         </div>
     </div>
@@ -103,9 +103,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.restoreFormat(); zTreeOprObj.changeCfg();">恢复默认值</button>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a href="javascript:void(0)" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
+                <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="rptControlObj.restoreFormat(); zTreeOprObj.changeCfg();">恢复默认值</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
             </div>
         </div>
     </div>
@@ -150,8 +150,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <a onclick="rptControlObj.getExcel()" class="btn btn-primary" data-dismiss="modal">确定导出</a>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a onclick="rptControlObj.getExcel()" class="btn btn-primary btn-sm" data-dismiss="modal">确定导出</a>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
             </div>
         </div>
     </div>
@@ -168,8 +168,8 @@
             <div class="modal-body" id="eSignatureBodyDiv">
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="rptSignatureHelper.removeSelectSignature()">取消</button>
-                <a onclick="rptSignatureHelper.setupAfterSelectSignature()" class="btn btn-primary" data-dismiss="modal">确定</a>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptSignatureHelper.removeSelectSignature()">取消</button>
+                <a onclick="rptSignatureHelper.setupAfterSelectSignature()" class="btn btn-primary btn-sm" data-dismiss="modal">确定</a>
             </div>
         </div>
     </div>
@@ -202,7 +202,7 @@
                             <div class="input-group-prepend">
                                 <span class="input-group-text" id="inputGroup-sizing-sm"><i class="fa fa-search"></i></span>
                             </div>
-                            <input type="text" class="form-control" placeholder="搜索...">
+                            <input type="text" class="form-control form-control-sm" placeholder="搜索...">
                         </div>
                         <div class="modal-height-300" id="project_account_select_div">
                         </div>
@@ -217,13 +217,13 @@
                                         <div class="input-group-prepend">
                                             <span class="input-group-text" id="inputGroup-sizing-sm">角色名称</span>
                                         </div>
-                                        <input type="text" class="form-control" id="acc_role_name" placeholder="最多10个字符">
+                                        <input type="text" class="form-control form-control-sm" id="acc_role_name" placeholder="最多10个字符">
                                     </div>
                                     <div class="input-group input-group-sm mb-1">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text" id="inputGroup-sizing-sm">绑定成员</span>
                                         </div>
-                                        <select class="form-control" id="project_account_select_dom">
+                                        <select class="form-control form-control-sm" id="project_account_select_dom">
                                         </select>
                                     </div>
                                     <a href="javascript:void(0)" onclick="rptSignatureHelper.createNewRole(this)" class="btn btn-sm btn-primary">添加角色</a>

+ 4 - 4
app/view/report/rpt_content_format.ejs

@@ -37,10 +37,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" onclick="rptControlObj.restoreCustCFG()">恢复默认值</button>
-                <button type="button" class="btn btn-link float-left" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
-                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-link btn-sm float-left" onclick="rptControlObj.restoreCustCFG()">恢复默认值</button>
+                <button type="button" class="btn btn-link btn-sm float-left" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
+                <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
             </div>
         </div>
     </div>

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

@@ -44,7 +44,7 @@
                     <div class="bc-bar mb-1">
                         <ul class="nav nav-tabs">
                             <li class="nav-item">
-                                <a class="nav-link active" href="javascript:void(0)">部位明细</a>
+                                <a class="nav-link active" href="javascript:void(0)">计量单元</a>
                             </li>
                             <li class="nav-item" id="pos-search">
                             </li>
@@ -71,15 +71,15 @@
                             <div class="alert alert-warning">历史修订暂不支持查看历史台帐。</div>
                             <div class="form-group mt-2">
                                 <label >提交人</label>
-                                <input id="user-name" type="" class="form-control" value="<%- revise.user_name %>" disabled>
+                                <input id="user-name" type="" class="form-control form-control-sm" value="<%- revise.user_name %>" disabled>
                             </div>
                             <div class="form-group">
                                 <label >修订内容<b class="text-danger">*</b></label>
-                                <textarea id="content" class="form-control" value="编写错漏5" rows="12"><%- revise.content %></textarea>
+                                <textarea id="content" class="form-control form-control-sm" value="编写错漏5" rows="12" readonly=""><%- revise.content %></textarea>
                             </div>
                             <div class="form-group">
                                 <label >审批完成</label>
-                                <input id="end-time" type="" class="form-control" value="<%- (revise.end_time ? revise.end_time.toLocaleString() : '') %>" disabled>
+                                <input id="end-time" type="" class="form-control form-control-sm" value="<%- (revise.end_time ? revise.end_time.toLocaleString() : '') %>" disabled>
                             </div>
                         </div>
                     </div>

+ 51 - 49
app/view/revise/index.ejs

@@ -6,14 +6,14 @@
             <div class="fluid">
                 <div class="d-inline-block">
                     <div class="input-group input-group-sm">
-                        <input class="datepicker-here form-control mt-0" placeholder="按时间筛选" data-range="true" data-multiple-dates-separator=" - " data-language="zh" type="text" style="width:190px">
+                        <input class="datepicker-here form-control form-control-sm mt-0" placeholder="按时间筛选" data-range="true" data-multiple-dates-separator=" - " data-language="zh" type="text" style="width:190px">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button" title="筛选"><i class="fa fa-filter"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button" title="筛选"><i class="fa fa-filter"></i></button>
                         </div>
                     </div>
                 </div>
             </div>
-            <div>
+            <div class="ml-1">
                 <% if (addValid) { %>
                 <div class="d-inline-block">
                     <a href="#add-bg" data-toggle="modal" data-target="#add-bg" class="btn btn-primary btn-sm pull-right">新建修订</a>
@@ -24,52 +24,54 @@
     </div>
     <div class="content-wrap">
         <div class="c-body">
-            <!--修订中-->
-            <table class="table table-bordered">
-                <thead>
-                <tr>
-                    <th></th>
-                    <th>创建时间</th>
-                    <th>提交人</th>
-                    <th>状态</th>
-                    <th>完成时间</th>
-                    <th>操作</th>
-                </tr>
-                </thead>
-                <% for (const lr of ledgerRevise) { %>
-                <tr>
-                    <td><%- lr.corder %></td>
-                    <td><%- lr.in_time ? lr.in_time.toLocaleDateString() : '' %></td>
-                    <td><%- lr.user_name %></td>
-                    <td <% if (!lr.valid) {%>class="text-danger"<% } %>>
-                        <% if (lr.valid) { %>
-                        <%- auditConst.statusString[lr.status] %>
-                        <% } else { %>
-                        作废
-                        <% } %>
-                    </td>
-                    <td><%- lr.end_time ? lr.end_time.toLocaleDateString() : '' %></td>
-                    <td>
-                        <% if (lr.valid) { %>
-                        <% if (lr.status === auditConst.status.uncheck && lr.uid === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- preUrl + '/revise/info' %>" class="btn btn-primary btn-sm">修订</a>
-                        <a href="#remove" data-toggle="modal" data-target="#remove" class="btn btn-secondary btn-sm">作废</a>
-                        <% } else if (lr.status === auditConst.status.checking && lr.curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- preUrl + '/revise/info' %>" class="btn btn-success btn-sm">审批</a>
-                        <% } else if (lr.status === auditConst.status.checkNo && lr.uid === ctx.session.sessionUser.accountId) { %>
-                        <a href="<%- preUrl + '/revise/info' %>" class="btn btn-primary btn-sm">重新上报</a>
-                        <a href="#remove" data-toggle="modal" data-target="#remove" class="btn btn-secondary btn-sm">作废</a>
-                        <% } %>
-                        <% } %>
-                        <% if (lr.lastest) { %>
-                        <a href="<%- preUrl + '/revise/history' %>">查看修订内容</a>
-                        <% } %>
-                    </td>
-                </tr>
-                <% } %>
-            </table>
-            <!--翻页-->
-            <% include ../layout/page.ejs %>
+            <div class="sjs-height-0">
+                <!--修订中-->
+                <table class="table table-bordered">
+                    <thead>
+                    <tr>
+                        <th></th>
+                        <th>创建时间</th>
+                        <th>提交人</th>
+                        <th>状态</th>
+                        <th>完成时间</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <% for (const lr of ledgerRevise) { %>
+                    <tr>
+                        <td><%- lr.corder %></td>
+                        <td><%- lr.in_time ? lr.in_time.toLocaleDateString() : '' %></td>
+                        <td><%- lr.user_name %></td>
+                        <td <% if (!lr.valid) {%>class="text-danger"<% } %>>
+                            <% if (lr.valid) { %>
+                            <%- auditConst.statusString[lr.status] %>
+                            <% } else { %>
+                            作废
+                            <% } %>
+                        </td>
+                        <td><%- lr.end_time ? lr.end_time.toLocaleDateString() : '' %></td>
+                        <td>
+                            <% if (lr.valid) { %>
+                            <% if (lr.status === auditConst.status.uncheck && lr.uid === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- preUrl + '/revise/info' %>" class="btn btn-primary btn-sm">修订</a>
+                            <a href="#remove" data-toggle="modal" data-target="#remove" class="btn btn-secondary btn-sm">作废</a>
+                            <% } else if (lr.status === auditConst.status.checking && lr.curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- preUrl + '/revise/info' %>" class="btn btn-success btn-sm">审批</a>
+                            <% } else if (lr.status === auditConst.status.checkNo && lr.uid === ctx.session.sessionUser.accountId) { %>
+                            <a href="<%- preUrl + '/revise/info' %>" class="btn btn-primary btn-sm">重新上报</a>
+                            <a href="#remove" data-toggle="modal" data-target="#remove" class="btn btn-secondary btn-sm">作废</a>
+                            <% } %>
+                            <% } %>
+                            <% if (lr.lastest) { %>
+                            <a href="<%- preUrl + '/revise/history' %>">查看修订内容</a>
+                            <% } %>
+                        </td>
+                    </tr>
+                    <% } %>
+                </table>
+                <!--翻页-->
+                <% include ../layout/page.ejs %>
+            </div>
         </div>
     </div>
 </div>

+ 17 - 17
app/view/revise/info.ejs

@@ -23,7 +23,7 @@
                     </div>
                 </div>
                 <div class="d-inline-block">
-                    <a href="javascript: void(0);" name="base-opr" type="add" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-plus" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" name="base-opr" type="add" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="delete" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="up-level" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" name="base-opr" type="down-level" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
@@ -34,34 +34,34 @@
                     <a href="javascript: void(0);" id="paste" class="btn btn-sm" data-toggle="tooltip disabled" data-placement="bottom" title="" data-original-title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
                 </div>
                 <div class="d-inline-block">
-                    <div class="input-group input-group-sm ml-2 mt-1">
+                    <div class="input-group input-group-sm ml-2">
                         <div class="input-group-prepend">
                             <span class="input-group-text" id="basic-addon1">表达式</span>
                         </div>
-                        <input type="text" class="form-control m-0" id="bills-expr" readonly="">
+                        <input type="text" class="form-control form-control-sm m-0" id="bills-expr" readonly="">
                     </div>
                 </div>
             </div>
             <% } %>
             <div class="ml-auto">
                 <% if (revise.status === audit.status.uncheck && revise.uid === ctx.session.sessionUser.accountId) { %>
-                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right">上报审批</a>
+                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right mr-1">上报审批</a>
                 <% } %>
                 <% if (revise.status === audit.status.checkNo) { %>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批退回</a>
+                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right mr-1">审批退回</a>
                     <% if (revise.uid === ctx.session.sessionUser.accountId) { %>
-                    <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right">重新上报</a>
+                    <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right mr-1">重新上报</a>
                     <% } %>
                 <% } %>
                 <% if (revise.status === audit.status.checking) { %>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark">审批中</a>
+                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark mr-1">审批中</a>
                     <% if (curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
-                    <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
-                    <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a>
+                    <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right mr-1">审批通过</a>
+                    <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right mr-1">审批退回</a>
                     <% } %>
                 <% } %>
                 <% if (revise.status === audit.status.checked) { %>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批完成</a>
+                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right mr-1">审批完成</a>
                 <% } %>
             </div>
         </div>
@@ -80,17 +80,17 @@
                     <div class="bc-bar mb-1">
                         <ul class="nav nav-tabs">
                             <li class="nav-item">
-                                <a class="nav-link active" href="javascript:void(0)">部位明细</a>
+                                <a class="nav-link active" href="javascript:void(0)">计量单元</a>
                             </li>
                             <li class="nav-item" id="pos-search">
                             </li>
                             <li class="nav-item">
                                 <div class="d-inline-block">
-                                    <div class="input-group input-group-sm ml-2 mt-1">
+                                    <div class="input-group input-group-sm ml-2">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text" id="basic-addon1">表达式</span>
                                         </div>
-                                        <input type="text" class="form-control m-0" id="pos-expr" readonly="">
+                                        <input type="text" class="form-control form-control-sm m-0" id="pos-expr" readonly="">
                                     </div>
                                 </div>
                             </li>
@@ -113,15 +113,15 @@
                         <div class="sjs-sh-2" style="overflow:auto">
                             <div class="form-group mt-2">
                                 <label >创建时间</label>
-                                <input type="" class="form-control" value="<%- revise.in_time.toLocaleString() %>" disabled>
+                                <input type="" class="form-control form-control-sm" value="<%- revise.in_time.toLocaleString() %>" disabled>
                             </div>
                             <div class="form-group mt-2">
                                 <label >提交人</label>
-                                <input type="" class="form-control" value="<%- revise.user_name %>" disabled>
+                                <input type="" class="form-control form-control-sm" value="<%- revise.user_name %>" disabled>
                             </div>
                             <div class="form-group">
                                 <label >修订内容<b class="text-danger">*</b></label>
-                                <textarea class="form-control" value="编写错漏5" rows="12"><%- revise.content %></textarea>
+                                <textarea class="form-control form-control-sm" id="content" org-value="<%- revise.content %>" rows="12" <% if (readOnly) { %> readonly="" <% } %>><%- revise.content %></textarea>
                             </div>
                         </div>
                     </div>
@@ -165,7 +165,7 @@
             <!--右侧菜单-->
             <ul class="nav flex-column right-nav" id="side-menu">
                 <li class="nav-item">
-                    <a class="nav-link" content="#xd-content" href="javascript: void(0);">修订详情</a>
+                    <a class="nav-link" id="content-tab" content="#xd-content" href="javascript: void(0);">修订详情</a>
                 </li>
                 <li class="nav-item">
                     <a class="nav-link" content="#search" href="javascript: void(0);">查找定位</a>

+ 20 - 16
app/view/revise/info_modal.ejs

@@ -23,8 +23,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-primary" id="batch-ok">确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary btn-sm" id="batch-ok">确定</button>
             </div>
         </div>
     </div>
@@ -42,14 +42,14 @@
                     <label>选择审批人</label>
                     <div class="input-group">
                         <div class="input-group-prepend">
-                            <select class="form-control" id="account_group">
+                            <select class="form-control form-control-sm" id="account_group">
                                 <option value="0">所有分组</option>
                                 <% for (const dw in accountGroup) { %>
                                 <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                 <% } %>
                             </select>
                         </div>
-                        <select class="form-control" id="account_list">
+                        <select class="form-control form-control-sm" id="account_list">
                             <option value="0">选择审批人</option>
                             <% for (const account of accountList) { %>
                             <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
@@ -73,9 +73,9 @@
                 </div>
             </div>
             <form class="modal-footer" method="post" action="/tender/<%- ctx.tender.id %>/revise/audit/start" onsubmit="return checkAuditorFrom()">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button class="btn btn-primary" type="submit">确认上报</button>
+                <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
             </form>
         </div>
     </div>
@@ -188,9 +188,9 @@
                 </div>
             </div>
             <form class="modal-footer" action="/tender/<%- ctx.tender.id %>/revise/audit/start" method="post" onsubmit="return checkAuditorFrom()">
-                <button type="submit" class="btn btn-primary">确认上报</button>
+                <button type="submit" class="btn btn-primary btn-sm">确认上报</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </form>
         </div>
     </div>
@@ -218,7 +218,7 @@
                             <% } else if (auditors[i].status === audit.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion">同意</textarea>
+                                <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
                             </div>
                             <% } %>
                         </li>
@@ -227,10 +227,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= audit.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -256,7 +256,7 @@
                             <% } else if (auditors[i].status === audit.status.checking) { %>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" name="opinion">不同意</textarea>
+                                <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
                             </div>
                             <div class="alert alert-warning">审批退回,将直接退回给上报人。</div>
                             <% } %>
@@ -266,10 +266,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= audit.status.checkNo %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -380,7 +380,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -477,10 +477,14 @@
 
     // 检查上报情况
     function checkAuditorFrom () {
-        const content = $('textarea').val();
+        const content = $('#content').val();
+        const orgContent = $('#content').attr('org-value');
         if (!content || content === '') {
             toastr.error('请先填写修订内容,再上报数据');
             return false;
+        } else if (orgContent !== content) {
+            toastr.warning('修订内容未保存,请先保存,再上报数据');
+            return false;
         }
         if ($('#auditors li').length === 0) {
             toastr.error('请先选择审批人,再上报数据');

+ 6 - 6
app/view/revise/modal.ejs

@@ -10,8 +10,8 @@
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">确定新建</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">确定新建</button>
             </div>
         </div>
     </form>
@@ -20,7 +20,7 @@
 <% if (ledgerRevise.length > 0 && (ledgerRevise[0].status === auditConst.status.uncheck || ledgerRevise[0].status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ledgerRevise[0].uid) { %>
 <!--弹出作废-->
 <div class="modal fade" id="remove" data-backdrop="static">
-    <form class="modal-dialog" role="document" action="<%- preUrl + '/revise/cancel' %>" method="post" onsubmit="return $('#cancel-confirm').val() === '修订作废';">
+    <form class="modal-dialog" role="document" action="<%- preUrl + '/revise/cancel' %>" method="post" onsubmit="return $.trim($('#cancel-confirm').val()) === '修订作废';">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title">作废修订</h5>
@@ -32,13 +32,13 @@
                     <br>确认作废,请在以下输入框输入"&nbsp;&nbsp;&nbsp;<b>修订作废</b>&nbsp;&nbsp;&nbsp;",再点击“确认作废”按钮。
                 </div>
                 <div class="form-group">
-                    <input class="form-control" placeholder="" type="text" id="cancel-confirm">
+                    <input class="form-control form-control-sm" placeholder="" type="text" id="cancel-confirm">
                 </div>
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" >取消</button>
-                <button type="submit" class="btn btn-danger">确认作废</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" >取消</button>
+                <button type="submit" class="btn btn-danger btn-sm">确认作废</button>
             </div>
         </div>
     </form>

+ 12 - 12
app/view/setting/category_modal.ejs

@@ -8,7 +8,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>类别名称</label>
-                    <input class="form-control"  placeholder="请使用简短的名称" type="text" name="name">
+                    <input class="form-control form-control-sm"  placeholder="请使用简短的名称" type="text" name="name">
                 </div>
                 <div class="form-group">
                     <label>类型</label>
@@ -17,8 +17,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="add-cate-ok">确认添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="add-cate-ok">确认添加</button>
             </div>
         </div>
     </div>
@@ -33,7 +33,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>类别名称</label>
-                    <input class="form-control"  placeholder="请使用简短的名称" value="年份" type="text" name="name">
+                    <input class="form-control form-control-sm"  placeholder="请使用简短的名称" value="年份" type="text" name="name">
                 </div>
                 <div class="form-group">
                     <label>类型</label>
@@ -42,8 +42,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="edit-cate-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="edit-cate-ok">确认</button>
             </div>
         </div>
     </div>
@@ -68,8 +68,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="add-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="add-ok">确认</button>
             </div>
         </div>
     </div>
@@ -85,8 +85,8 @@
                 <h5>删除后,数据无法恢复,请谨慎操作。</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-danger" id="del-cate-ok">确认删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-danger btn-sm" id="del-cate-ok">确认删除</button>
             </div>
         </div>
     </div>
@@ -115,8 +115,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-danger" id="del-cate-value-ok">确认删除</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-danger btn-sm" id="del-cate-value-ok">确认删除</button>
             </div>
         </div>
     </div>

+ 4 - 4
app/view/setting/info.ejs

@@ -14,15 +14,15 @@
                     <% if (projectData.user_account === ctx.session.sessionUser.account) { %><form id="info-form" action="/<%= ctx.controllerName %>/updateinfo/<%= projectData.id === undefined ? 0 : projectData.id %>?_csrf=<%= ctx.csrf %>" method="post"><% } %>
                         <div class="form-group">
                             <label>项目编号</label>
-                            <input class="form-control" value="<%= projectData.code%>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%= projectData.code%>" type="text" readonly>
                         </div>
                         <div class="form-group">
                             <label>项目名称</label>
-                            <input class="form-control" value="<%= projectData.name%>" type="text" <% if (projectData.user_account !== ctx.session.sessionUser.account) { %>readonly<% } else { %>name="name" id="name" placeholder="请输入项目名称"<% } %>>
+                            <input class="form-control form-control-sm" value="<%= projectData.name%>" type="text" <% if (projectData.user_account !== ctx.session.sessionUser.account) { %>readonly<% } else { %>name="name" id="name" placeholder="请输入项目名称"<% } %>>
                         </div>
                         <div class="form-group">
                             <label>管理员</label>
-                            <input class="form-control" value="<%= projectData.user_account %>" type="text" readonly>
+                            <input class="form-control form-control-sm" value="<%= projectData.user_account %>" type="text" readonly>
                         </div>
                         <div class="form-group">
                             <label>销售负责人</label>
@@ -40,7 +40,7 @@
                         </div>
                         <div class="form-group">
                             <label>创建时间</label>
-                            <input class="form-control" value=<%= dateStr%> type="text" readonly>
+                            <input class="form-control form-control-sm" value=<%= dateStr%> type="text" readonly>
                         </div>
                         <% if (projectData.user_account === ctx.session.sessionUser.account) { %></form><% } %>
                 </div>

+ 27 - 23
app/view/setting/user_modal.ejs

@@ -9,7 +9,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label><b class="text-danger">*</b>账号组</label>
-                    <select class="form-control" name="account_group">
+                    <select class="form-control form-control-sm" name="account_group">
                         <option value="0">请选择</option>
                         <% for (const dw in accountGroup) { %>
                         <option value="<%= dw %>"><%= accountGroup[dw] %></option>
@@ -18,7 +18,7 @@
                 </div>
                 <div class="form-group">
                     <label>登录账号<b class="text-danger">*</b></label>
-                    <input class="form-control" name="account" placeholder="支持英文数字组合" type="text">
+                    <input class="form-control form-control-sm" name="account" placeholder="支持英文数字组合" type="text">
                     <input value="" class="account-check" type="hidden">
                     <div class="invalid-feedback">
                         该账号已存在。
@@ -27,36 +27,36 @@
                 <div class="form-group">
                     <label>登录密码<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input type="text" name="password" class="form-control" placeholder="密码支持英文数字及符号">
+                        <input type="text" name="password" class="form-control form-control-sm" placeholder="密码支持英文数字及符号">
                         <div class="input-group-append">
-                            <button id="rand-password" class="btn btn-outline-secondary" type="button">随机密码</button>
+                            <button id="rand-password" class="btn btn-outline-secondary btn-sm" type="button">随机密码</button>
                         </div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>姓名<b class="text-danger">*</b></label>
-                    <input class="form-control" name="name" value="" type="text">
+                    <input class="form-control form-control-sm" name="name" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>单位名称<b class="text-danger">*</b></label>
-                    <input class="form-control" name="company" value="" type="text">
+                    <input class="form-control form-control-sm" name="company" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>角色/职位<b class="text-danger">*</b></label>
-                    <input class="form-control" name="role" value="" type="text">
+                    <input class="form-control form-control-sm" name="role" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>手机<b class="text-danger">*</b></label>
-                    <input class="form-control" name="mobile" value="" type="number">
+                    <input class="form-control form-control-sm" name="mobile" value="" type="number">
                 </div>
                 <div class="form-group">
                     <label>电话</label>
-                    <input class="form-control" name="telephone" placeholder="格式000-0000000" type="text">
+                    <input class="form-control form-control-sm" name="telephone" placeholder="格式000-0000000" type="text">
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">确定添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">确定添加</button>
             </div>
             </form>
         </div>
@@ -73,7 +73,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label>账号组<b class="text-danger">*</b></label>
-                    <select class="form-control" name="account_group">
+                    <select class="form-control form-control-sm" name="account_group">
                         <option value="0">请选择</option>
                         <% for (const dw in accountGroup) { %>
                             <option value="<%= dw %>"><%= accountGroup[dw] %></option>
@@ -82,7 +82,7 @@
                 </div>
                 <div class="form-group">
                     <label>登录账号<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" name="account" placeholder="支持英文数字组合" type="text">
+                    <input class="form-control form-control-sm" value="" name="account" placeholder="支持英文数字组合" type="text">
                     <input value="" class="account-check" type="hidden">
                     <div class="invalid-feedback">
                         该账号已存在。
@@ -93,38 +93,42 @@
                     <div class="input-group">
                         <input type="text" id="reset-password" class="form-control" placeholder="密码支持英文数字及符号">
                         <div class="input-group-append">
-                            <button id="reset-password-btn" class="btn btn-outline-secondary" type="button">修改密码</button>
+                            <button id="reset-password-btn" class="btn btn-outline-secondary btn-sm" type="button">修改密码</button>
                         </div>
                     </div>
                     <span class="form-text text-success">如果账号已有认证手机,密码也将发送至该手机。</span>
                 </div>
                 <div class="form-group">
                     <label>姓名<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" name="name" type="text">
+                    <input class="form-control form-control-sm" value="" name="name" type="text">
                     <small class="form-text text-muted">修改姓名,将影响所有该账号参与数据</small>
                 </div>
                 <div class="form-group">
+                    <label>认证手机</label>
+                    <input class="form-control" value="" class="auth-mobile" type="text" readonly>
+                </div>
+                <div class="form-group">
                     <label>单位名称<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" name="company" type="text">
+                    <input class="form-control form-control-sm" value="" name="company" type="text">
                 </div>
                 <div class="form-group">
                     <label>角色/职位<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" name="role" type="text">
+                    <input class="form-control form-control-sm" value="" name="role" type="text">
                 </div>
                 <div class="form-group">
                     <label>手机<b class="text-danger">*</b></label>
-                    <input class="form-control" value="" name="mobile" type="number">
+                    <input class="form-control form-control-sm" value="" name="mobile" type="number">
                 </div>
                 <div class="form-group">
                     <label>电话</label>
-                    <input class="form-control" value="" name="telephone" placeholder="格式000-0000000" type="text">
+                    <input class="form-control form-control-sm" value="" name="telephone" placeholder="格式000-0000000" type="text">
                 </div>
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="id" id="user-id" value="">
-                <!--<button type="button" class="btn btn-outline-danger" data-dismiss="modal">删除账号</button>-->
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">提交修改</button>
+                <!--<button type="button" class="btn btn-outline-danger btn-sm" data-dismiss="modal">删除账号</button>-->
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">提交修改</button>
             </div>
             </form>
         </div>
@@ -145,7 +149,7 @@
                 <p>当前限制账号总数:<b><%= projectData.max_user %></b></p>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 14 - 14
app/view/setting/user_permission_modal.ejs

@@ -9,7 +9,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label><b class="text-danger">*</b>账号组</label>
-                    <select class="form-control" name="account_group">
+                    <select class="form-control form-control-sm" name="account_group">
                         <option value="0">请选择</option>
                         <% for (const dw in accountGroup) { %>
                         <option value="<%= dw %>"><%= accountGroup[dw] %></option>
@@ -18,7 +18,7 @@
                 </div>
                 <div class="form-group">
                     <label>登录账号<b class="text-danger">*</b></label>
-                    <input class="form-control" name="account" placeholder="支持英文数字组合" type="text">
+                    <input class="form-control form-control-sm" name="account" placeholder="支持英文数字组合" type="text">
                     <input value="" class="account-check" type="hidden">
                     <div class="invalid-feedback">
                         该账号已存在。
@@ -27,36 +27,36 @@
                 <div class="form-group">
                     <label>登录密码<b class="text-danger">*</b></label>
                     <div class="input-group">
-                        <input type="text" name="password" class="form-control" placeholder="密码支持英文数字及符号">
+                        <input type="text" name="password" class="form-control form-control-sm" placeholder="密码支持英文数字及符号">
                         <div class="input-group-append">
-                            <button id="rand-password" class="btn btn-outline-secondary" type="button">随机密码</button>
+                            <button id="rand-password" class="btn btn-outline-secondary btn-sm" type="button">随机密码</button>
                         </div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>姓名<b class="text-danger">*</b></label>
-                    <input class="form-control" name="name" value="" type="text">
+                    <input class="form-control form-control-sm" name="name" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>单位名称<b class="text-danger">*</b></label>
-                    <input class="form-control" name="company" value="" type="text">
+                    <input class="form-control form-control-sm" name="company" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>角色/职位<b class="text-danger">*</b></label>
-                    <input class="form-control" name="role" value="" type="text">
+                    <input class="form-control form-control-sm" name="role" value="" type="text">
                 </div>
                 <div class="form-group">
                     <label>手机<b class="text-danger">*</b></label>
-                    <input class="form-control" name="mobile" value="" type="number">
+                    <input class="form-control form-control-sm" name="mobile" value="" type="number">
                 </div>
                 <div class="form-group">
                     <label>电话</label>
-                    <input class="form-control" name="telephone" placeholder="格式000-0000000" type="text">
+                    <input class="form-control form-control-sm" name="telephone" placeholder="格式000-0000000" type="text">
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">确定添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">确定添加</button>
             </div>
             </form>
         </div>
@@ -93,8 +93,8 @@
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="id" value="">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary">提交修改</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-primary btn-sm">提交修改</button>
             </div>
             </form>
         </div>
@@ -115,7 +115,7 @@
                 <p>当前限制账号总数:<b><%= projectData.max_user %></b></p>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

+ 34 - 34
app/view/stage/audit_modal.ejs

@@ -11,9 +11,9 @@
                 <!--<div class="form-group">-->
                     <!--<label>搜索审批人</label>-->
                     <!--<div class="input-group">-->
-                        <!--<input class="form-control" placeholder="请输入姓名进行检索" type="text" id="searchName">-->
+                        <!--<input class="form-control form-control-sm" placeholder="请输入姓名进行检索" type="text" id="searchName">-->
                         <!--<div class="input-group-append">-->
-                            <!--<button class="btn btn-outline-secondary" type="button" id="searchAccount"><i class="fa fa-search"></i></button>-->
+                            <!--<button class="btn btn-outline-secondary btn-sm" type="button" id="searchAccount"><i class="fa fa-search"></i></button>-->
                         <!--</div>-->
                     <!--</div>-->
                 <!--</div>-->
@@ -21,14 +21,14 @@
                     <label>选择审批人</label>
                     <div class="input-group">
                         <div class="input-group-prepend">
-                            <select class="form-control" id="account_group">
+                            <select class="form-control form-control-sm" id="account_group">
                                 <option value="0">所有分组</option>
                                 <% for (const dw in accountGroup) { %>
                                     <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                 <% } %>
                             </select>
                         </div>
-                        <select class="form-control" id="account_list">
+                        <select class="form-control form-control-sm" id="account_list">
                             <option value="0">选择审批人</option>
                             <% for (const account of accountList) { %>
                             <% if (account.id !== ctx.session.sessionUser.accountId) { %>
@@ -64,9 +64,9 @@
                 </div>
             </div>
             <form class="modal-footer" method="post" action="<%- preUrl %>/audit/start" onsubmit="return checkAuditorFrom()">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                <button class="btn btn-primary" type="submit">确认上报</button>
+                <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
             </form>
         </div>
     </div>
@@ -82,9 +82,9 @@
                 <h5>上报前,需要「完成本期中间计量」。</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (ctx.url !== '/tender/' + ctx.tender.id + '/measure/stage/' + ctx.stage.order + '/detail') { %>
-                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary btn-sm">进入中间计量</a>
                 <% } %>
             </div>
         </div>
@@ -161,7 +161,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
                                     </div>
                                     <% } %>
                                 </li>
@@ -172,10 +172,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -247,7 +247,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">不同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
                                     </div>
                                     <div class="alert alert-warning">
                                         <div class="form-check form-check-inline">
@@ -271,9 +271,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -289,9 +289,9 @@
                 <h5>审批前,需要「完成本期中间计量」。</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (ctx.url !== '/tender/' + ctx.tender.id + '/measure/stage/' + ctx.stage.order + '/detail') { %>
-                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary btn-sm">进入中间计量</a>
                 <% } %>
             </div>
         </div>
@@ -425,7 +425,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -559,7 +559,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -644,7 +644,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -759,8 +759,8 @@
                 </div>
                 <form class="modal-footer" method="post" action="<%- preUrl %>/audit/start" onsubmit="return checkAuditorFrom()">
                     <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <button class="btn btn-primary" type="submit">确认上报</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <button class="btn btn-primary btn-sm" type="submit">确认上报</button>
                 </form>
             </div>
         </div>
@@ -776,9 +776,9 @@
                 <h5>上报前,需要「完成本期中间计量」。</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (ctx.url !== '/tender/' + ctx.tender.id + '/measure/stage/' + ctx.stage.order + '/detail') { %>
-                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary btn-sm">进入中间计量</a>
                 <% } %>
             </div>
         </div>
@@ -913,7 +913,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -981,7 +981,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
                                     </div>
                                     <% } %>
                                 </li>
@@ -992,10 +992,10 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <input type="hidden" name="checkType" value="<%= auditConst.status.checked %>" />
-                <button type="submit" class="btn btn-success" >确认通过</button>
+                <button type="submit" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </form>
     </div>
@@ -1062,7 +1062,7 @@
                                     <% } else if (auditors[iA].status === auditConst.status.checking) { %>
                                     <div class="form-group">
                                         <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control" name="opinion">不同意</textarea>
+                                        <textarea class="form-control form-control-sm" name="opinion">不同意</textarea>
                                     </div>
                                     <div class="alert alert-warning">
                                         <div class="form-check form-check-inline">
@@ -1086,9 +1086,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
-                <button type="submit" class="btn btn-warning" >确认退回</button>
+                <button type="submit" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </form>
     </div>
@@ -1104,9 +1104,9 @@
                     <h5>审批前,需要「完成本期中间计量」。</h5>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                     <% if (ctx.url !== '/tender/' + ctx.tender.id + '/measure/stage/' + ctx.stage.order + '/detail') { %>
-                    <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+                    <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary btn-sm">进入中间计量</a>
                     <% } %>
                 </div>
             </div>
@@ -1126,8 +1126,8 @@
                     <h5>确认由「终审-<%= ctx.stage.auditors[ctx.stage.auditors.length-1].name %>」重新审批「第<%= ctx.stage.order %>期」?</h5>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                    <a href="<%- preUrl %>/audit/check/again" class="btn btn-warning">确定重审</a>
+                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                    <a href="<%- preUrl %>/audit/check/again" class="btn btn-warning btn-sm">确定重审</a>
                 </div>
             </div>
         </div>

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

@@ -46,7 +46,7 @@
                 <div class="bc-bar mb-1">
                     <ul class="nav nav-tabs">
                         <li class="nav-item">
-                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">部位明细</a>
+                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">计量单元</a>
                         </li>
                     </ul>
                 </div>

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

@@ -10,7 +10,7 @@
                 <table class="table table-sm">
                     <tr><th>审批人</th><th width="90">选择</th><th></th></tr>
                     <% for (const [i, a] of ctx.stage.auditors.entries()) { %>
-                    <% if (a.status === auditConst.status.checked || a.status === auditConst.status.checkNoPre ||
+                    <% if (a.status === auditConst.status.checked || a.status === auditConst.status.checkNoPre || a.status === auditConst.status.checkAgain ||
                             (a.status === auditConst.status.checking && a.aid === ctx.session.sessionUser.accountId)) { %>
                     <tr auditorId="<%- a.aid %>">
                         <td><%- a.name %></td>
@@ -22,8 +22,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="select-qi-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="select-qi-ok">确认</button>
             </div>
         </div>
     </div>

+ 3 - 3
app/view/stage/deal.ejs

@@ -4,7 +4,7 @@
             <% include ./stage_sub_mini_menu.ejs %>
             <div>
                 <div class="d-inline-block">
-                    <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
+                    <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
                     <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="添加"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
@@ -12,11 +12,11 @@
                     <a href="#" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-unlock" aria-hidden="true"></i> 解锁</a>
                 </div>
                 <div class="d-inline-block">
-                    <div class="input-group input-group-sm ml-2 mt-1">
+                    <div class="input-group input-group-sm ml-2">
                         <div class="input-group-prepend">
                             <span class="input-group-text" id="basic-addon1">表达式</span>
                         </div>
-                        <input type="text" class="form-control m-0">
+                        <input type="text" class="form-control form-control-sm m-0">
                     </div>
                 </div>
             </div>

+ 21 - 21
app/view/stage/deal_modal.ejs

@@ -9,9 +9,9 @@
                 <div class="form-group">
                     <label>搜索审批人</label>
                     <div class="input-group">
-                        <input class="form-control" placeholder="请输入姓名进行检索" type="text">
+                        <input class="form-control form-control-sm" placeholder="请输入姓名进行检索" type="text">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button"><i class="fa fa-search"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button"><i class="fa fa-search"></i></button>
                         </div>
                     </div>
                 </div>
@@ -36,8 +36,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确认上报</button>
             </div>
         </div>
     </div>
@@ -69,7 +69,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -94,7 +94,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                         </li>
                         <li class="list-group-item">
@@ -104,8 +104,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-success" >确认通过</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </div>
     </div>
@@ -130,7 +130,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                             <div class="alert alert-warning">审批退回,将直接退回给上报人。</data-min-view>
                         </li>
@@ -141,8 +141,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-warning" >确认退回</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </div>
     </div>
@@ -173,8 +173,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确定修改</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确定修改</button>
             </div>
         </div>
     </div>
@@ -216,8 +216,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确定修改</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确定修改</button>
             </div>
         </div>
     </div>
@@ -251,7 +251,7 @@
                 <!--计量期数模式-->
                 <div class="form-group">
                     <label>限制期数</label>
-                    <input class="form-control" type="number">
+                    <input class="form-control form-control-sm" type="number">
                 </div>
                 <!--计量金额模式-->
                 <div class="form-group">
@@ -273,7 +273,7 @@
                 </div>
                 <div class="form-group">
                     <label>限制金额</label>
-                    <input class="form-control" type="number">
+                    <input class="form-control form-control-sm" type="number">
                 </div>
                 <!--公用提示-->
                 <p>设置为:</p>
@@ -281,8 +281,8 @@
                 <p class="pl-3">当期金额直接计量至(扣款限额 - 截止上期金额)</p>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" >确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" >确定</button>
             </div>
         </div>
     </div>
@@ -310,8 +310,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" >确定</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" >确定</button>
             </div>
         </div>
     </div>

+ 3 - 3
app/view/stage/detail.ejs

@@ -76,7 +76,7 @@
                             </div>
                             <div class="form-group">
                                 <label>计算式说明:</label>
-                                <textarea class="form-control" readonly="" id="calc-memo"></textarea>
+                                <textarea class="form-control form-control-sm" readonly="" id="calc-memo"></textarea>
                             </div>
                             <div class="form-group">
                                 <div class="d-flex justify-content-between my-3">
@@ -103,7 +103,7 @@
                             <div class="sjs-bottom">
                                 <ul class="nav nav-tabs">
                                     <li class="nav-item">
-                                        <a class="nav-link active">部位明细</a>
+                                        <a class="nav-link active">计量单元</a>
                                     </li>
                                 </ul>
                                 <div class="tab-content">
@@ -111,7 +111,7 @@
                                         <div class="sjs-bottom-2">
                                             <table class="table table-sm table-bordered">
                                                 <thead>
-                                                <tr><th>部位</th><th>台帐数量</th><th>本期计量数量</th></tr>
+                                                <tr><th>名称</th><th>台帐数量</th><th>本期计量数量</th></tr>
                                                 </thead>
                                                 <tbody id="pos-list">
                                                 <tr><td>0#桥台1#桩</td><td>126</td><td>40</td></tr>

+ 10 - 10
app/view/stage/detail_modal.ejs

@@ -34,9 +34,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (!stage.readOnly && stage.user_id === ctx.session.sessionUser.accountId) { %>
-                <button type="button" class="btn btn-primary" id="choose-ok">重新生成</button>
+                <button type="button" class="btn btn-primary btn-sm" id="choose-ok">重新生成</button>
                 <% } %>
             </div>
         </div>
@@ -67,9 +67,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (!stage.readOnly && stage.user_id === ctx.session.sessionUser.accountId) { %>
-                <button type="button" class="btn btn-primary" id="choose2-ok">确定</button>
+                <button type="button" class="btn btn-primary btn-sm" id="choose2-ok">确定</button>
                 <% } %>
             </div>
         </div>
@@ -91,8 +91,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="edit-img-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="edit-img-ok">确认</button>
             </div>
         </div>
     </div>
@@ -118,9 +118,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (!stage.readOnly) { %>
-                <button type="button" class="btn btn-primary" >确认</button>
+                <button type="button" class="btn btn-primary btn-sm" >确认</button>
                 <% } %>
             </div>
         </div>
@@ -138,8 +138,8 @@
                 <h5>确认完成后,即可上报本期计量。</h5>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a id="done-detail" href="javascript: void(0);" class="btn btn-success" >确认完成</a>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
+                <a id="done-detail" href="javascript: void(0);" class="btn btn-success btn-sm" >确认完成</a>
             </div>
         </div>
     </div>

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

@@ -32,7 +32,7 @@
                         </form>
                         <span class="dropdown-item-text text-danger">
                             <div class="input-group input-group-sm">
-                                <input type="number" step="5" class="form-control m-0" placeholder="100" max="100" min="50" id="over-percent" value="100">
+                                <input type="number" step="5" class="form-control form-control-sm m-0" placeholder="100" max="100" min="50" id="over-percent" value="100">
                                 <div class="input-group-append">
                                     <span class="input-group-text" id="basic-addon2">%</span>
                                 </div>

+ 15 - 15
app/view/stage/index.ejs

@@ -25,11 +25,11 @@
                     <button href="#row-view" class="btn btn-sm btn-light" data-toggle="modal" data-target="#row-view"><i class="fa fa-table"></i> 列显示</button>
                 </div>
                 <div class="d-inline-block">
-                    <div class="input-group input-group-sm mt-2">
+                    <div class="input-group input-group-sm ml-2">
                         <div class="input-group-prepend">
                             <span class="input-group-text" id="basic-addon1">表达式</span>
                         </div>
-                        <input type="text" class="form-control m-0" id="bills-expr" readonly="">
+                        <input type="text" class="form-control form-control-sm m-0" id="bills-expr" readonly="">
                     </div>
                 </div>
             </div>
@@ -51,11 +51,11 @@
                     <div class="bc-bar mb-1">
                         <ul class="nav nav-tabs">
                             <li class="nav-item">
-                                <a class="nav-link active" href="#">部位明细</a>
+                                <a class="nav-link active" href="#">计量单元</a>
                             </li>
                             <!--工程量清单模式操作-->
                             <li class="nav-item">
-                                <div class="mt-1 ml-2">
+                                <div class="ml-2">
                                     <div class="input-group input-group-sm">
                                         <div class="input-group-prepend">
                                             <div class="input-group-text">
@@ -71,14 +71,14 @@
                                                 </div>
                                             </div>
                                         </div>
-                                        <input type="text" class="form-control" placeholder="按名称查找" id="pos-search-keyword">
+                                        <input type="text" class="form-control form-control-sm" placeholder="按名称查找" id="pos-search-keyword">
                                         <!--搜索结果显示-->
                                         <div class="input-group-append" >
                                             <span class="input-group-text" id="pos-search-result">结果:0</span>
                                         </div>
                                         <div class="input-group-append" >
-                                            <button class="btn btn-outline-secondary" type="button" title="上一个" id="pos-search-pre"><i class="fa fa-angle-double-left"></i></button>
-                                            <button class="btn btn-outline-secondary" type="button" title="下一个" id="pos-search-next"><i class="fa fa-angle-double-right"></i></button>
+                                            <button class="btn btn-outline-secondary btn-sm" type="button" title="上一个" id="pos-search-pre"><i class="fa fa-angle-double-left"></i></button>
+                                            <button class="btn btn-outline-secondary btn-sm" type="button" title="下一个" id="pos-search-next"><i class="fa fa-angle-double-right"></i></button>
                                         </div>
                                     </div>
                                 </div>
@@ -86,11 +86,11 @@
 
                             <li class="nav-item">
                                 <div class="d-inline-block">
-                                    <div class="input-group input-group-sm ml-2 mt-1">
+                                    <div class="input-group input-group-sm ml-2">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text" id="basic-addon1">表达式</span>
                                         </div>
-                                        <input type="text" class="form-control m-0" id="pos-expr" readonly="">
+                                        <input type="text" class="form-control form-control-sm m-0" id="pos-expr" readonly="">
                                     </div>
                                 </div>
                             </li>
@@ -115,9 +115,9 @@
                                         <input type="radio" name="searchType" id="empty"> 漏计
                                     </div>
                                 </div>
-                                <input type="text" class="form-control" placeholder="可查找 项目节编号 / 清单编号 /名称" id="keyword">
+                                <input type="text" class="form-control form-control-sm" placeholder="可查找 项目节编号 / 清单编号 /名称" id="keyword">
                                 <div class="input-group-append">
-                                    <button class="btn btn-outline-secondary" type="button" id="searchLedger">搜索</button>
+                                    <button class="btn btn-outline-secondary btn-sm" type="button" id="searchLedger">搜索</button>
                                 </div>
                             </div>
                         </div>
@@ -190,7 +190,7 @@
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text">文件名</span>
                                                     </div>
-                                                    <input type="text" class="form-control" value="asdasd">
+                                                    <input type="text" class="form-control form-control-sm" value="asdasd">
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">.jpg</span>
                                                     </div>
@@ -201,7 +201,7 @@
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text">所在节点</span>
                                                     </div>
-                                                    <input type="text" class="form-control" value="1 第一部分 建筑安装工程非" readonly="">
+                                                    <input type="text" class="form-control form-control-sm" value="1 第一部分 建筑安装工程非" readonly="">
                                                 </div>
                                             </div>
                                             <div class="form-group">
@@ -209,7 +209,7 @@
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text">上传时间</span>
                                                     </div>
-                                                    <input type="text" class="form-control" value="2018-10-20" readonly="">
+                                                    <input type="text" class="form-control form-control-sm" value="2018-10-20" readonly="">
                                                 </div>
                                             </div>
                                             <div class="form-group">
@@ -217,7 +217,7 @@
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text">备注</span>
                                                     </div>
-                                                    <input type="text" class="form-control" value="">
+                                                    <input type="text" class="form-control form-control-sm" value="">
                                                 </div>
                                             </div>
                                             <div class="form-group">

+ 15 - 15
app/view/stage/measure_modal.ejs

@@ -48,8 +48,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">添加</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">添加</button>
             </div>
         </div>
     </div>
@@ -65,9 +65,9 @@
                 <div class="form-group">
                     <label>搜索审批人</label>
                     <div class="input-group">
-                        <input class="form-control" placeholder="请输入姓名进行检索" type="text">
+                        <input class="form-control form-control-sm" placeholder="请输入姓名进行检索" type="text">
                         <div class="input-group-append">
-                            <button class="btn btn-outline-secondary" type="button"><i class="fa fa-search"></i></button>
+                            <button class="btn btn-outline-secondary btn-sm" type="button"><i class="fa fa-search"></i></button>
                         </div>
                     </div>
                 </div>
@@ -92,8 +92,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确认上报</button>
             </div>
         </div>
     </div>
@@ -125,7 +125,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -150,7 +150,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                         </li>
                         <li class="list-group-item">
@@ -160,8 +160,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-success" >确认通过</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </div>
     </div>
@@ -186,7 +186,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                             <div class="alert alert-warning">审批退回,将直接退回给上报人。</data-min-view>
                         </li>
@@ -197,8 +197,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-warning" >确认退回</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </div>
     </div>
@@ -228,8 +228,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" >确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" >确认</button>
             </div>
         </div>
     </div>

+ 9 - 9
app/view/stage/modal.ejs

@@ -26,8 +26,8 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="row-view-ok">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="row-view-ok">确认</button>
             </div>
         </div>
     </div>
@@ -189,9 +189,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (!stage.readOnly) { %>
-                <button type="button" class="btn btn-primary" id="usg-bg-ok">添加</button>
+                <button type="button" class="btn btn-primary btn-sm" id="usg-bg-ok">添加</button>
                 <% } %>
             </div>
         </div>
@@ -222,8 +222,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" >确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" >确认</button>
             </div>
         </div>
     </div>
@@ -238,12 +238,12 @@
             <div class="modal-body">
                 <div class="form-group">
                     <label for="formGroupExampleInput">大小限制:10MB,支持<span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="doc,docx,xls,xlsx,ppt,pptx,pdf">office等文档格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="jpg,png,bmp">图片格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="rar,zip">压缩包格式</span></label>
-                    <input type="file" class="form-control" id="upload-file" multiple>
+                    <input type="file" class="form-control form-control-sm" id="upload-file" multiple>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary" id="upload-file-btn">确认</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm" id="upload-file-btn">确认</button>
             </div>
         </div>
     </div>

+ 2 - 2
app/view/stage/pay.ejs

@@ -5,13 +5,13 @@
             <% include ./stage_sub_mini_menu.ejs %>
             <div>
                 <div class="d-inline-block">
-                    <a href="javascript: void(0);" id="add" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="添加"><i class="fa fa-plus" aria-hidden="true"></i></a>
+                    <a href="javascript: void(0);" id="add" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" id="del" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" id="down-move" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" id="up-move" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
                 </div>
                 <div class="d-inline-block">
-                    <div class="input-group input-group-sm ml-2 mt-1">
+                    <div class="input-group input-group-sm ml-2">
                         <div class="input-group-prepend">
                             <span class="input-group-text" id="basic-addon1">表达式</span>
                         </div>

+ 8 - 8
app/view/stage/pay_modal.ejs

@@ -27,7 +27,7 @@
                 <!--计量期数模式-->
                 <div class="form-group" dl-type="1">
                     <label>限制期数</label>
-                    <input class="form-control" id="stage-count" type="number">
+                    <input class="form-control form-control-sm" id="stage-count" type="number">
                 </div>
                 <!--计量金额模式-->
                 <div class="form-group" dl-type="2">
@@ -49,7 +49,7 @@
                 </div>
                 <div class="form-group" dl-type="2">
                     <label>限制金额</label>
-                    <input class="form-control" id="tp" type="number">
+                    <input class="form-control form-control-sm" id="tp" type="number">
                 </div>
                 <!--公用提示-->
                 <div id="dl-hint">
@@ -59,9 +59,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <% if (!stage.readOnly) { %>
-                <button type="button" class="btn btn-primary" id="deadline-ok">确定</button>
+                <button type="button" class="btn btn-primary btn-sm" id="deadline-ok">确定</button>
                 <% } %>
             </div>
         </div>
@@ -78,7 +78,7 @@
                 <% if (uploadPermission) { %>
                 <div class="form-group">
                     <label for="formGroupExampleInput">大小限制:10MB,支持<span data-toggle="tooltip" data-placement="bottom" title="doc,docx,xls,xlsx,ppt,pptx,pdf">office等文档格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="jpg,png,bmp">图片格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="rar,zip">压缩包格式</span></label>
-                    <input type="file" class="form-control" id="upload-file" multiple>
+                    <input type="file" class="form-control form-control-sm" id="upload-file" multiple>
                 </div>
                 <% } %>
                 <div class="modal-height-500" style="overflow:auto;">
@@ -98,8 +98,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <!--<button type="button" class="btn btn-primary" id="upload-file-btn">确定</button>-->
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <!--<button type="button" class="btn btn-primary btn-sm" id="upload-file-btn">确定</button>-->
             </div>
         </div>
     </div>
@@ -120,7 +120,7 @@
                 </table>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>

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

@@ -103,7 +103,7 @@
                                         <div class="input-group-prepend">
                                             <button type="button" class="btn btn-secondary btn-sm" disabled="" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上一页"><i class="fa fa-chevron-left"></i></button>
                                         </div>
-                                        <input class="form-control" value="1/10" style="width:60px" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">
+                                        <input class="form-control form-control-sm" value="1/10" style="width:60px" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">
                                         <div class="input-group-append">
                                             <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下一页"><i class="fa fa-chevron-right"></i></button>
                                         </div>

+ 13 - 13
app/view/stage/report_modal.ejs

@@ -9,7 +9,7 @@
                 <div class="form-group">
                     <label>搜索审批人</label>
                     <div class="input-group">
-                        <input class="form-control" placeholder="请输入姓名进行检索" type="text">
+                        <input class="form-control form-control-sm" placeholder="请输入姓名进行检索" type="text">
                         <div class="input-group-append">
                             <button class="btn btn-outline-secondary" type="button"><i class="fa fa-search"></i></button>
                         </div>
@@ -36,8 +36,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-primary">确认上报</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary btn-sm">确认上报</button>
             </div>
         </div>
     </div>
@@ -69,7 +69,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
             </div>
         </div>
     </div>
@@ -94,7 +94,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                         </li>
                         <li class="list-group-item">
@@ -104,8 +104,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-success" >确认通过</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-success btn-sm" >确认通过</button>
             </div>
         </div>
     </div>
@@ -130,7 +130,7 @@
                             <h5 class="card-title">2 王五 <small class="text-muted">监理</small></h5>
                             <div class="form-group">
                                 <label>审批意见<b class="text-danger">*</b></label>
-                                <textarea class="form-control" ></textarea>
+                                <textarea class="form-control form-control-sm" ></textarea>
                             </div>
                             <div class="alert alert-warning">审批退回,将直接退回给上报人。</data-min-view>
                         </li>
@@ -141,8 +141,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
-                <button type="button" class="btn btn-warning" >确认退回</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-warning btn-sm" >确认退回</button>
             </div>
         </div>
     </div>
@@ -158,7 +158,7 @@
                 <div class="form-group">
                     <label>输入提取码</label>
                     <div class="input-group">
-                        <input class="form-control" placeholder="请输入6位提取码" type="text">
+                        <input class="form-control form-control-sm" placeholder="请输入6位提取码" type="text">
                         <div class="input-group-append">
                             <button class="btn btn-outline-secondary" type="button"><i class="fa fa-search"></i></button>
                         </div>
@@ -181,9 +181,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <!--有结果出现添加-->
-                <button type="button" class="btn btn-primary" >确认添加</button>
+                <button type="button" class="btn btn-primary btn-sm" >确认添加</button>
             </div>
         </div>
     </div>

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


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor