Przeglądaj źródła

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

MaiXinRong 2 lat temu
rodzic
commit
0d132014e6

+ 20 - 2
app/controller/payment_controller.js

@@ -192,9 +192,9 @@ module.exports = app => {
                             await ctx.service.paymentTender.update(updateData, conditionData);
                         } else {
                             const folderInfo = await ctx.service.paymentFolder.getDataById(conditionData.id);
-                            if (!folderInfo) throw '目录不存在';
+                            if (!folderInfo) throw '文件夹不存在';
                             if (folderInfo.uid !== ctx.session.sessionUser.accountId && !ctx.session.sessionUser.is_admin) {
-                                throw '您没有权限重命名此目录';
+                                throw '您没有权限重命名此文件夹';
                             }
                             await ctx.service.paymentFolder.update(updateData, conditionData);
                         }
@@ -384,12 +384,29 @@ module.exports = app => {
                 const rptAudit = await ctx.service.paymentRptAudit.getDataByCondition({ td_id: ctx.detail.id, uid: ctx.session.sessionUser.accountId });
                 if (report_json.items[0].interact_cells.length > 0) {
                     for (const [i, cell] of report_json.items[0].interact_cells.entries()) {
+                        cell.index = i;
+                    }
+                    const numberList = ctx.helper._.filter(report_json.items[0].interact_cells, { DataType: 'intact_type_number' });
+                    for (const [i, cell] of report_json.items[0].interact_cells.entries()) {
+                        if (cell.Label === '大写') {
+                            if (cell.link === undefined) {
+                                if (numberList.length > 0) {
+                                    const numberInfo = ctx.helper._.find(ctx.helper._.orderBy(numberList, ['index'], ['desc']), function(item) {
+                                        return item.index < i;
+                                    });
+                                    cell.link = numberInfo ? numberInfo.index : '';
+                                } else {
+                                    cell.link = '';
+                                }
+                            }
+                        }
                         const push_item = {
                             type: paymentConst.rpt_dataType[cell.DataType],
                             value: cell.Prefix ? ctx.helper._.replace(cell.Value, cell.Prefix, '') : cell.Value,
                             label: cell.Label,
                             index: i,
                         };
+                        if (cell.link !== undefined) push_item.link = cell.link;
                         const thisBandName = paymentConst.rpt_band_name[cell.BandName] ? cell.BandName : 'content';
                         const oneShowContent = ctx.helper._.find(content, { BandName: thisBandName });
                         if (oneShowContent) {
@@ -402,6 +419,7 @@ module.exports = app => {
                             });
                         }
                     }
+                    renderData.numberList = numberList;
                     if (rptAudit && ((ctx.detail.status !== auditConst.status.checkNo && ctx.detail.status !== auditConst.status.checked) ||
                         (ctx.detail.status === auditConst.status.checked && !renderData.nextDetail) ||
                         (ctx.detail.status === auditConst.status.checkNo && ctx.detail.uid === ctx.session.sessionUser.accountId))) {

+ 101 - 2
app/public/js/payment_detail.js

@@ -28,7 +28,7 @@ $(function () {
     //初始化所有附件列表
     getAllList();
 
-    $('#rpt-form input').on('change', function () {
+    $('#rpt-form input[type!="radio"]').on('change', function () {
        let newVal = $(this).val();
        const index = parseInt($(this).data('index'));
        const type = $(this).attr('type');
@@ -44,10 +44,61 @@ $(function () {
                newVal = ZhCalc.round(val, 6);
                $(this).val(newVal);
            }
+           // find link(大写转换)
+           const linkList = _.filter(tesRpttData.items[0].interact_cells, { link: index });
+           if (linkList.length > 0) {
+               const chineseNum = numberToChinese(newVal);
+               // 赋值到input框并展示在报表里
+               for (const cell of linkList) {
+                   $('#rpt-form input[data-index="'+ cell.index +'"]').val(chineseNum);
+                   tesRpttData.items[0].interact_cells[cell.index].Value =
+                       tesRpttData.items[0].interact_cells[cell.index].Prefix ? tesRpttData.items[0].interact_cells[cell.index].Prefix + chineseNum : chineseNum;
+               }
+           }
        }
+
        checkAndUpdate(index, newVal, $(this));
     });
 
+    $(".link-dropdown").on("click",function (e) {
+        e.stopPropagation();
+    });
+
+    $('.change-link').on('click', function () {
+        const link = $(this).parents('.link-dropdown').find('input:checked').val();
+        const index = parseInt($(this).attr('item-index'));
+        const old_link = $(this).attr('old-link');
+        if (old_link !== link) {
+            let showTips = '';
+            if (link !== '') {
+                const numberInfo = _.find(tesRpttData.items[0].interact_cells, { index: parseInt(link) });
+                if (numberInfo) showTips = '关联数据:' + numberInfo.Label;
+            }
+            $(this).parents('.link-dropdown').siblings('.show-link').html(showTips);
+            $(this).attr('old-link', link);
+            const info = link !== '' ? tesRpttData.items[0].interact_cells[link] : null;
+            const linkValue = removePreFix(info.Prefix, info.Value);
+            const chineseNum = linkValue ? numberToChinese(linkValue) : '';
+            tesRpttData.items[0].interact_cells[index].link = link !== '' ? parseInt(link) : '';
+            tesRpttData.items[0].interact_cells[index].Value = tesRpttData.items[0].interact_cells[index].Prefix ? tesRpttData.items[0].interact_cells[index].Prefix + chineseNum : chineseNum;
+            postData('/payment/' + tenderId + '/detail/' + detailId + '/save', { type: 'update_rpt', report_json: tesRpttData }, function (result) {
+                $('#rpt-form input[data-index="'+ index +'"]').val(chineseNum);
+                auditRptPrintHelper.showPage();
+            });
+        }
+    });
+
+    function removePreFix(prefix, value) {
+       const result = prefix ? _.replace(value, prefix, '') : value;
+       return result ? parseFloat(result) : '';
+    }
+
+    $('.show-link-dropdown').on('show.bs.dropdown', function () {
+        const link = $(this).find('button').attr('old-link');
+        const index = $(this).find('button').attr('item-index');
+        $('input:radio[name="radio_'+ index +'"][value="'+ link + '"]').prop('checked', true);
+    });
+
     $('#rpt-form textarea').on('change', function () {
         const newVal = $(this).val();
         const index = parseInt($(this).data('index'));
@@ -143,7 +194,6 @@ $(function () {
         if (tesRpttData.items[0].interact_cells[index].DataType === 'intact_type_number' && _.indexOf(tesRpttData.items[0].interact_cells[index].Value, '元') !== -1) {
             newVal = newVal + '元';
         }
-        console.log(index, newVal);
         clearTimeout(timer);
         timer = setTimeout(() => {
             tesRpttData.items[0].interact_cells[index].Value = tesRpttData.items[0].interact_cells[index].Prefix ? tesRpttData.items[0].interact_cells[index].Prefix + newVal : newVal;
@@ -355,3 +405,52 @@ function bytesToSize(bytes) {
     // return (bytes / Math.pow(k, i)) + ' ' + sizes[i];
     return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
 }
+// 大写转换
+// 向右移位
+function shiftRight(number, digit) {
+    digit = parseInt(digit, 10);
+    var value = number.toString().split('e');
+    return +(value[0] + 'e' + (value[1] ? +value[1] + digit : digit));
+}
+// 向左移位
+function shiftLeft(number, digit) {
+    digit = parseInt(digit, 10);
+    var value = number.toString().split('e');
+    return +(value[0] + 'e' + (value[1] ? +value[1] - digit : -digit));
+}
+
+var numberToChinese = function (n) {
+    var fraction = ['角', '分'];
+    var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
+    var unit = [
+        ['元', '万', '亿'],
+        ['', '拾', '佰', '仟'],
+    ];
+    var head = n < 0 ? '负' : '';
+    n = Math.abs(n);
+    var s = '';
+    for (var i = 0; i < fraction.length; i++) {
+        s += (digit[Math.floor(shiftRight(n, 1 + i)) % 10] + fraction[i]).replace(
+            /零./,
+            ''
+        );
+    }
+    s = s || '';
+    n = Math.floor(n);
+    for (var i = 0; i < unit[0].length && n > 0; i++) {
+        var p = '';
+        for (var j = 0; j < unit[1].length && n > 0; j++) {
+            p = digit[n % 10] + unit[1][j] + p;
+            n = Math.floor(shiftLeft(n, 1));
+        }
+        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
+    }
+    return (
+        head +
+        s
+            .replace(/(零.)*零元/, '元')
+            .replace(/(零.)+/g, '零')
+            // .replace(/^整$/, '零元整')
+    );
+};
+

+ 12 - 12
app/public/js/payment_index.js

@@ -2,7 +2,7 @@ $(function () {
     autoFlashHeight();
     const EmptyTenderHtml = [
         '<div class="jumbotron">',
-        '<h3 class="display-6">还没有标段及目录数据</h3>',
+        '<h3 class="display-6">还没有标段及文件夹数据</h3>',
         '</div>'
     ];
 
@@ -88,7 +88,7 @@ $(function () {
                 html.push('<div class="dropdown-divider"></div>\n');
             }
             if (auditPermission.admin && node.parent_id !== undefined && !node.is_tender) {
-                html.push('<a class="dropdown-item show_new_folder_btn" href="#add-folder" data-toggle="modal" data-target="#add-folder" data-parentName="'+ node.name +'" data-parentId="'+ node.id +'"><i class="fa fa-folder-o mr-2"></i>新建子目录</a>\n');
+                html.push('<a class="dropdown-item show_new_folder_btn" href="#add-folder" data-toggle="modal" data-target="#add-folder" data-parentName="'+ node.name +'" data-parentId="'+ node.id +'"><i class="fa fa-folder-o mr-2"></i>新建子文件夹</a>\n');
             }
             if (auditPermission.admin && node.is_leaf) {
                 html.push('<a class="dropdown-item show_new_tender_btn" href="javascript:void(0);"><i class="fa fa-folder-o mr-2"></i>新建标段</a>\n');
@@ -147,14 +147,14 @@ $(function () {
         if (parseInt($(this).attr('data-parentId')) === 0) {
             $('#parent_folder').hide();
             $('#parent_folder_name').val('');
-            $('#add-folder').find('.modal-title').text('新建目录');
-            $('#new_folder_name').siblings('label').text('目录名称');
+            $('#add-folder').find('.modal-title').text('新建文件夹');
+            $('#new_folder_name').siblings('label').text('文件夹名称');
             $('#parent_id').val(0);
         } else {
             $('#parent_folder').show();
             $('#parent_folder_name').val($(this).attr('data-parentName'));
-            $('#add-folder').find('.modal-title').text('新建子目录');
-            $('#new_folder_name').siblings('label').text('子目录名称');
+            $('#add-folder').find('.modal-title').text('新建子文件夹');
+            $('#new_folder_name').siblings('label').text('子文件夹名称');
             $('#parent_id').val($(this).attr('data-parentId'));
         }
     });
@@ -194,11 +194,11 @@ $(function () {
         const id = parseInt($(this).attr('data-id'));
         const info = type === 'tender' ? _.find(allTenders, { id }) : _.find(allFolders, { id });
         if (!info) {
-            toastr.error('目录或标段不存在');
+            toastr.error('文件夹或标段不存在');
             return;
         }
         $('#edit_name_input').val(info.name);
-        $('#edit-name').find('.modal-title').text(type === 'tender' ? '修改标段' : '修改目录');
+        $('#edit-name').find('.modal-title').text(type === 'tender' ? '修改标段' : '修改文件夹');
         $('#edit_name_id').val(info.id);
         $('#edit_name_type').val(type);
         $('#edit-name').modal('show');
@@ -242,12 +242,12 @@ $(function () {
     $('body').on('click', '.show_new_tender_btn', function () {
         const fid = $('.c-body table').find('.table-warning').attr('fid');
         if (!fid) {
-            toastr.error('请选中目录');
+            toastr.error('请选中文件夹');
             return;
         }
         const folderInfo = _.find(allFolders, { id: parseInt(fid) });
         if (!folderInfo || folderInfo.is_leaf === 0) {
-            toastr.error('目录不存在或存在子目录不能新建标段');
+            toastr.error('文件夹不存在或存在子文件夹不能新建标段');
             return;
         }
         $('#add-tender').modal('show');
@@ -271,11 +271,11 @@ $(function () {
         const id = parseInt($(this).attr('data-id'));
         const info = type === 'tender' ? _.find(allTenders, { id }) : _.find(allFolders, { id });
         if (!info) {
-            toastr.error('目录或标段不存在');
+            toastr.error('文件夹或标段不存在');
             return;
         }
         $('#edit_name_input').val(info.name);
-        $('#del-project').find('.modal-title').text(type === 'tender' ? '删除标段' : '删除目录');
+        $('#del-project').find('.modal-title').text(type === 'tender' ? '删除标段' : '删除文件夹');
         $('#del-project').find('h6 span').text(info.name);
         $('#del_id').val(info.id);
         $('#del_type').val(type);

+ 14 - 12
app/public/report/js/rpt_jspdf.js

@@ -32,11 +32,11 @@ const JpcJsPDFHelper = {
         //
         // doc.save('Test.pdf');
     },
-    outputAsPdf: function (pageData, paperSize, pdfName, signatureRelArr, signAuditArr) {
-        let doc = this._createPdf(pageData, paperSize, signatureRelArr, signAuditArr);
+    outputAsPdf: function (pageData, paperSize, pdfName, signatureRelArr, signAuditArr, keepOrgValue = false) {
+        let doc = this._createPdf(pageData, paperSize, signatureRelArr, signAuditArr, keepOrgValue);
         doc.save(pdfName + '.pdf');
     },
-    _createPdf: function (pageData, paperSize, signatureRelArr, signAuditArr) {
+    _createPdf: function (pageData, paperSize, signatureRelArr, signAuditArr, keepOrgValue = false) {
         let me = this;
         let offsetX = 0;
         let offsetY = 0;
@@ -72,14 +72,16 @@ const JpcJsPDFHelper = {
 
         let newPageMergeBand = private_getIniPageMergeBorder(pageObj[JV.BAND_PROP_MERGE_BAND]);
         let ppStatus = zTreeOprObj._chkPrePayStatus();
-        if (current_stage_status === 3 || ppStatus === 3) {
-            rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false);
-            // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr); // 这里merge的意义不大
-            rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr);
-        } else {
-            rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false, true);
-            // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
-            rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr, true);
+        if (!keepOrgValue) {
+            if (current_stage_status === 3 || ppStatus === 3) {
+                rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false);
+                // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr); // 这里merge的意义不大
+                rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr);
+            } else {
+                rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false, true);
+                // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
+                rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr, true);
+            }
         }
         // let signatureCounter = {"allAmt": 0, "picAmt": 0};
         if (pageObj && pageObj.items.length > 0 ) {
@@ -387,7 +389,7 @@ const JpcJsPDFHelper = {
                         values[i] = "";
                     }
                     // 因pdfkit输出空格只有浏览器的一半宽度,需要额外加空格补上,jspdf也有这个情况 -----------------------------
-                    if (typeof(values[i]) === "string") {
+                    if (!keepOrgValue && typeof(values[i]) === "string") {
                         for (let j = 0; j < values[i].length; j++) {
                             if (values[i][j] === ' ') spaceIdxArr.push(j);
                         }

+ 4 - 11
app/public/report/js/rpt_signature.js

@@ -561,17 +561,10 @@ let rptSignatureHelper = {
                     // CURRENT_ROLE_REL_ID = result.signatureRelInfo[0].id;
                     ROLE_REL_LIST = me._parseRoleRelList(result.signatureRelInfo[0].rel_content);
                     rptSignatureHelper.originalRoleRelList = me._parseRoleRelList(result.signatureRelInfo[0].rel_content);
-                    if (current_stage_status === 3) {
-                        rptSignatureHelper.mergeSignDate(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true);
-                        rptSignatureHelper.mergeSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true);
-                        await rptSignatureHelper.resetDummySignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST); // 这里重新整理签章坐标信息(因签章大小在后台暂时获取不到,挪到前端处理)
-                        rptSignatureHelper.mergeSignAudit(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, STAGE_AUDIT);
-                    } else {
-                        rptSignatureHelper.mergeSignDate(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, true);
-                        rptSignatureHelper.mergeSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, true);
-                        await rptSignatureHelper.resetDummySignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true); // 这里重新整理签章坐标信息(因签章大小在后台暂时获取不到,挪到前端处理)
-                        rptSignatureHelper.mergeSignAudit(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, STAGE_AUDIT, true);
-                    }
+                    rptSignatureHelper.mergeSignDate(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, current_stage_status !== 3);
+                    rptSignatureHelper.mergeSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, current_stage_status !== 3);
+                    await rptSignatureHelper.resetDummySignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, current_stage_status !== 3); // 这里重新整理签章坐标信息(因签章大小在后台暂时获取不到,挪到前端处理)
+                    rptSignatureHelper.mergeSignAudit(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, STAGE_AUDIT, current_stage_status !== 3);
                     zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
                 } else {
                     // CURRENT_ROLE_REL_ID = -1;

+ 4 - 4
app/service/payment_folder.js

@@ -21,13 +21,13 @@ module.exports = app => {
             try {
                 const tenderCount = await this.ctx.service.paymentTender.count({ folder_id: parentId });
                 if (tenderCount > 0) {
-                    throw '目录下存在标段无法创建子目录';
+                    throw '文件夹下存在标段无法创建子文件夹';
                 }
                 let level = 1;
                 let parent_path = '';
                 if (parentId !== 0) {
                     const parentFolderInfo = await this.getDataById(parentId);
-                    if (!parentFolderInfo) throw '父目录不存在';
+                    if (!parentFolderInfo) throw '父文件夹不存在';
                     level = parentFolderInfo.level + level;
                     if (parentFolderInfo.is_leaf) {
                         await transaction.update(this.tableName, { id: parentFolderInfo.id, is_leaf: 0 });
@@ -61,7 +61,7 @@ module.exports = app => {
             try {
                 const info = await this.getDataById(id);
                 if (info.uid !== this.ctx.session.sessionUser.accountId && !this.ctx.session.sessionUser.is_admin) {
-                    throw '您没有权限删除此目录';
+                    throw '您没有权限删除此文件夹';
                 }
                 let ids = [info.id];
                 if (info.parent_id === 0) {
@@ -86,7 +86,7 @@ module.exports = app => {
                 // 判断是否存在标段,有则无法删除目录
                 const tenderCount = await this.ctx.service.paymentTender.count({ folder_id: ids });
                 if (tenderCount > 0) {
-                    throw '目录下存在标段,无法删除';
+                    throw '文件夹下存在标段,无法删除';
                 }
                 await transaction.delete(this.tableName, { id: ids });
                 await transaction.commit();

+ 2 - 2
app/service/payment_tender.js

@@ -55,7 +55,7 @@ module.exports = app => {
             try {
                 const folderInfo = await this.ctx.service.paymentFolder.getDataById(folderId);
                 if (!folderInfo || folderInfo.is_leaf === 0) {
-                    throw '目录不存在或存在子目录不能新建标段';
+                    throw '文件夹不存在或存在子目录不能新建标段';
                 }
                 const insertData = {
                     pid: projectId,
@@ -104,7 +104,7 @@ module.exports = app => {
                 }
                 const folderInfo = await this.ctx.service.paymentFolder.getDataById(tenderInfo.folder_id);
                 if (!folderInfo) {
-                    throw '目录不存在';
+                    throw '文件夹不存在';
                 }
                 // 判断folderInfo下是否还存在tender,不存在则把had_tender为0,并判断父节点是否需要也为0
                 const leafTenderCount = await transaction.count(this.tableName, { folder_id: folderInfo.id });

+ 36 - 2
app/view/payment/detail.ejs

@@ -61,7 +61,41 @@
                                         <h5><%- c.title %>内容</h5>
                                         <% for (const item of c.items) { %>
                                         <div class="form-group">
-                                            <label><%- item.label %></label>
+                                            <label class="d-flex"><%- item.label %>
+                                                <% if (item.link !== undefined) { %>
+                                                    <div class="dropdown dropup mx-2 show-link-dropdown">
+                                                        <% if (ctx.detail.uid === ctx.session.sessionUser.accountId &&
+                                                                (ctx.detail.status === auditConst.status.uncheck || ctx.detail.status === auditConst.status.checkNo)) { %>
+                                                            <a href="javascript:void(0)" data-toggle="dropdown" title="关联数据" data-target="#link-data1"><i class="fa fa-paperclip"></i></a>
+                                                        <% } %>
+                                                        <span class="show-link"><% if (item.link !== '') { %>关联数据:<%= ctx.helper._.find(numberList, { index: item.link }) ? ctx.helper._.find(numberList, { index: item.link }).Label : '' %><% } %></span>
+                                                        <% if (ctx.detail.uid === ctx.session.sessionUser.accountId &&
+                                                                (ctx.detail.status === auditConst.status.uncheck || ctx.detail.status === auditConst.status.checkNo)) { %>
+                                                            <div class="link-dropdown dropdown-menu pb-1" aria-labelledby="dropdownMenuButton">
+                                                                <div class="px-3">
+                                                                    <% if (numberList.length > 0) { %>
+                                                                        <% for (const numberInfo of numberList) { %>
+                                                                            <div class="form-check py-1">
+                                                                                <input class="form form-check-input" type="radio" id="item_<%- item.index %>_number_<%- numberInfo.index %>"
+                                                                                       value="<%- numberInfo.index %>" name="radio_<%- item.index %>" <% if (item.link === numberInfo.index) { %>checked<% } %> />
+                                                                                <label class="form-check-label" for="item_<%- item.index %>_number_<%- numberInfo.index %>"><%- numberInfo.Label %></label>
+                                                                            </div>
+                                                                        <% } %>
+                                                                    <% } %>
+                                                                    <div class="form-check py-1">
+                                                                        <input class="form form-check-input" type="radio" id="item_<%- item.index %>_number_" value="" <% if (item.link === '') { %>checked<% } %> name="radio_<%- item.index %>" />
+                                                                        <label class="form-check-label" for="item_<%- item.index %>_number_">无</label>
+                                                                    </div>
+                                                                    <hr class="m-1">
+                                                                    <div class="float-right">
+                                                                        <button type="button" item-index="<%- item.index %>" old-link="<%- item.link %>" class="btn btn-sm btn-primary change-link">确定</button>
+                                                                    </div>
+                                                                </div>
+                                                            </div>
+                                                        <% } %>
+                                                    </div>
+                                                <% } %>
+                                            </label>
                                             <% if (item.type === 'textarea') { %>
                                                 <textarea <% if (ctx.detail.readOnly) { %>readonly<% } %> class="form-control form-control-sm" data-index="<%- item.index %>"><%- item.value %></textarea>
                                             <% } else { %>
@@ -361,7 +395,7 @@
                 let pageData = newPageDataArr[auditRptPrintHelper.currentDownloadIdx];
                 let rptName = new_rpt_names[auditRptPrintHelper.currentDownloadIdx];
                 auditRptPrintHelper.currentDownloadIdx++;
-                JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT); // 精确控制签名
+                JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT, true); // 精确控制签名
                 if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) {
                     setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);
                 } else {

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

@@ -5,7 +5,7 @@
             <div>
                 <% if (auditPermission.admin) { %>
                 <a href="javascript:void(0);" style="display: none" id="show_new_tender_btn" class="btn btn-sm btn-primary pull-right show_new_tender_btn">新建标段</a>
-                <a href="#add-folder" data-toggle="modal" data-target="#add-folder" data-parentId="0" class="btn btn-sm btn-primary pull-right mr-2 show_new_folder_btn">新建目录</a>
+                <a href="#add-folder" data-toggle="modal" data-target="#add-folder" data-parentId="0" class="btn btn-sm btn-primary pull-right mr-2 show_new_folder_btn">新建文件夹</a>
                 <% } %>
                 <% if (ctx.session.sessionUser.is_admin) { %>
                 <a href="#authority-list" data-toggle="modal" data-target="#authority-list" class="btn btn-sm btn-outline-secondary pull-right mr-2">权限管理</a>

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

@@ -4,16 +4,16 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">新建目录</h5>
+                <h5 class="modal-title">新建文件夹</h5>
             </div>
             <div class="modal-body">
                 <div class="form-group" id="parent_folder" style="display: none">
-                    <label for="parent_folder_name">父目录名称</label>
+                    <label for="parent_folder_name">父文件夹名称</label>
                     <input type="text" class="form-control form-control-sm" id="parent_folder_name" readonly>
                 </div>
                 <div class="form-group">
-                    <label for="new_folder_name">目录名称</label>
-                    <input type="text" class="form-control form-control-sm" id="new_folder_name" placeholder="请输入目录名称" required>
+                    <label for="new_folder_name">文件夹名称</label>
+                    <input type="text" class="form-control form-control-sm" id="new_folder_name" placeholder="请输入文件夹名称" required>
                     <div class="invalid-feedback">
                         <!--名称超过100个字,请缩减名称-->
                     </div>
@@ -31,7 +31,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">修改目录</h5>
+                <h5 class="modal-title">修改文件夹</h5>
             </div>
             <div class="modal-body">
                 <form>
@@ -62,7 +62,7 @@
             </div>
             <div class="modal-body">
                 <div class="form-group">
-                    <label for="add_tender_folder_name">目录名称</label>
+                    <label for="add_tender_folder_name">文件夹名称</label>
                     <input type="text" class="form-control form-control-sm" id="add_tender_folder_name" readonly>
                 </div>
                 <div class="form-group">

+ 11 - 12
sql/update.sql

@@ -10,19 +10,18 @@ ADD COLUMN `show_revise_invalid`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT
 
 ALTER TABLE `zh_project` ADD `payment_setting` JSON NULL DEFAULT NULL COMMENT '支付审批模块设置' AFTER `fun_set`;
 
-CREATE TABLE `zh_payment_attachment`  (
-  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-  `tid` int(11) UNSIGNED NOT NULL COMMENT '标段id',
-  `sid` int(11) UNSIGNED NOT NULL COMMENT '期id',
-  `pid` int(11) NOT NULL COMMENT '合同支付id',
-  `uid` int(11) UNSIGNED NOT NULL COMMENT '用户id',
-  `filename` varchar(255) CHARACTER SET utf16 COLLATE utf16_general_ci NOT NULL COMMENT '文件名',
+CREATE TABLE `zh_payment_detail_attachment`  (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tender_id` int(11) NOT NULL COMMENT '标段id',
+  `tr_id` int(11) NOT NULL COMMENT '表单id',
+  `td_id` int(11) NOT NULL COMMENT '详情id',
+  `uid` int(11) NOT NULL COMMENT '上传者id',
+  `filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件名称',
   `fileext` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件后缀',
-  `filesize` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件大小',
-  `filepath` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件存储路径',
-  `in_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
-  `renew` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否审批通过后上传',
-  `username` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '用户名',
+  `filesize` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件大小',
+  `filepath` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文件存储路径',
+  `upload_time` datetime NOT NULL COMMENT '上传时间',
+  `extra_upload` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否为审核通过后再次上传的文件,0为否',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '支付审批详情附件表';