Browse Source

1. 清单清理、小数位置、合同参数输入控制
2. 待办事项,需要关注

MaiXinRong 6 years ago
parent
commit
def5ed1e44

+ 4 - 0
app/base/base_service.js

@@ -110,6 +110,10 @@ class BaseService extends Service {
         return result;
     }
 
+    async defaultUpdate(data, options) {
+        await this.db.update(this.tableName, data, options);
+    }
+
     /**
      * 更新数据
      *

+ 12 - 0
app/controller/dashboard_controller.js

@@ -24,6 +24,11 @@ module.exports = app => {
             const auditTenders = await ctx.service.ledgerAudit.getAuditTender(ctx.session.sessionUser.accountId);
             const auditStages = await ctx.service.stageAudit.getAuditStage(ctx.session.sessionUser.accountId);
             const auditChanges = await ctx.service.changeAudit.getAuditChange(ctx.session.sessionUser.accountId);
+            const pa = await ctx.service.projectAccount.getDataById(ctx.session.sessionUser.accountId);
+            const lastNotice = pa.last_notice ? pa.last_notice : (pa.last_notice === 0 ? new Date() : new Date(pa.last_login * 1000));
+            const noticeLedger = await ctx.service.ledgerAudit.getNoticeTender(ctx.session.sessionProject.id, pa.id, lastNotice);
+            const noticeStage = await ctx.service.stageAudit.getNoticeStage(ctx.session.sessionProject.id, pa.id, lastNotice);
+            const noticeChange = await ctx.service.changeAudit.getNoticeChange(ctx.session.sessionProject.id, pa.id, lastNotice);
             const renderData = {
                 auditTenders,
                 auditStages,
@@ -31,8 +36,15 @@ module.exports = app => {
                 acLedger: auditConst.ledger,
                 acStage: auditConst.stage,
                 acChange: auditConst.flow,
+                noticeLedger,
+                noticeStage,
+                noticeChange,
             };
             await this.layout('dashboard/index.ejs', renderData);
+            await ctx.service.projectAccount.defaultUpdate({
+                id: this.ctx.session.sessionUser.accountId,
+                last_notice: new Date(),
+            });
         }
     }
 

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

@@ -35,7 +35,8 @@ $(document).ready(() => {
             {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'},
-            {title: '累计金额',  colSpan: '1', rowSpan: '1', field: 'end_tp', hAlign: 2, width: 100, readOnly: true},
+            {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'},
             {title: '付(扣)款限额',  colSpan: '1', rowSpan: '1', field: 'rprice', hAlign: 2, width: 100, readOnly: 'readOnly.rprice'},
             {

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

@@ -153,6 +153,26 @@ function limitInputMinMax (obj) {
         obj.value = obj.min;
     }
 }
+// 根据Maxlength限制input输入
+function limitMaxLength (obj) {
+    if (obj.value.length > obj.maxLength) {
+        obj.value = obj.value.substr(0, obj.maxLength);
+    }
+}
+// 根据正则限制输入
+function limitReg(obj, reg) {
+    obj.value = obj.value.replace(reg, '');
+}
+// 小数位数 input 输入限制
+function limitDecimal(obj) {
+    limitReg(obj, /[^\d]/g);
+    limitMaxLength(obj);
+    limitInputMinMax(obj);
+}
+// 限制小数点前数字长度
+function limitMaxNumber(obj, Len) {
+
+}
 
 $(document).ready(function() {
     loadTenderProperty();

+ 21 - 0
app/service/change_audit.js

@@ -275,6 +275,27 @@ module.exports = app => {
             }
             return changes;
         }
+
+        /**
+         * 获取 某时间后 审批进度更新的 变更令
+         * @param {Number} pid - 查询标段
+         * @param {Number} uid - 查询人
+         * @param {Date} time - 查询时间
+         * @returns {Promise<*>}
+         */
+        async getNoticeChange(pid, uid, time) {
+            const sql = 'SELECT t.`id`, t.`name`, t.`type`, t.`user_id`, ' +
+                        '    ca.`cid`, c.`code` As `c_code`, c.name As `c_name`, ' +
+                        '    ca.`uid`, ca.`sin_time` As `cu_time`, ca.`status` As `cu_status`, ca.`name` As `cu_name`, ca.`jobs` As `cu_jobs`, ca.company As `cu_company`' +
+                        '  FROM ?? As t' +
+                        '  LEFT JOIN ?? As c ON c.`tid` = t.`id`' +
+                        '  LEFT JOIN ?? As ca ON ca.`cid` = c.`cid`' +
+                        '  WHERE t.`project_id` = ? and ca.`uid` <> ? and `ca`.`sin_time` > ?' +
+                        '  GROUP BY t.`id`' +
+                        '  ORDER BY ca.`sin_time`';
+            const sqlParam = [this.ctx.service.tender.tableName, this.ctx.service.change.tableName, this.tableName, pid, uid, time];
+            return await this.db.query(sql, sqlParam);
+        }
     }
 
     return ChangeAudit;

+ 21 - 0
app/service/ledger_audit.js

@@ -278,6 +278,27 @@ module.exports = app => {
             const sqlParam = [this.tableName, this.ctx.service.tender.tableName, auditorId, auditConst.status.checking];
             return await this.db.query(sql, sqlParam);
         }
+
+        /**
+         * 获取 某时间后 审批进度 更新的台账
+         * @param {Integer} projectId - 项目id
+         * @param {Integer} auditorId - 查询人id
+         * @param {Date} noticeTime - 查询事件
+         * @returns {Promise<*>}
+         */
+        async getNoticeTender(projectId, auditorId, noticeTime) {
+            const sql = 'SELECT la.`audit_id`, la.`times`, la.`audit_order`, la.`end_time`, la.`status`, t.`id`, t.`name`, t.`project_id`, t.`type`, t.`user_id`, ' +
+                        '    pa.name As `lu_name`, pa.role As `lu_role`, pa.company As `lu_company`' +
+                        '  FROM ?? As t ' +
+                        '  LEFT JOIN ?? As la ON la.`tender_id` = t.`id`' +
+                        '  LEFT JOIN ?? As pa ON la.`audit_id` = pa.`id`' +
+                        '  WHERE la.`audit_id` <> ? and la.`end_time` > ? and t.`project_id` = ?' +
+                        '  GROUP By t.`id`' +
+                        '  ORDER By la.`end_time`';
+            const sqlParam = [this.ctx.service.tender.tableName, this.tableName, this.ctx.service.projectAccount.tableName,
+                auditorId, noticeTime, projectId];
+            return await this.db.query(sql, sqlParam);
+        }
     }
 
     return LedgerAudit;

+ 32 - 0
app/service/stage.js

@@ -24,6 +24,12 @@ module.exports = app => {
             this.tableName = 'stage';
         }
 
+        /**
+         * 获取 最新一期 期计量
+         * @param tenderId
+         * @param includeUnCheck
+         * @returns {Promise<*>}
+         */
         async getLastestStage(tenderId, includeUnCheck = false) {
             this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tid', {
@@ -42,6 +48,11 @@ module.exports = app => {
             return stage;
         }
 
+        /**
+         * 获取 最新一期 审批完成的 期计量
+         * @param tenderId
+         * @returns {Promise<*>}
+         */
         async getLastestCompleteStage(tenderId) {
             this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tid', {
@@ -68,12 +79,30 @@ module.exports = app => {
                 where: {tid: tenderId},
                 orders: [['order', 'desc']],
             });
+            for (const s of stages) {
+                s.tp = this.ctx.helper.plus(s.contract_tp, s.qc_tp);
+                s.pre_tp = this.ctx.helper.plus(s.pre_contract_tp, s.pre_qc_tp);
+                s.end_tp = this.ctx.helper.plus(s.pre_tp, s.tp);
+            }
             if (stages.length !== 0) {
                 const lastStage = stages[stages.length - 1];
                 if (lastStage.status === auditConst.status.uncheck && lastStage.user_id !== this.ctx.session.sessionUser.accountId) {
                     stages.splice(stages.length - 1, 1);
                 }
             }
+            // 最新一期计量(未审批完成),当前操作人的期详细数据,应实时计算
+            if (stages.length > 0 && stages[0].status !== auditConst.status.checked) {
+                const stage = stages[0];
+                const curAuditor = await this.ctx.service.stageAudit.getCurAuditor(stage.id, stage.times);
+                const isActive = curAuditor ? curAuditor.id === this.ctx.session.sessionUser.accountId : stage.user_id === this.ctx.session.sessionUser.accountId;
+                if (isActive) {
+                    const tpData = await this.ctx.service.stageBills.getSumTotalPrice(stage);
+                    stage.contract_tp = tpData.contract_tp;
+                    stage.qc_tp = tpData.qc_tp;
+                    stage.tp = this.ctx.helper.plus(stage.contract_tp, stage.qc_tp);
+                    stage.end_tp = this.ctx.helper.plus(stage.pre_tp, stage.tp);
+                }
+            }
             return stages;
         }
 
@@ -89,6 +118,7 @@ module.exports = app => {
                 where: {tid: tenderId},
                 order: ['order'],
             });
+            const preStage = stages[stages.length - 1];
             if (stages.length > 0 && stages[stages.length - 1].status !== auditConst.status.checked) {
                 throw '上一期未审批通过,请等待上一期审批通过后,再新增数据';
             };
@@ -103,6 +133,8 @@ module.exports = app => {
                 times: 1,
                 status: auditConst.status.uncheck,
                 user_id: this.ctx.session.sessionUser.accountId,
+                pre_contract_tp: this.ctx.helper.plus(preStage.pre_contract_tp, preStage.contract_tp),
+                pre_qc_tp: this.ctx.helper.plus(preStage.pre_qc_tp, preStage.qc_tp),
             };
             const transaction = await this.db.beginTransaction();
             try {

+ 55 - 5
app/service/stage_audit.js

@@ -182,11 +182,17 @@ 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 transaction.update(this.ctx.service.stage.tableName, {id: stageId, status: auditConst.status.checking});
                 // 计算原报最终数据
                 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.stage.tableName, {
+                    id: stageId, status: auditConst.status.checking,
+                    contract_tp: tpData.contract_tp,
+                    qc_tp: tpData.qc_tp
+                });
                 // todo 更新标段tender状态 ?
                 await transaction.commit();
             } catch(err) {
@@ -229,17 +235,32 @@ module.exports = app => {
                         // 流程至下一审批人
                         await transaction.update(this.tableName, {id: nextAudit.id, status: auditConst.status.checking, begin_time: time});
                         // 同步 期信息
-                        await transaction.update(this.ctx.service.stage.tableName, {id: stageId, status: auditConst.status.checking});
+                        const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
+                        await transaction.update(this.ctx.service.stage.tableName, {
+                            id: stageId, status: auditConst.status.checking,
+                            contract_tp: tpData.contract_tp,
+                            qc_tp: tpData.qc_tp,
+                        });
                     } else {
                         // 本期结束
                         // 计算并合同支付最终数据
                         await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
                         // 同步 期信息
-                        await transaction.update(this.ctx.service.stage.tableName, {id: stageId, status: checkData.checkType});
+                        const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
+                        await transaction.update(this.ctx.service.stage.tableName, {
+                            id: stageId, status: checkData.checkType,
+                            contract_tp: tpData.contract_tp,
+                            qc_tp: tpData.qc_tp,
+                        });
                     }
                 } else if (checkData.checkType === auditConst.status.checkNo) { // 审批退回 原报
                     // 同步 期信息
-                    await transaction.update(this.ctx.service.stage.tableName, {id: stageId, status: checkData.checkType});
+                    const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
+                    await transaction.update(this.ctx.service.stage.tableName, {
+                        id: stageId, status: checkData.checkType,
+                        contract_tp: tpData.contract_tp,
+                        qc_tp: tpData.qc_tp,
+                    });
                     // 拷贝新一次审核流程列表
                     const auditors = await this.getAllDataByCondition({
                         where: {sid: stageId, times: times},
@@ -256,7 +277,12 @@ module.exports = app => {
                     await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times + 1, 0, transaction);
                 } else if (checkData.checkType === auditConst.status.checkNoPre) { // 审批退回 上一审批人
                     // 同步 期信息
-                    await transaction.update(this.ctx.service.stage.tableName, {id: stageId, status: checkData.checkType});
+                    const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
+                    await transaction.update(this.ctx.service.stage.tableName, {
+                        id: stageId, status: checkData.checkType,
+                        contract_tp: tpData.contract_tp,
+                        qc_tp: tpData.qc_tp,
+                    });
                     // 将当前审批人 与 上一审批人再次添加至流程,顺移其后审批人流程顺序
                     if (audit.order > 1) {
                         // 顺移气候审核人流程顺序
@@ -315,6 +341,30 @@ module.exports = app => {
             const sqlParam = [this.tableName, this.ctx.service.stage.tableName, this.ctx.service.tender.tableName, auditorId, auditConst.status.checking];
             return await this.db.query(sql, sqlParam);
         }
+
+        /**
+         * 获取 某时间后 审批进度 更新的期
+         * @param {Number} pid - 查询标段
+         * @param {Number} uid - 查询人
+         * @param {Date} time - 查询时间
+         * @returns {Promise<*>}
+         */
+        async getNoticeStage(pid, uid, time) {
+            const sql = 'SELECT t.`name`, t.`project_id`, t.`type`, t.`user_id`, ' +
+                        '    s.`order` As `s_order`, s.`status` As `s_status`, ' +
+                        '    sa.`aid`, sa.`times`, sa.`order`, sa.`end_time`, sa.`tid`, sa.`sid`, sa.`status`, ' +
+                        '    pa.`name` As `su_name`, pa.role As `su_role`, pa.company As `su_company`' +
+                        '  FROM ?? As t' +
+                        '  LEFT JOIN ?? As s On t.`id` = s.`tid`' +
+                        '  LEFT JOIN ?? As sa ON s.`id` = sa.`sid`' +
+                        '  LEFT JOIN ?? As pa ON sa.`aid` = pa.`id`' +
+                        '  WHERE sa.`aid` <> ? and sa.`end_time` > ? and t.`project_id` = ?' +
+                        '  GROUP By t.`id`' +
+                        '  ORDER By sa.`end_time`';
+            const sqlParam = [this.ctx.service.tender.tableName, this.ctx.service.stage.tableName, this.tableName,
+                this.ctx.service.projectAccount.tableName, uid, time, pid];
+            return await this.db.query(sql, sqlParam);
+        }
     }
 
     return StageAudit;

+ 40 - 0
app/view/dashboard/index.ejs

@@ -65,6 +65,46 @@
             <h4>需要你关注</h4>
         </div>
         <div class="c-body">
+            <ul class="list-unstyled m-0">
+                <% for (const nl of noticeLedger) { %>
+                <li class="media">
+                    <img class="mr-3" src="public/images/avatar.png">
+                    <div class="media-body">
+                        <span class="pull-right text-muted"><%- nl.end_time.toLocaleString() %></span>
+                        <h5 class="mt-0"><%- nl.lu_name %><small class="ml-3 text-muted"><%- nl.lu_role %></small></h5>
+                        <p><a href="/tender/<%- nl.id %>"><%- nl.name %></a> 台帐 <%- acLedger.statusString[nl.status]%>。</p>
+                    </div>
+                </li>
+                <% } %>
+                <% for (const ns of noticeStage) { %>
+                <li class="media">
+                    <img class="mr-3" src="public/images/avatar.png">
+                    <div class="media-body">
+                        <span class="pull-right text-muted"><%- ns.end_time.toLocaleString() %></span>
+                        <h5 class="mt-0"><%- ns.su_name %><small class="ml-3 text-muted"><%- ns.su_role %></small></h5>
+                        <p>
+                            <a href="/tender/<%- ns.tid %>"><%- ns.su_name %></a>
+                            <a href="/tender/<%- ns.tid %>/measure/stage/<%- ns.s_order %>">第<%- ns.s_order %>期 </a>
+                            <%- acStage.statusString[ns.status]%>。
+                        </p>
+                    </div>
+                </li>
+                <% } %>
+                <% for (const nc of noticeChange) { %>
+                <li class="media">
+                    <img class="mr-3" src="public/images/avatar.png">
+                    <div class="media-body">
+                        <span class="pull-right text-muted"><%- nc.cu_time.toLocaleString() %></span>
+                        <h5 class="mt-0"><%- nc.cu_name %><small class="ml-3 text-muted"><%- nc.cu_role %></small></h5>
+                        <p>
+                            <a href="/tender/<%- nc.id %>"><%- nc.name %></a>
+                            <a href="/tender/<%- nc.id %>/change/<%- nc.cid %>/info"><%- nc.c_code %> </a>
+                            <%- acChange.statusString[nc.cu_status]%>。
+                        </p>
+                    </div>
+                </li>
+                <% } %>
+            </ul>
         </div>
     </div>
 </div>

+ 6 - 6
app/view/measure/stage.ejs

@@ -7,7 +7,7 @@
             </h2>
             <div>
                 <% if (ctx.session.sessionUser.accountId === ctx.tender.data.user_id && ctx.tender.data.ledger_status === auditConst.status.checked &&
-                        (stages.length === 0 || stages[stages.length- 1].status === auditConst.status.checked)) { %>
+                        (stages.length === 0 || stages[0].status === auditConst.status.checked)) { %>
                 <a href="#add-qi" data-toggle="modal" data-target="#add-qi" class="btn btn-primary btn-sm pull-right">开始新一期</a>
                 <% } %>
             </div>
@@ -39,11 +39,11 @@
                         <% } %>
                     </td>
                     <td class="text-center"><%- s.s_time %></td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></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="text-center">
                     <% if (s.status === auditConst.status.uncheck && s.user_id === ctx.session.sessionUser.accountId) { %>
                         <a href="" class="btn <%- auditConst.statusButtonClass[s.status] %> btn-sm"><%- auditConst.statusButton[s.status] %></a>

+ 27 - 22
app/view/tender/detail.ejs

@@ -455,7 +455,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">t</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-t" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-t" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -463,7 +463,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">km</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-km" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-km" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -471,7 +471,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">m</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-m" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-m" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -479,7 +479,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">m2</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-m2" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-m2" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -487,7 +487,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">m3</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-m3" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-m3" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -495,7 +495,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">kg</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-kg" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-kg" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -503,7 +503,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">个</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-ge" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-ge" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -511,7 +511,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">台</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-tai" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-tai" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -519,7 +519,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">套</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-tao" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-tao" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -527,7 +527,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">棵</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-ke" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-ke" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -535,7 +535,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">组</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-zu" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-zu" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-2 mb-3">
@@ -543,7 +543,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">系统</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-xitong" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-xitong" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                         <div class="col-3 mb-3">
@@ -551,7 +551,7 @@
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">其他未列单位</span>
                                                 </div>
-                                                <input class="form-control" type="number" min="0" max="6" value="3" id="unit-other" oninput="limitInputMinMax(this)">
+                                                <input class="form-control" type="number" min="0" max="6" value="3" maxlength="1" id="unit-other" oninput="limitDecimal(this)">
                                             </div>
                                         </div>
                                     </div>
@@ -572,23 +572,26 @@
                                     <!--默认显示-->
                                     <div class="form-group">
                                         <label>全局设置</label>
-                                        <div class="col-3">
+                                        <div class="col-5">
                                             <div class="input-group input-group-sm">
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">签约合同价</span>
                                                 </div>
-                                                <input type="number" class="form-control" value="" id="contract-price" onchange="roundPrice($('#contract-price'));calculateC2()">
+                                                <input type="number" class="form-control" value="" id="contract-price" maxlength="12"
+                                                       onKeyPress="if ((event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) || value.indexOf('.') >= 12) event.returnValue=false; console.log(value.indexOf('.'))"
+                                                       onchange="roundPrice($('#contract-price'));calculateC2()">
                                             </div>
                                         </div>
-                                        <div class="col-3 mt-3">
+                                        <div class="col-5 mt-3">
                                             <div class="input-group input-group-sm">
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">暂列金额</span>
                                                 </div>
-                                                <input type="number" class="form-control" value="" id="zan-lie-price" onchange="roundPrice($('#zan-lie-price'));calculateC2()">
+                                                <input type="number" class="form-control" value="" id="zan-lie-price" maxlength="12" onchange="roundPrice($('#zan-lie-price'));calculateC2()"
+                                                       onKeyPress="if ((event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) || value.indexOf('.') >= 12) event.returnValue=false; console.log(value.indexOf('.'))">
                                             </div>
                                         </div>
-                                        <div class="col-5 mt-3">
+                                        <div class="col-6 mt-3">
                                             <div class="input-group input-group-sm">
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">签约合同价(不含暂列金)</span>
@@ -596,20 +599,22 @@
                                                 <input type="number" class="form-control" value="" id="c-zl" disabled="">
                                             </div>
                                         </div>
-                                        <div class="col-3 my-3">
+                                        <div class="col-5 my-3">
                                             <div class="input-group input-group-sm">
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">签约开工预付款</span>
                                                 </div>
-                                                <input type="number" class="form-control" value="" id="start-advance" onchange="roundPrice($('#start-advance'));">
+                                                <input type="number" class="form-control" value="" id="start-advance" maxlength="12" onchange="roundPrice($('#start-advance'));"
+                                                       onKeyPress="if ((event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) || value.indexOf('.') >= 12) event.returnValue=false; console.log(value.indexOf('.'))">
                                             </div>
                                         </div>
-                                        <div class="col-3">
+                                        <div class="col-5">
                                             <div class="input-group input-group-sm">
                                                 <div class="input-group-prepend">
                                                     <span class="input-group-text">签约材料预付款</span>
                                                 </div>
-                                                <input type="number" class="form-control" value="" id="material-advance" onchange="roundPrice($('#material-advance'));">
+                                                <input type="number" class="form-control" value="" id="material-advance" maxlength="12" onchange="roundPrice($('#material-advance'));"
+                                                       onKeyPress="if ((event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) || value.indexOf('.') >= 12) event.returnValue=false; console.log(value.indexOf('.'))">
                                             </div>
                                         </div>
                                     </div>

+ 1 - 1
config/config.qa.js

@@ -46,7 +46,7 @@ module.exports = appInfo => {
     // session配置
     config.session = {
         key: 'ZHC_SESS',
-        maxAge: 8 * 3600 * 1000, // 8小时
+        maxAge: 7 * 24 * 3600 * 1000, // 7天
         httpOnly: true,
         encrypt: true,
         //renew: true, // session临近过期更新过期时间