Ver código fonte

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

Tony Kang 3 anos atrás
pai
commit
2e19979a67
39 arquivos alterados com 252 adições e 127 exclusões
  1. 2 1
      app/controller/datacollect_controller.js
  2. 2 2
      app/controller/material_controller.js
  3. 38 13
      app/controller/profile_controller.js
  4. 1 1
      app/controller/report_archive_controller.js
  5. 2 12
      app/controller/stage_controller.js
  6. 4 3
      app/controller/tender_controller.js
  7. 21 1
      app/public/js/advance_audit.js
  8. 5 2
      app/public/js/material_checklist.js
  9. 6 6
      app/public/js/material_list.js
  10. 31 2
      app/public/js/profile.js
  11. 3 0
      app/public/js/shares/tender_select.js
  12. 1 1
      app/public/js/stage_change.js
  13. 3 3
      app/public/report/js/rpt_custom.js
  14. 8 4
      app/service/advance.js
  15. 1 1
      app/service/material_list.js
  16. 0 1
      app/service/stage.js
  17. 2 2
      app/service/stage_change.js
  18. 13 5
      app/view/advance/detail.ejs
  19. 1 1
      app/view/advance/modal_audit.ejs
  20. 1 1
      app/view/change/apply_information_modal.ejs
  21. 1 1
      app/view/change/info_modal.ejs
  22. 1 1
      app/view/change/information_modal.ejs
  23. 1 1
      app/view/change/plan_information_modal.ejs
  24. 1 1
      app/view/change/project_information_modal.ejs
  25. 46 23
      app/view/datacollect/index.ejs
  26. 1 1
      app/view/ledger/explode_modal.ejs
  27. 1 1
      app/view/material/file_modal.ejs
  28. 15 3
      app/view/profile/sign.ejs
  29. 5 5
      app/view/report/rpt_all_popup.ejs
  30. 20 0
      app/view/report/stage_archive_modal.ejs
  31. 0 18
      app/view/stage/audit_modal.ejs
  32. 2 2
      app/view/stage/deal_modal.ejs
  33. 2 2
      app/view/stage/modal.ejs
  34. 1 1
      app/view/stage/pay_modal.ejs
  35. 1 1
      app/view/stage_extra/bonus_modal.ejs
  36. 2 2
      app/view/stage_rela/detail_modal.ejs
  37. 1 1
      config/menu.js
  38. 1 1
      config/web.js
  39. 5 0
      sql/update.sql

+ 2 - 1
app/controller/datacollect_controller.js

@@ -126,7 +126,8 @@ module.exports = app => {
                         t.total_price = sum.total_price;
                         t.deal_tp = sum.deal_tp;
                     }
-                    t.material_tp = await ctx.service.material.getSumMaterial(t.id);
+                    t.change_tp = await ctx.service.change.getChangeTp(t.id);
+                    // t.material_tp = await ctx.service.material.getSumMaterial(t.id);
                     // 获取本标段 本月计量期审批通过数目,变更令审批通过数目,台账修订通过数目,材料调差通过数目
                     t.month_stage_num = await ctx.service.stageAudit.getNumByMonth(t.id, startMonth, endMonth);
                     t.month_change_num = await ctx.service.changeAudit.getNumByMonth(t.id, startMonth, endMonth);

+ 2 - 2
app/controller/material_controller.js

@@ -505,8 +505,8 @@ module.exports = app => {
                     // 批量插入并修改is_new值
                     await ctx.service.materialListGcl.setData(lastMaterial.id, hadBillsList);
                     // responseData.data.gclList = hadBillsList;
-                } else {
-                    const hadBillsList = await ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: ctx.tender.id } });
+                // } else {
+                    // const hadBillsList = await ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: ctx.tender.id } });
                     // responseData.data.gclList = hadBillsList;
                 }
                 ctx.body = responseData;

+ 38 - 13
app/controller/profile_controller.js

@@ -247,6 +247,7 @@ module.exports = app => {
 
             const renderData = {
                 accountData,
+                fujianOssPath: ctx.app.config.fujianOssPath,
             };
             await this.layout('profile/sign.ejs', renderData);
         }
@@ -351,12 +352,22 @@ module.exports = app => {
 
                 // 获取账号数据
                 const accountData = await ctx.service.projectAccount.getDataByCondition({ id: sessionUser.accountId });
-
-                if (accountData.sign_path === '') {
-                    throw '不存在签名';
+                const data = JSON.parse(ctx.request.body.data);
+                let result = false;
+                if (data.type && data.type === 'stamp') {
+                    if (!accountData.stamp_path) {
+                        throw '不存在签章';
+                    }
+                    // 删除oss文件
+                    await ctx.app.fujianOss.delete(ctx.app.config.fujianOssFolder + accountData.stamp_path);
+                    // 删除库
+                    result = await ctx.service.projectAccount.update({ stamp_path: null }, { id: sessionUser.accountId });
+                } else {
+                    if (accountData.sign_path === '') {
+                        throw '不存在签名';
+                    }
+                    result = await ctx.service.projectAccount.update({ sign_path: '' }, { id: sessionUser.accountId });
                 }
-
-                const result = await ctx.service.projectAccount.update({ sign_path: '' }, { id: sessionUser.accountId });
                 if (!result) {
                     throw '移除签名失败';
                 }
@@ -412,15 +423,29 @@ module.exports = app => {
                 const stream = await ctx.getFileStream();
                 const create_time = Date.parse(new Date()) / 1000;
                 const fileInfo = path.parse(stream.filename);
-                const dirName = 'public/upload/sign';
-                const fileName = moment().format('YYYYMMDD') + '_sign_' + create_time + fileInfo.ext;
-                await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, 'app', dirName, fileName));
-                await sendToWormhole(stream);
-                const result = await ctx.service.projectAccount.update({ sign_path: fileName }, { id: ctx.session.sessionUser.accountId });
-                if (result) {
-                    responseData.data = { sign_path: fileName };
+                if (stream.fields && stream.fields.type && stream.fields.type === 'stamp') {
+                    // const dirName = 'app/public/upload/sign/profile';
+                    // const fileName = moment().format('YYYYMMDD') + '_sign_' + create_time + fileInfo.ext;
+                    const filepath = `app/public/upload/sign/profile/qianzhang_${create_time + fileInfo.ext}`;
+                    await ctx.app.fujianOss.put(ctx.app.config.fujianOssFolder + filepath, stream);
+                    await sendToWormhole(stream);
+                    const result = await ctx.service.projectAccount.update({ stamp_path: filepath }, { id: ctx.session.sessionUser.accountId });
+                    if (result) {
+                        responseData.data = { stamp_path: filepath };
+                    } else {
+                        throw '添加数据库失败';
+                    }
                 } else {
-                    throw '添加数据库失败';
+                    const dirName = 'public/upload/sign';
+                    const fileName = moment().format('YYYYMMDD') + '_sign_' + create_time + fileInfo.ext;
+                    await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, 'app', dirName, fileName));
+                    await sendToWormhole(stream);
+                    const result = await ctx.service.projectAccount.update({ sign_path: fileName }, { id: ctx.session.sessionUser.accountId });
+                    if (result) {
+                        responseData.data = { sign_path: fileName };
+                    } else {
+                        throw '添加数据库失败';
+                    }
                 }
             } catch (err) {
                 this.log(err);

+ 1 - 1
app/controller/report_archive_controller.js

@@ -148,7 +148,7 @@ module.exports = app => {
             if (stage_id === -1) {
                 await this.layout('report/index_archive.ejs', renderData, 'report/archive_popup.ejs');
             } else {
-                await this.layout('report/index_archive.ejs', renderData, 'stage/audit_modal.ejs');
+                await this.layout('report/index_archive.ejs', renderData, 'report/stage_archive_modal.ejs');
             }
         }
 

+ 2 - 12
app/controller/stage_controller.js

@@ -422,7 +422,6 @@ module.exports = app => {
                     preStageData;
                 responseData.data = await ctx.service.pos.getPosDataWithAddStageOrder(condition);
                 // 根据当前人,或指定对象查询数据
-                // console.time('cur');
                 const curWhere = JSON.parse(ctx.request.body.data);
                 if (ctx.stage.readOnly) {
                     curStageData = await ctx.service.stagePos.getAuditorStageData2(ctx.tender.id,
@@ -430,23 +429,16 @@ module.exports = app => {
                 } else {
                     curStageData = await ctx.service.stagePos.getLastestStageData2(ctx.tender.id, ctx.stage.id, curWhere);
                 }
-                // console.timeEnd('cur');
                 // 查询截止上期数据
-                // console.time('pre');
                 if (ctx.stage.order > 1) {
                     preStageData = await ctx.service.stagePosFinal.getFinalData(ctx.tender.data, ctx.stage.order - 1);
                 } else {
                     preStageData = [];
                 }
-                // console.timeEnd('pre');
-                // console.time('assign');
-                // console.log('cur: ' + curStageData.length);
-                // console.log('pre: ' + preStageData.length);
                 this.ctx.helper.assignRelaData(responseData.data, [
                     { data: curStageData, fields: ['contract_qty', 'qc_qty', 'postil'], prefix: '', relaId: 'pid' },
                     { data: preStageData, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'pid' },
                 ]);
-                // console.timeEnd('assign');
                 ctx.body = responseData;
             } catch (err) {
                 this.log(err);
@@ -561,7 +553,6 @@ module.exports = app => {
                 if (!data.cid) {
                     throw '查询数据错误';
                 }
-                console.log(data);
                 const detailData = await this._getChangeDetailData(ctx.tender.id, ctx.stage.id, data.cid, data.is_import);
                 ctx.body = { err: 0, msg: '', data: detailData };
             } catch (err) {
@@ -962,7 +953,6 @@ module.exports = app => {
 
                 ctx.body = responseData;
             } catch (err) {
-                console.log(err);
                 this.log(err);
                 ctx.body = { err: 1, msg: err.toString(), data: null };
             }
@@ -1269,7 +1259,6 @@ module.exports = app => {
                     }
                     const cacheKey = 'smsCode:' + ctx.session.sessionUser.accountId;
                     const cacheCode = await app.redis.get(cacheKey);
-                    // console.log(cacheCode);
                     if (cacheCode === null || code === undefined || cacheCode !== (code + pa.auth_mobile)) {
                         throw '验证码不正确!';
                     }
@@ -1383,7 +1372,8 @@ module.exports = app => {
                 for (const order of data.roles) {
                     const data = { order, bills: [], pos: [] };
                     const compareTimes = ctx.stage.status === auditConst.status.checkNo && !ctx.stage.readOnly
-                        ? ctx.stage.curTimes - 1 : ctx.stage.curTimes;
+                        ? ( order === 0 ? ctx.stage.curTimes : ctx.stage.curTimes - 1)
+                        : ctx.stage.curTimes;
                     data.bills = await ctx.service.stageBills.getAuditorStageData2(ctx.tender.id, ctx.stage.id, compareTimes, order);
                     data.pos = await ctx.service.stagePos.getAuditorStageData2(ctx.tender.id, ctx.stage.id, compareTimes, order);
                     result.roles.push(data);

+ 4 - 3
app/controller/tender_controller.js

@@ -1307,14 +1307,15 @@ module.exports = app => {
                     case 'stage':
                         const stageData = await this.ctx.service.stageBills.sumLoad(data.lid, data.tenders, data.cover);
                         stageData.import_change = { target: { import_lid: data.lid } };
-                        stageData.import_change.data = await this.ctx.service.stageImportChange.getLeafXmjStageImportData(this.ctx.stage, data.lid);
+                        stageData.import_change.data = await this.ctx.service.stageImportChange.getLeafXmjStageImportData(ctx.stage, data.lid);
+                        await ctx.service.stage.updateCheckCalcFlag(ctx.stage, true);
+                        await ctx.service.stage.updateCacheTime(ctx.stage.id);
                         ctx.body = {err: 0, msg: '', data: stageData};
                         break;
                     default:
                         throw '数据错误';
                 }
             } catch (err) {
-                console.log(err);
                 this.log(err);
                 ctx.ajaxErrorBody(err, '导入数据失败');
             }
@@ -1379,7 +1380,7 @@ module.exports = app => {
                             responseData.data[f] = await ctx.service.change.getAllDataByCondition({
                                 columns: [ 'cid', 'code', 'name', 'selected' ],
                                 where,
-                                orders: [['sin_time', 'desc']],
+                                orders: [['in_time', 'desc']],
                             });
                             break;
                         case 'change_project':

+ 21 - 1
app/public/js/advance_audit.js

@@ -267,7 +267,7 @@ $(document).ready(function () {
             // 支付比例转化
             val = fixedToSub(val)
             if (val.toFixed(2) === max.toFixed(2)) {
-              // 比例达到最大,特殊处理金额的显示小数点
+                // 比例达到最大,特殊处理金额的显示小数点
                 val = fixedToSub(max, 2);
                 isLimitMax = true
             }
@@ -298,6 +298,26 @@ $(document).ready(function () {
         }, 500);
     })
 
+    const payDate = $('.pay-date-input').datepicker().data('datepicker');
+    payDate.selectDate(new Date(advance.pay_time));
+
+    $('.pay-date-input').datepicker({
+        onHide: function (dp, animationCompleted) {
+            if(animationCompleted) {
+                const val = $('.pay-date-input').val();
+                if(!val) {
+                    toastr.error('支付时间不能为空');
+                    $('.pay-date-input').val(moment(advance.pay_time).format('YYYY-MM-DD'));
+                } else if(val !== moment(advance.pay_time).format('YYYY-MM-DD')) {
+                    const data = {
+                        pay_time: val
+                    };
+                    update(data);
+                }
+            }
+        }
+    });
+
     function checkInput() {
         const newVal = {
             cur_amount: parseFloat($(`.pay-input[data-type=${1}]`).val()),

+ 5 - 2
app/public/js/material_checklist.js

@@ -250,8 +250,11 @@ $(document).ready(() => {
     let materialList = [];
     function loadMaterialData(iGclRow, iLXmjRow) {
         const gcl = gclGatherData[iGclRow];
-        if (gcl && gcl.leafXmjs[iLXmjRow]) {
-            const xmj = gcl.leafXmjs[iLXmjRow];
+        const leafXmjs = gcl && gcl.leafXmjs ? gcl.leafXmjs.filter(item => {
+            return item.qc_qty || item.contract_qty
+        }) : null;
+        if (leafXmjs) {
+            const xmj = leafXmjs[iLXmjRow];
             materialList = [];
             materialList = _.filter(materialListData, function (m) {
                 return m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined);

+ 6 - 6
app/public/js/material_list.js

@@ -346,19 +346,19 @@ $(document).ready(() => {
     let materialList = [];
     function loadMaterialData(iGclRow, iLXmjRow) {
         const gcl = gclGatherData[iGclRow];
-        // const leafXmjs = gcl.leafXmjs.filter(item => {
-        //     return item.qc_qty || item.contract_qty
-        // });
+        const leafXmjs = gcl && gcl.leafXmjs ? gcl.leafXmjs.filter(item => {
+            return item.qc_qty || item.contract_qty
+        }) : null;
         // console.log(iLXmjRow, leafXmjs, materialListData);
-        if (gcl && gcl.leafXmjs[iLXmjRow]) {
-            const xmj = gcl.leafXmjs[iLXmjRow];
+        if (leafXmjs) {
+            const xmj = leafXmjs[iLXmjRow];
             materialList = [];
             for (const m of materialListData) {
                 if (m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined)) {
                     materialList.push(m);
                 }
             }
-            console.log(materialList);
+            console.log(xmj, materialList);
             SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialList);
         } else {
             SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, []);

+ 31 - 2
app/public/js/profile.js

@@ -115,7 +115,15 @@ $(document).ready(function() {
         $('#delete-sign').click(function () {
             postData('/profile/sign/delete', {}, function (result) {
                 $('#sign-show').html('');
-                toast('移除成功', 'success');
+                toastr.success('移除成功');
+            })
+        });
+
+        // 移除签章
+        $('#delete-stamp').click(function () {
+            postData('/profile/sign/delete', { type: 'stamp' }, function (result) {
+                $('#stamp-show').html('');
+                toastr.success('移除成功');
             })
         });
 
@@ -136,7 +144,7 @@ $(document).ready(function() {
             const ext = file.name.toLowerCase().split('.').splice(-1)[0];
             const imgStr = /(jpg|jpeg|png|bmp|BMP|JPG|PNG|JPEG)$/;
             if (!imgStr.test(ext)) {
-                toast('请上传正确的图片格式文件','error');
+                toastr.error('请上传正确的图片格式文件');
                 return
             }
             if ($(this).val()) {
@@ -149,6 +157,27 @@ $(document).ready(function() {
                 });
             }
         })
+
+        // 上传签章
+        $('#stamp-upload').change(function () {
+            const file = this.files[0];
+            const ext = file.name.toLowerCase().split('.').splice(-1)[0];
+            const imgStr = /(jpg|jpeg|png|bmp|BMP|JPG|PNG|JPEG)$/;
+            if (!imgStr.test(ext)) {
+                toastr.error('请上传正确的图片格式文件');
+                return
+            }
+            if ($(this).val()) {
+                const formData = new FormData();
+                formData.append('type', 'stamp');
+                formData.append('file', this.files[0]);
+                postDataWithFile('/profile/sign/upload', formData, function (result) {
+                    const html = '<img src="'+ fujianOssPath + result.stamp_path +'" width="90">';
+                    $('#stamp-show').html(html);
+                    $('#stamp-upload').val('');
+                });
+            }
+        })
     } catch (error) {
         console.log(error);
     }

+ 3 - 0
app/public/js/shares/tender_select.js

@@ -106,6 +106,9 @@ const TenderSelect = function (setting) {
         loadHistory: function () {
             postData('/list/load', {type: tsObj.setting.type, tid: tsObj.select.tender_id, lid: tsObj.select.id}, data => {
                 tsObj.orgHistory = data.history || {};
+                // 屏蔽自己
+                const curIndex = data.tenders.findIndex(x => { return x.id === tsObj.select.tender_id });
+                if (curIndex >= 0) data.tenders.splice(curIndex, 1);
                 tsObj.tenderSourceTree = Tender2Tree.convert(data.category, data.tenders, data.ledgerAuditConst, data.stageAuditConst);
                 tsObj.trHistory = JSON.parse(JSON.stringify(tsObj.orgHistory));
                 if (tsObj.orgHistory.tenders) {

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

@@ -337,7 +337,7 @@ $(document).ready(() => {
             if (change.detail) {
                 changeSpreadObj.loadChangeDetailData();
             } else {
-                postData(window.location.pathname + '/detail', {cid: change.cid}, function (result) {
+                postData(window.location.pathname + '/detail', {cid: change.cid, is_import: change.is_import}, function (result) {
                     change.detail = result;
                     analysis.analyze(change);
                     changeSpreadObj.loadChangeDetailData();

+ 3 - 3
app/public/report/js/rpt_custom.js

@@ -29,7 +29,7 @@ const rptCustomObj = (function () {
     const sStageSelect = 'stage_select';
     const grSpreadSetting = {
         baseCols: [
-            {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: true},
+            {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 240, formatter: '@', readOnly: true},
         ],
         extraCols: [
             {title: '%s', colSpan: '1', rowSpan: '1', field: '%s', hAlign: 1, vAlign: '1', width: 60, cellType: 'checkbox', readOnly: true},
@@ -273,7 +273,7 @@ const rptCustomObj = (function () {
         grSpreadSetting.cols = [];
         for (const bc of grSpreadSetting.baseCols) {
             grSpreadSetting.cols.push(bc);
-            if (bc.field === 'name') bc.width = gsSetting.nameColWidth ? gsSetting.nameColWidth : 180;
+            if (bc.field === 'name') bc.width = gsSetting.nameColWidth ? gsSetting.nameColWidth : 240;
         }
         if (gsSetting.special) {
             for (const s of gsSetting.special) {
@@ -838,7 +838,7 @@ const rptCustomObj = (function () {
         const spreadSetting = {
             cols: [
                 {title: '选择', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox', readOnly: true},
-                {title: '名称', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: true, cellType: 'tree'},
+                {title: '名称', field: 'name', hAlign: 0, width: 300, formatter: '@', readOnly: true, cellType: 'tree'},
                 {title: '期数', field: 'phase', hAlign: 1, width: 60, formatter: '@', readOnly: true},
                 {title: '审批状态', field: 'status', hAlign: 1, width: 60, formatter: '@', readOnly: true}
             ],

+ 8 - 4
app/service/advance.js

@@ -123,7 +123,7 @@ module.exports = app => {
             } else {
                 latestOrder.order = latestOrder.order + 1;
             }
-            const record = await this.db.insert(this.tableName, { type, uid, tid, status: auditConst.status.uncheck, order: latestOrder.order, prev_amount: latestOrder.prev_total_amount, prev_total_amount: latestOrder.prev_total_amount });
+            const record = await this.db.insert(this.tableName, { type, uid, tid, status: auditConst.status.uncheck, order: latestOrder.order, prev_amount: latestOrder.prev_total_amount, prev_total_amount: latestOrder.prev_total_amount, pay_time: new Date() });
             const auditors = await ctx.service.advanceAudit.getAuditGroupByList(latestOrder.id, latestOrder.times);
             for (let idx = 0; idx < auditors.length; idx++) {
                 const { audit_id } = auditors[idx];
@@ -196,9 +196,13 @@ module.exports = app => {
          */
         async updateAdvance(payload, id) {
             const { ctx } = this;
-            const prevRecord = await this.getPreviousRecord(ctx.tender.id, ctx.advance.type) || { prev_total_amount: 0 };
-            const { cur_amount } = payload;
-            payload.prev_total_amount = ctx.helper.add(cur_amount, prevRecord.prev_total_amount);
+            if (!payload.pay_time) {
+                const prevRecord = await this.getPreviousRecord(ctx.tender.id, ctx.advance.type) || { prev_total_amount: 0 };
+                const { cur_amount } = payload;
+                payload.prev_total_amount = ctx.helper.add(cur_amount, prevRecord.prev_total_amount);
+            } else {
+                payload.pay_time = new Date(payload.pay_time);
+            }
             return await this.update(payload, {
                 id,
             });

+ 1 - 1
app/service/material_list.js

@@ -314,7 +314,7 @@ module.exports = app => {
                     gather_qty: ml.gather_qty,
                     quantity: ml.quantity,
                     expr: ml.expr,
-                    is_join: is_join ? 1 : 0,
+                    is_join: is_join ? 0 : 1,
                     in_time: new Date(),
                 };
                 copyMLArray.push(newMaterialList);

+ 0 - 1
app/service/stage.js

@@ -444,7 +444,6 @@ module.exports = app => {
             const result = {};
             const bg = await this.ctx.service.stageChange.getSubtotal(stage);
             const importBg = await this.ctx.service.stageImportChange.getSubtotal(stage);
-            console.log(bg, importBg);
             result.common = this.ctx.helper.add(bg.common, importBg.common);
             result.great = this.ctx.helper.add(bg.great, importBg.great);
             result.more = this.ctx.helper.add(bg.more, importBg.more);

+ 2 - 2
app/service/stage_change.js

@@ -363,7 +363,7 @@ module.exports = app => {
          * @return {Promise<void>}
          */
         async getStageUsedChangeId(sid) {
-            const sql = 'SELECT cid, qty FROM ' + this.tableName + ' WHERE sid = ?';
+            const sql = 'SELECT lid, pid, cid, cbid, qty, stimes, sorder FROM ' + this.tableName + ' WHERE sid = ?';
             const curAll = await this.db.query(sql, [sid]);
             const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
             return this._.map(this._.filter(cur, 'qty'), 'cid');
@@ -375,7 +375,7 @@ module.exports = app => {
         }
 
         async getSumLoadFinalData(sid) {
-            const sql = 'Select cf.tid, cf.sid, cf.lid, cf.cid, cf.cbid, cf.qty, cf.stimes, cf.sorder, c.code As c_code' +
+            const sql = 'Select cf.tid, cf.sid, cf.lid, cf.pid, cf.cid, cf.cbid, cf.qty, cf.stimes, cf.sorder, c.code As c_code' +
                 '  FROM ' + this.tableName + ' cf' +
                 '  Left Join ' + this.ctx.service.change.tableName + ' c ON cf.cid = c.cid' +
                 '  Where cf.sid = ?';

+ 13 - 5
app/view/advance/detail.ejs

@@ -39,21 +39,29 @@
                                         <div class="input-group-append"><span class="input-group-text">%</span></div>
                                     </div>
                                 </td>
-                                <th width="150" class="text-center">本期金额</th>
+                                <th width="150" class="text-center">支付时间</th>
                                 <td class="text-right" width="405">
                                     <div class="input-group input-group-sm">
-                                        <input type="number" class="pay-input form-control nospin text-right" min="1" <%- isEdited  ? '' : 'disabled' %>
-                                            placeholder="请填写本期金额,将自动计算支付比例" data-type="1"
-                                            value="<%- cur_amount %>">
-                                        <div class="input-group-append"><span class="input-group-text">元</span></div>
+                                        <input data-language="zh" type="text" <%- ctx.session.sessionUser.is_admin ? '' : isEdited ? '' : 'disabled' %> readonly data-date-format="yyyy-MM-dd" placeholder="点击选择时间" class="pay-date-input datepicker-here form-control" value="<%- ctx.helper.dateTran(advance.pay_time, 'YYYY/MM/DD') %>">
                                     </div>
                                 </td>
                             </tr>
                             <tr>
+                                <th class="text-center">本期金额</th>
+                                <td class="text-right" width="405">
+                                    <div class="input-group input-group-sm">
+                                        <input type="number" class="pay-input form-control nospin text-right" min="1" <%- isEdited  ? '' : 'disabled' %>
+                                               placeholder="请填写本期金额,将自动计算支付比例" data-type="1"
+                                               value="<%- cur_amount %>">
+                                        <div class="input-group-append"><span class="input-group-text">元</span></div>
+                                    </div>
+                                </td>
                                 <th class="text-center">截止上期</th>
                                 <td class="text-right" id="p_total1" width="405">
                                     <%- prev_amount %>元
                                 </td>
+                            </tr>
+                            <tr>
                                 <th class="text-center">截止本期金额</th>
                                 <td class="text-right" id="p_total2" width="405">
                                     <%- prev_total_amount %>元

+ 1 - 1
app/view/advance/modal_audit.ejs

@@ -26,7 +26,7 @@
                 </button>
             </div>
             <div class="modal-body">
-                <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
+                <p>单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
                 <!-- <p><a href="javascript: void(0);" class="btn btn-primary" id="file-modal-target">选择文件</a></p> -->
                 <input type="file" id="file-modal" multiple="multiple">
             </div>

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

@@ -10,7 +10,7 @@
             </div>
             <div class="modal-body">
                 <div class="form-group">
-                    <label for="file-modal">大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</label>
+                    <label for="file-modal">单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</label>
                     <!-- <p><a href="javascript: void(0);" class="btn btn-primary" id="file-modal-target">选择文件</a></p> -->
                     <input type="file" id="file-modal" multiple="multiple">
                 </div>

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

@@ -920,7 +920,7 @@
                 </button>
             </div>
             <div class="modal-body">
-                <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
+                <p>单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
                 <p><input value="选择文件" type="file" id="upload-file" multiple /></p>
             </div>
             <div class="modal-footer">

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

@@ -940,7 +940,7 @@
                 </button>
             </div>
             <div class="modal-body">
-                <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
+                <p>单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
                 <p><input value="选择文件" type="file" id="upload-file" multiple /></p>
             </div>
             <div class="modal-footer">

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

@@ -10,7 +10,7 @@
             </div>
             <div class="modal-body">
                 <div class="form-group">
-                    <label for="file-modal">大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</label>
+                    <label for="file-modal">单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</label>
                     <!-- <p><a href="javascript: void(0);" class="btn btn-primary" id="file-modal-target">选择文件</a></p> -->
                     <input type="file" id="file-modal" multiple="multiple">
                 </div>

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

@@ -9,7 +9,7 @@
                 </button>
             </div>
             <div class="modal-body">
-                <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
+                <p>单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
                 <!-- <p><a href="javascript: void(0);" class="btn btn-primary" id="file-modal-target">选择文件</a></p> -->
                 <input type="file" id="file-modal" multiple="multiple">
             </div>

+ 46 - 23
app/view/datacollect/index.ejs

@@ -93,27 +93,35 @@
                                 <div class="height-20 mb-2">
                                     <div class="card text-center bg-dark text-white ml-2 mr-2 py-2 height-100">
                                         <div class="card-body card-per-body">
-                                            <h5 class="card-title card-case-title data_total_change_price">0.00</h5>
-                                            <p class="card-text text-muted">累计变更金额</p>
+                                            <h5 class="card-title card-case-title data_total_checked_change_price">0.00</h5>
+                                            <p class="card-text text-muted">已批复变更金额</p>
                                         </div>
                                     </div>
                                 </div>
                                 <div class="height-20 mb-2">
                                     <div class="card text-center bg-dark text-white ml-2 mr-2 py-2 height-100">
                                         <div class="card-body card-per-body">
-                                            <h5 class="card-title card-case-title data_total_stage_price">0.00</h5>
-                                            <p class="card-text text-muted">累计完成金额</p>
+                                            <h5 class="card-title card-case-title data_total_after_change_price">0.00</h5>
+                                            <p class="card-text text-muted">变更后金额</p>
                                         </div>
                                     </div>
                                 </div>
-                                <div class="height-20">
-                                    <div class="card text-center bg-dark text-white ml-2 mr-2 height-100">
+                                <div class="height-20 mb-2">
+                                    <div class="card text-center bg-dark text-white ml-2 mr-2 py-2 height-100">
                                         <div class="card-body card-per-body">
-                                            <h5 class="card-title card-case-title data_total_material_price">0.00</h5>
-                                            <p class="card-text text-muted">材料调差</p>
+                                            <h5 class="card-title card-case-title data_total_stage_price">0.00</h5>
+                                            <p class="card-text text-muted">累计完成金额</p>
                                         </div>
                                     </div>
                                 </div>
+                                <!--<div class="height-20">-->
+                                    <!--<div class="card text-center bg-dark text-white ml-2 mr-2 height-100">-->
+                                        <!--<div class="card-body card-per-body">-->
+                                            <!--<h5 class="card-title card-case-title data_total_material_price">0.00</h5>-->
+                                            <!--<p class="card-text text-muted">材料调差</p>-->
+                                        <!--</div>-->
+                                    <!--</div>-->
+                                <!--</div>-->
                             </div>
                             <!--饼图-->
                             <div class="left-chart">
@@ -358,8 +366,8 @@
                                         <div class="col-4 pl-0">
                                             <div class="card text-center bg-dark text-white height-100">
                                                 <div class="card-body card-per-body">
-                                                    <h5 class="card-title card-case-title data_total_change_price">0.00</h5>
-                                                    <p class="card-text text-muted">累计变更金额</p>
+                                                    <h5 class="card-title card-case-title data_total_checked_change_price">0.00</h5>
+                                                    <p class="card-text text-muted">已批复变更金额</p>
                                                 </div>
                                             </div>
                                         </div>
@@ -397,27 +405,35 @@
                                         <div class="col-4 pl-0">
                                             <div class="card text-center bg-dark text-white mb-2 height-100">
                                                 <div class="card-body card-per-body">
-                                                    <h5 class="card-title card-case-title data_total_stage_price">0.00</h5>
-                                                    <p class="card-text card-case-text text-muted">累计完成金额</p>
+                                                    <h5 class="card-title card-case-title data_total_after_change_price">0.00</h5>
+                                                    <p class="card-text text-muted">变更后金额</p>
                                                 </div>
                                             </div>
                                         </div>
                                         <div class="col-4 pl-0">
                                             <div class="card text-center bg-dark text-white height-100">
                                                 <div class="card-body card-per-body">
-                                                    <h5 class="card-title card-case-title data_total_advance_price">0.00</h5>
-                                                    <p class="card-text card-case-text text-muted">预付款</p>
+                                                    <h5 class="card-title card-case-title data_total_stage_price">0.00</h5>
+                                                    <p class="card-text card-case-text text-muted">累计完成金额</p>
                                                 </div>
                                             </div>
                                         </div>
                                         <div class="col-4 pl-0">
                                             <div class="card text-center bg-dark text-white height-100">
                                                 <div class="card-body card-per-body">
-                                                    <h5 class="card-title card-case-title data_total_material_price">0.00</h5>
-                                                    <p class="card-text card-case-text text-muted">材料调差</p>
+                                                    <h5 class="card-title card-case-title data_total_advance_price">0.00</h5>
+                                                    <p class="card-text card-case-text text-muted">预付款</p>
                                                 </div>
                                             </div>
                                         </div>
+                                        <!--<div class="col-4 pl-0">-->
+                                            <!--<div class="card text-center bg-dark text-white height-100">-->
+                                                <!--<div class="card-body card-per-body">-->
+                                                    <!--<h5 class="card-title card-case-title data_total_material_price">0.00</h5>-->
+                                                    <!--<p class="card-text card-case-text text-muted">材料调差</p>-->
+                                                <!--</div>-->
+                                            <!--</div>-->
+                                        <!--</div>-->
                                     </div>
                                 </div>
                                 <div class="right-big-chart-content mr-3">
@@ -1331,10 +1347,12 @@
 
         function setData(tenderList, categoryIndex = 0) {
             let total_price = 0;
-            let total_change_price = 0;
+            // let total_change_price = 0;
+            let total_checked_change_price = 0;
+            let total_after_change_price = 0;
             let total_stage_price = 0;
             let total_advance_price = 0;
-            let total_material_price = 0;
+            // let total_material_price = 0;
             let month_stage_num = 0;
             let month_change_num = 0;
             let month_revise_num = 0;
@@ -1368,9 +1386,11 @@
             const chart_option4_data = [];
             for(const t of tenderList) {
                 total_price = ZhCalc.add(total_price, t.total_price);
-                total_change_price = ZhCalc.add(total_change_price, t.end_qc_tp);
+                // total_change_price = ZhCalc.add(total_change_price, t.end_qc_tp);
+                total_checked_change_price = ZhCalc.add(total_checked_change_price, t.change_tp);
+                total_after_change_price = ZhCalc.add(total_after_change_price, ZhCalc.add(t.total_price, t.change_tp));
                 total_stage_price = ZhCalc.add(total_stage_price, t.end_gather_tp);
-                total_material_price = ZhCalc.add(total_material_price, t.material_tp);
+                // total_material_price = ZhCalc.add(total_material_price, t.material_tp);
                 total_advance_price = ZhCalc.add(total_advance_price, t.advance_tp);
                 month_stage_num = ZhCalc.add(month_stage_num, t.month_stage_num);
                 month_change_num = ZhCalc.add(month_change_num, t.month_change_num);
@@ -1421,13 +1441,16 @@
             }
             // console.log(tenderList);
             $('.data_tender_num').text(tenderList.length);
-            const rate = total_price && total_change_price ? ZhCalc.round(ZhCalc.div(total_stage_price, ZhCalc.add(total_price, total_change_price)) * 100, 2) : 0;
+            // const rate = total_price && total_change_price ? ZhCalc.round(ZhCalc.div(total_stage_price, ZhCalc.add(total_price, total_change_price)) * 100, 2) : 0;
+            const rate = total_stage_price && total_after_change_price ? ZhCalc.round(ZhCalc.div(total_stage_price, total_after_change_price) * 100, 2) : 0;
             $('.data_tender_rate').text(rate ? rate + '%' : '0%');
             $('.data_total_price').text(formatMoney(total_price));
-            $('.data_total_change_price').text(formatMoney(total_change_price));
+            // $('.data_total_change_price').text(formatMoney(total_change_price));
+            $('.data_total_checked_change_price').text(formatMoney(total_checked_change_price));
+            $('.data_total_after_change_price').text(formatMoney(total_after_change_price));
             $('.data_total_stage_price').text(formatMoney(total_stage_price));
             $('.data_total_advance_price').text(formatMoney(total_advance_price));
-            $('.data_total_material_price').text(formatMoney(total_material_price));
+            // $('.data_total_material_price').text(formatMoney(total_material_price));
             $('.month_stage_num').text(month_stage_num);
             $('.month_change_num').text(month_change_num);
             $('.month_revise_num').text(month_revise_num);

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

@@ -373,7 +373,7 @@
             </div>
             <div class="modal-body">
                 <div class="form-group">
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-file" multiple>
                 </div>
             </div>

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

@@ -9,7 +9,7 @@
       </button>
         </div>
         <div class="modal-body">
-          <p>大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
+          <p>单个文件大小限制:30MB,支持office等文档格式、图片格式、压缩包格式</p>
                   <p>
                       <input id="upload-fujian-file" type="file" multiple="multiple">
                       <!-- <a href="javascript: void(0);" id="upload-fujian" class="btn btn-primary">选择文件</a> -->

+ 15 - 3
app/view/profile/sign.ejs

@@ -2,7 +2,7 @@
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main">
-            <h2>签字管理</h2>
+            <h2>签字/签章管理</h2>
         </div>
     </div>
     <div class="content-wrap">
@@ -11,7 +11,7 @@
                 <% if (ctx.session.sessionProject.page_show.openNetCaSign) { %>
                 <nav class="nav nav-tabs m-3" role="tablist">
                     <a class="nav-item nav-link" href="/profile/sign/netca">Ukey认证签名</a>
-                    <a class="nav-item nav-link active" href="/profile/sign">签字设置</a>
+                    <a class="nav-item nav-link active" href="/profile/sign">签字/签章设置</a>
                 </nav>
                 <% } %>
                 <div class="row m-0">
@@ -40,15 +40,26 @@
                             </div>
                             <button type="button" class="btn btn-danger btn-sm" id="delete-sign">移除签名</button>
                             <div class="form-group">
+                                <label for="stamp">上传签章</label>
+                                <input type="file" class="form-control-file" id="stamp-upload">
+                                <small class="form-text text-danger">图片大小为600x300,格式PNG透明背景。</small>
+                            </div>
+                            <button type="button" class="btn btn-sm btn-danger" id="delete-stamp">移除签章</button>
+                            <div class="form-group">
                                 <label>签名图预览</label>
                                 <div>
                                     <div class="position-relative">
                                         <img src="/public/images/baobiao3.png">
                                         <div class="position-absolute fixed-top" id="sign-show" style="left:290px;top:320px">
-                                            <% if (accountData.sign_path !== '') { %>
+                                            <% if (!accountData.sign_path) { %>
                                                 <img src="/public/upload/sign/<%= accountData.sign_path %>" width="90">
                                             <% } %>
                                         </div>
+                                        <div class="position-absolute fixed-top" id="stamp-show" style="left:300px;top:260px">
+                                            <% if (!accountData.stamp_path) { %>
+                                                <img src="<%- fujianOssPath + accountData.stamp_path %>" width="90">
+                                            <% } %>
+                                        </div>
                                     </div>
                                 </div>
                             </div>
@@ -61,5 +72,6 @@
 </div>
 <script type="text/javascript">
     const csrf = '<%= ctx.csrf %>';
+    const fujianOssPath = JSON.parse(unescape('<%- escape(JSON.stringify(fujianOssPath)) %>'));
 </script>
 <script type="text/javascript" src="/public/js/profile.js"></script>

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

@@ -342,7 +342,7 @@
 </div>
 <!--选择标段-->
 <div class="modal fade" id="gather-select" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
+    <div class="modal-dialog modal-lgx" role="document">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title" id="gather-select-title">选择标段</h5>
@@ -352,14 +352,14 @@
             </div>
             <div class="modal-body">
                 <div class="row">
-                    <div class="col-6">
+                    <div class="col-7">
                         <h5>可选标段 </h5>
-                        <div class="modal-height-300" id="gather-source-spread" style="height: 330px">
+                        <div class="modal-height-500" id="gather-source-spread">
                         </div>
                     </div>
-                    <div class="col-6">
+                    <div class="col-5">
                         <h5>已选标段 </h5>
-                        <div class="modal-height-300" id="gather-result-spread">
+                        <div class="modal-height-500" id="gather-result-spread">
                         </div>
                         <div class="mt-1" id="gather-by-month" style="width: 60%" name="gather-type">
                             <div class="input-group input-group-sm">

+ 20 - 0
app/view/report/stage_archive_modal.ejs

@@ -0,0 +1,20 @@
+<% if(ctx.session.sessionUser.is_admin) { %>
+<!--删除归档报表 因归档页面要引用这个界面,layout没法再多render一个ejs,只能在这加了-->
+<div class="modal fade" id="del-archive" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">删除归档报表</h5>
+            </div>
+            <div class="modal-body" id="disp_archive_info_body">
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-sm btn-danger" data-dismiss="modal" id="delete_file">确定删除</button>
+            </div>
+        </div>
+    </div>
+</div>
+<% } %>
+
+<% include ../stage/audit_modal.ejs %>

+ 0 - 18
app/view/stage/audit_modal.ejs

@@ -802,24 +802,6 @@
 <% } %>
 <% } %>
 
-<% if(ctx.session.sessionUser.is_admin) { %>
-  <!--删除归档报表 因归档页面要引用这个界面,layout没法再多render一个ejs,只能在这加了-->
-  <div class="modal fade" id="del-archive" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title">删除归档报表</h5>
-            </div>
-            <div class="modal-body" id="disp_archive_info_body">
-            </div>
-            <div class="modal-footer">
-              <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
-              <button type="button" class="btn btn-sm btn-danger" data-dismiss="modal" id="delete_file">确定删除</button>
-            </div>
-        </div>
-    </div>
-  </div>
-<% } %>
 
 <% include ../shares/check_data_modal.ejs %>
 <script type="text/javascript">

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

@@ -296,7 +296,7 @@
             </div>
             <div class="modal-body">
                 <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>
+                    <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-file">
                 </div>
                 <div class="modal-height-500">
@@ -315,4 +315,4 @@
             </div>
         </div>
     </div>
-</div>
+</div>

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

@@ -206,7 +206,7 @@
             </div>
             <div class="modal-body">
                 <div class="form-group">
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-file" multiple>
                 </div>
             </div>
@@ -601,7 +601,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <% if (!ctx.tender.isTourist || (ctx.tender.isTourist && ctx.tender.touristPermission.file) || stage.filePermission) { %>
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-im-file" multiple>
                     <% } %>
                 </div>

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

@@ -77,7 +77,7 @@
             <div class="modal-body">
                 <% if (uploadPermission) { %>
                 <div class="form-group">
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-file" multiple>
                 </div>
                 <% } %>

+ 1 - 1
app/view/stage_extra/bonus_modal.ejs

@@ -8,7 +8,7 @@
             <div class="modal-body">
                 <% if (ctx.stage.filePermission) { %>
                 <div class="form-group" id="upload-file-panel">
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-file" multiple>
                 </div>
                 <% } %>

+ 2 - 2
app/view/stage_rela/detail_modal.ejs

@@ -29,7 +29,7 @@
             <div class="modal-body">
                 <div class="form-group">
                     <% if (!ctx.tender.isTourist || (ctx.tender.isTourist && ctx.tender.touristPermission.file) || stage.filePermission) { %>
-                    <label for="formGroupExampleInput">大小限制:30MB,支持<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>
+                    <label for="formGroupExampleInput">单个文件大小限制:30MB,支持<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="" id="upload-im-file" multiple>
                     <% } %>
                 </div>
@@ -48,4 +48,4 @@
             </div>
         </div>
     </div>
-</div>
+</div>

+ 1 - 1
config/menu.js

@@ -339,7 +339,7 @@ const profileMenu = {
         url: '/profile/wechat',
     },
     sign: {
-        name: '签字管理',
+        name: '签字/签章管理',
         display: false,
         url: '/profile/sign',
     },

+ 1 - 1
config/web.js

@@ -779,7 +779,7 @@ const JsFiles = {
                 mergeFile: 'advance',
             },
             info: {
-                files: ['/public/js/decimal.min.js'],
+                files: ['/public/js/decimal.min.js', '/public/js/datepicker/datepicker.min.js', '/public/js/datepicker/datepicker.zh.js', '/public/js/moment/moment.min.js'],
                 mergeFiles: ['/public/js/zh_calc.js', '/public/js/advance_audit.js', '/public/js/sub_menu.js'],
                 mergeFile: 'advance_audit',
             },

+ 5 - 0
sql/update.sql

@@ -1,3 +1,8 @@
 ALTER TABLE `zh_material` ADD `is_new` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '是否是新建的调差,用于区分清单新建规则' AFTER `in_time`;
 
 ALTER TABLE `zh_change_plan` ADD `expr` TEXT NULL DEFAULT NULL COMMENT '工程量数量计算式' AFTER `memo`;
+
+ALTER TABLE `zh_project_account` ADD `stamp_path` VARCHAR(255) NULL DEFAULT NULL COMMENT '用户签章oss地址' AFTER `sign_path`;
+
+ALTER TABLE `zh_advance_pay` ADD `pay_time` DATETIME NULL DEFAULT NULL COMMENT '支付时间' AFTER `end_time`;
+UPDATE `zh_advance_pay` SET `pay_time`= `create_time`