浏览代码

Merge remote-tracking branch 'remotes/origin/dev' into uat

Conflicts:
	sql/update.sql
MaiXinRong 4 年之前
父节点
当前提交
4d223afb34

+ 1 - 0
app/controller/report_controller.js

@@ -76,6 +76,7 @@ module.exports = app => {
                 const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tender.id);
                 const usedList = await ctx.service.signatureUsed.getSignatureUsedByTenderId(tender.id);
 
+
                 // 分类列表
                 const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 // 获取用户权限

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

@@ -146,8 +146,8 @@ function bindCategoryValueControl() {
                 const delTr = $('tr[vid=' + delVid + ']');
                 delTr.addClass('table-danger');
                 $('input', delTr).attr('disabled', '');
-                delTr.children()[1].innerText = '移动到其他项';
-                $('tr[vid=' + tarVid + ']').children()[1].innerText = tarValue.relaTenders.length + tarValue.newTenders.length;
+                delTr.children()[2].innerText = '移动到其他项';
+                $('tr[vid=' + tarVid + ']').children()[2].innerText = tarValue.relaTenders.length + tarValue.newTenders.length;
                 $('#del-cate-value').modal('hide');
             });
             $('#del-cate-value').modal('show');

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

@@ -243,10 +243,9 @@ function getAllList(currPageNum = 1) {
     let html = '';
     // '/tender/' + tender.id + '/measure/stage/' + stage.order + '/download/file/' + att.id
     for(const [index,att] of currPageAttData.entries()) {
-        console.log(att.uid, accountId, auditStatus, Boolean(att.extra_upload));
         html += `<tr>
         <td width="25"><input type="checkbox" class="check-file" file-id=${att.id}></td>
-        <td>${index+1}</td>
+        <td>${((currPageNum-1)*15)+index+1}</td>
         <td><a href="javascript:void(0)" class="pl-0 col-11 att-file-name" file-id=${att.id}>${att.filename}${att.fileext}</a></td>
         <td>${moment(att.in_time * 1000).format('YYYY-MM-DD')}<br>${bytesToSize(att.filesize)}</td>
         <td>

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

@@ -17,9 +17,9 @@ $(document).ready(() => {
             {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: true},
             {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.unit_price', readOnly: true},
             {title: '原设计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'oamount', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.oamount', readOnly: true},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', getValue: 'getValue.oa_tp', readOnly: true},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.oa_tp', readOnly: true},
             {title: '申请变更增(+)减(-)|数量', colSpan: '2|1', rowSpan: '1|1', field: 'camount', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.camount', readOnly: true},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', getValue: 'getValue.ca_tp', readOnly: true},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.ca_tp', readOnly: true},
         ],
         emptyRows: 0,
         headRows: 2,
@@ -42,7 +42,7 @@ $(document).ready(() => {
             title: '|金额',
             colSpan: '|1', rowSpan: '|1',
             field: 'sa_tp',
-            hAlign: 2, width: 80, formatter: '@', type: 'Number',
+            hAlign: 2, width: 80, type: 'Number',
             readOnly: true
         };
         changeSpreadSetting.cols.push(newColcount);

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

@@ -69,9 +69,9 @@ $(document).ready(() => {
             {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: 'readOnly.isEdit', cellType: 'unit', comboItems: changeUnits},
             {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit', getValue: 'getValue.unit_price'},
             {title: '原设计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'oamount', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit', getValue: 'getValue.oamount'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', readOnly: true, getValue: 'getValue.oa_tp'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.oa_tp'},
             {title: '申请变更增(+)减(-)|数量', colSpan: '2|1', rowSpan: '1|1', field: 'camount', hAlign: 2, width: 60, type: 'Number', readOnly: false, getValue: 'getValue.camount'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', readOnly: true, getValue: 'getValue.ca_tp'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.ca_tp'},
             {title: '操作', colSpan: '1', rowSpan: '2', field: 'del_list', hAlign: 1, width: 40, readOnly: true, cellType: 'mouseTouch', getValue: 'getValue.del_list'},
         ],
         emptyRows: 0,

+ 4 - 4
app/public/js/change_information_show.js

@@ -17,11 +17,11 @@ $(document).ready(() => {
             {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@'},
             {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.unit_price'},
             {title: '原设计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'oamount', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.oamount'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', getValue: 'getValue.oa_tp'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.oa_tp'},
             {title: '申请变更增(+)减(-)|数量', colSpan: '2|1', rowSpan: '1|1', field: 'camount', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.camount'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', getValue: 'getValue.ca_tp'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'ca_tp', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.ca_tp'},
             {title: '审批后变更|数量', colSpan: '2|1', rowSpan: '1|1', field: 'samount', hAlign: 2, width: 60, type: 'Number', getValue: 'getValue.samount'},
-            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'sa_tp', hAlign: 2, width: 80, formatter: '@', type: 'Number', getValue: 'getValue.sa_tp'},
+            {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'sa_tp', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.sa_tp'},
         ],
         emptyRows: 0,
         headRows: 2,
@@ -43,7 +43,7 @@ $(document).ready(() => {
             title: '|金额',
             colSpan: '|1', rowSpan: '|1',
             field: 'sa_tp',
-            hAlign: 2, width: 80, formatter: '@', type: 'Number',
+            hAlign: 2, width: 80, type: 'Number',
         };
         changeSpreadSetting.cols.push(newColcount);
         changeSpreadSetting.cols.push(newColTp);

+ 3 - 1
app/public/js/revise.js

@@ -1307,10 +1307,12 @@ $(document).ready(() => {
             if (node) {
                 const posData = pos.getLedgerPos(node.id) || [];
                 SpreadJsObj.loadSheetData(posSheet, 'data', posData);
+                posSheet.zh_setting.readOnly = posData.length === 0 && node.used;
             } else {
                 SpreadJsObj.loadSheetData(posSheet, 'data', []);
+                posSheet.zh_setting.readOnly = true;
             }
-            SpreadJsObj.resetFieldReadOnly(posSheet);
+            SpreadJsObj.refreshSheetReadOnly(posSheet);
             posSpreadObj.loadExprToInput();
             posSpreadObj.refreshOperationValid(posSheet);
         },

+ 2 - 0
app/public/js/tender_copy_setting.js

@@ -95,7 +95,9 @@ function initTenderTree () {
     }
 }
 function recursiveGetTenderNodeHtml (node, arr, pid) {
+    // console.log(node, tender)
     if (node.id === tender.id) return ''
+    if (node.user_id && parseInt(node.user_id) !== cur_uid) return ''
     const html = [];
     html.push('<tr pid="' + pid + '">');
     // 名称

+ 47 - 0
app/public/report/js/rpt_custom.js

@@ -476,6 +476,53 @@ const rptCustomObj = (function () {
         }
     };
 
+    const initTenderTreeForCross = function (tenders, category, rstItems) {
+        //用户跨标段设置电子签名用
+        if (rstItems instanceof Array && rstItems.length === 0) {
+            //1. 先确定category方式(‘年份’、‘姓名’、‘类型’)及顺序
+            let ctArr = [];
+            for (let cat of category) {
+                if (cat.level) {
+                    ctArr.push(cat);
+                }
+            }
+            ctArr.sort(function (item1, item2) {
+                return parseInt(item1.level) - parseInt(item2.level);
+            }); //保证顺序
+            const _buildDeftNodes = function(startIdx, parentItem) {
+                if (ctArr.length > startIdx) {
+                    let item = {};
+                    if (parentItem instanceof Array) {
+                        parentItem.push(item);
+                    } else {
+                        parentItem.items.push(item);
+                    }
+                    for (let idx = 0; idx < ctArr[startIdx].value.length; idx++) {
+                        item.name = ctArr[startIdx].value[idx].value;
+                        item.id = ctArr[startIdx].value[idx].id;
+                        item.cid = ctArr[startIdx].value[idx].cid;
+                        item.pid = ctArr[startIdx].value[idx].pid;
+                        item.tenderId = -1;
+                        item.selected = false;
+                        item.isParent = true;
+                        item.items = [];
+                        _buildDeftNodes(startIdx + 1, item);
+                    }
+                }
+            };
+            // const _get
+            //2. 创建基本结构
+            _buildDeftNodes(0, rstItems);
+            //3. 挂上标段
+            for (let tender of tenders) {
+                let minAmt = Math.min(tender.category.length, ctArr.length);
+                for (let idx = 0; idx < minAmt; idx++) {
+                    //
+                }
+            }
+        }
+    };
+
     const initTenderTree = function (tenders, category) {
         const gsSpread = SpreadJsObj.createNewSpread($('#gather-source-spread')[0]);
         gsObj.gsSheet = gsSpread.getActiveSheet();

+ 3 - 2
app/public/report/js/rpt_signature.js

@@ -187,8 +187,9 @@ let rptSignatureHelper = {
             }
         }
     },
-    resetESignature: function (pageRst) {
-        let body = $('#eSignatureBodyDiv');
+    resetESignature: function (pageRst, signatureDivId) {
+        // let body = $('#eSignatureBodyDiv');
+        let body = $('#' + signatureDivId);
         body.empty();
         const signature_cells = [];
         const singatureNameArr = [];

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

@@ -39,7 +39,7 @@
                             <% for (const s in smsType) { %>
                             <% if (smsType[s].wechat) { %>
                             <div class="form-group row">
-                                <label class="col-auto col-form-label"><%= smsType[s].name %>
+                                <label class="col-2 col-form-label"><%= smsType[s].name %>
                                     <!--<a href="#sms-view" data-toggle="modal" data-target="#sms-view" class="ml-2"><i class="fa fa-info-circle"></i></a>-->
                                 </label>
                                 <div class="col-3">

+ 4 - 3
app/view/report/index.ejs

@@ -114,7 +114,7 @@
                             </div>
                             <div class="panel" id="pnl_eSignature">
                                 <div class="panel-body">
-                                    <button class="btn btn-outline-primary btn-sm" type="button" data-toggle="modal" data-target="#eSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst)">
+                                    <button class="btn btn-outline-primary btn-sm" type="button" data-toggle="modal" data-target="#eSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'eSignatureBodyDiv')">
                                         <i class="fa fa-pencil"></i><br>
                                         电子签名
                                     </button>
@@ -226,12 +226,13 @@
     });
 </script>
 <script>
-    const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenderList)) %>'));
-    const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
+    const tenders = JSON.parse('<%- JSON.stringify(tenderList) %>');
+    const category = JSON.parse('<%- JSON.stringify(categoryData) %>');
     const auditConst = JSON.parse('<%- JSON.stringify(auditConst) %>');
     const ledgerAuditConst = JSON.parse('<%- JSON.stringify(ledgerAuditConst) %>');
     $(document).ready(() => {
         rptCustomObj.initTenderTree(tenders, category);
+        // rptCustomObj.initTenderTreeForCross(tenders, category);
     });
 </script>
 

+ 33 - 0
app/view/report/rpt_all_popup.ejs

@@ -203,12 +203,41 @@
             <div class="modal-body" id="eSignatureBodyDiv">
             </div>
             <div class="modal-footer">
+                <!--
+                <button type="button" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupProjSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv')">批量设置其他标段</button>
+
+                <button type="button" class="btn btn-sm btn-link float-left" data-toggle="modal" data-target="#batch-eSignature" id="hidden_show_batch_eSignature" style="display:none"></button>
+                <button type="button" class="btn btn-sm btn-link float-left" data-dismiss="modal" onclick="setTimeout(function(){$('#hidden_show_batch_eSignature').trigger('click');}, 50);">批量设置其他标段</button>
+                -->
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptSignatureHelper.removeSelectSignature()">取消</button>
                 <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectSignature()" class="btn btn-primary btn-sm" data-dismiss="modal">确定</a>
             </div>
         </div>
     </div>
 </div>
+<div class="modal fade" id="batch-eSignature" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">批量设置电子签名</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="row">
+                    <div class="col-6" id="batch-ProjectsBodyDiv"></div>
+                    <div class="col-6" id="batch-eSignatureBodyDiv"></div>
+                </div>
+                <div class="alert alert-warning">批量操作会覆盖已设置好的电子签名,请谨慎操作。</div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
+                <a href="" class="btn btn-sm btn-primary">确定</a>
+            </div>
+        </div>
+    </div>
+</div>
 <!--弹出添加签名人-->
 <div class="modal fade" id="add-sign" data-backdrop="static">
     <div class="modal-dialog modal-sm" role="document">
@@ -431,6 +460,10 @@
     buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');
     buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');
 
+    function buildTendersTree() {
+        //
+    }
+
     function searchAccount() {
         if (event.keyCode == 13) {
             rptSignatureHelper.buildSelectableAccount(this);

+ 1 - 1
app/view/shares/import_excel_modal.ejs

@@ -20,7 +20,7 @@
             <div class="modal-footer d-flex justify-content-between">
                 <div>
                     <div class="custom-control custom-checkbox custom-control-inline" id="filter-excel">
-                        <input type="radio" class="custom-control-input" name="customRadioInline1" id="filter-qty-price" checked="">
+                        <input type="checkbox" class="custom-control-input" name="customRadioInline1" id="filter-qty-price" checked="">
                         <label class="custom-control-label" for="filter-qty-price">过滤清单数量和单价为0项</label>
                     </div>
                 </div>

+ 1 - 0
app/view/tender/detail.ejs

@@ -152,6 +152,7 @@
     const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenders)) %>'));
     const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
     const tender = JSON.parse('<%- JSON.stringify(tender) %>');
+    const cur_uid = parseInt('<%- ctx.session.sessionUser.accountId %>');
     //4 标段期数计量进度//
     var myChart = echarts.init(document.getElementById('chartContainer4'));
     var option = {

+ 2 - 0
sql/update.sql

@@ -64,4 +64,5 @@ ADD COLUMN `push_tender`  varchar(1000) CHARACTER SET ascii NOT NULL DEFAULT ''
 ALTER TABLE `zh_s2b_proj`
 ADD COLUMN `filter_tender`  varchar(1000) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT '过滤标段' AFTER `merge_code`;
 
+ALTER TABLE `zh_category_value` ADD `sort` int(11) DEFAULT NULL COMMENT '排序' AFTER `value`;
+UPDATE `zh_category_value` SET `sort`=`id`;