Tony Kang 5 days ago
parent
commit
0f0e76d2db

+ 4 - 1
app/controller/report_controller.js

@@ -462,12 +462,14 @@ module.exports = app => {
                     stg_id: -1,
                     stages: [],
                     materialList: [],
+                    tender_id: tender.id,
                     // authMobile: accountInfo.auth_mobile,
                     // auditConst: auditConst.stage,
                     // auditType: auditConst.auditType,
                     // preUrl: '',
                     // otherHintName: '',
                     accountGroup: companyGrpNameObj,
+                    accountList: JSON.stringify(companyGrpNameObj),
                 };
                 await this.layout('report/rpt_format_setup.ejs', renderData, 'report/rpt_format_popup.ejs');
             } catch (err) {
@@ -1299,7 +1301,8 @@ module.exports = app => {
         async getReportTemplate(ctx) {
             const params = JSON.parse(ctx.request.body.params);
             const rptTpl = await this._getReportTemplate(ctx, params);
-            ctx.body = { data: rptTpl };
+            const permissions = await ctx.service.rptPermission.getTenderPermissions(params.tender_id, params.rpt_tpl_id);
+            ctx.body = { data: rptTpl, permissions };
             ctx.status = 201;
             return rptTpl;
         }

+ 247 - 3
app/public/report/js/rpt_format_setup.js

@@ -4,13 +4,17 @@ const reportFormatSetupObj = {
     canvas: null,
     fieldParamOptions: null,
     maxFieldID: -1,
+    currentRptId: -1,
     onCheck: (event, treeId, treeNode) => {
         //
     },
     onClick: (event,treeId,treeNode) => {
         const me = reportFormatSetupObj;
         if (treeNode.nodeType === RT.NodeType.TEMPLATE) {
+            me.currentRptId = treeNode.refId;
             me.initialize(treeNode);
+        } else {
+            me.currentRptId = -1;
         }
     },
     onDeleteInfo: (dom) => {
@@ -88,21 +92,35 @@ const reportFormatSetupObj = {
         me.maxFieldID++;
         const newSignature = [];
         newSignature.push('<li class="d-flex justify-content-start align-items-center  mb-3">');
-        newSignature.push(`<span class="col-auto"><input class="form-control form-control-sm" FID="${me.maxFieldID}" value="" type="text"></span>`);
+        newSignature.push(`<span class="col-auto"><input class="form-control form-control-sm" FID="${me.maxFieldID}" value="" type="text" onchange="reportFormatSetupObj.onSignNameChange(this)"></span>`);
         newSignature.push('<span><a href="#" onclick="reportFormatSetupObj.onRemoveSignature(this)" class="btn-sm text-danger px-1" title="移除"><i class="fa fa-remove"></i></a></span>');
         newSignature.push('</li>');
         $(dom.parentElement).before(newSignature.join(''));
+        me.fieldParamOptions.fields_collection.push({ FID: me.maxFieldID, name: '' });
+    },
+    onSignNameChange: (dom) => {
+        const me = reportFormatSetupObj;
+        const fid = +dom.attributes[1].value;
+        for (const opt of me.fieldParamOptions.fields_collection) {
+            if (opt.FID === fid) {
+                opt.name = dom.value;
+                break;
+            }
+        }
     },
     onRemoveSignature: (dom) => {
         $(dom.parentElement.parentElement).remove();
     },
+    refreshFieldOptions: () => {
+        // 重新更新已存在页面的指标选择下拉项
+    },
     initialize: (rptNode) => {
         const me = reportFormatSetupObj;
         me.canvas = document.getElementById("rptSetupPreviewCanvas");
         // 1. 先清理
         me.clearTplProperties();
         // 2. 再加表标题、表眉、表脚、电子签名内容
-        const params = { rpt_tpl_id: rptNode.refId };
+        const params = { rpt_tpl_id: rptNode.refId, tender_id: TENDER_ID };
         const url = '/report_api/getReportTemplate';
         $.bootstrapLoading.start();
         CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'),
@@ -126,6 +144,9 @@ const reportFormatSetupObj = {
                 me.initialHeader(result.data);
                 me.initialFooter(result.data);
                 me.initialSignature(result.data);
+                reportPermissionObj.permissions = result.permissions;
+                reportPermissionObj.iniReportPermission();
+                reportPermissionObj.updateSelectedMarks();
                 $.bootstrapLoading.end();
             }, function(err){
                 console.log(err);
@@ -313,6 +334,9 @@ const reportFormatSetupObj = {
         for (const fd of rptTpl['指标_数据_映射']['离散指标_集合']) {
             rst.fields_collection.push({ FID: +fd.ID, name: fd.Name });
         }
+        for (const fd of rptTpl['电子签名离散指标_集合']) {
+            rst.fields_collection.push({ FID: +fd.ID, name: fd.Name });
+        }
         const collectAdhocFields = (hfBandInfo) => {
             if (hfBandInfo && hfBandInfo.discrete_field_s) {
                 for (const field of hfBandInfo.discrete_field_s) {
@@ -717,4 +741,224 @@ const reportFormatSetupObj = {
             rptTpl['电子签名审核意见指标_集合'] = signatureInfo[2];
         }
     },
-};
+};
+
+const reportPermissionObj = {
+    permissions: [],
+    selectedIdsArray: [],
+    treeObj: null,
+    iniReportPermission: () => {
+        const me = reportPermissionObj;
+        const jDom = $("#report-permission-div");
+        jDom.empty();
+        const permissionsHtml = [];
+        permissionsHtml.push('<table class="table table-hover table-bordered table-sm mt-3">');
+        permissionsHtml.push('<thead>');
+        permissionsHtml.push('<tr>');
+        permissionsHtml.push('<th class="text-center" width="25%">用户</th>');
+        permissionsHtml.push('<th class="text-center" width="35%">职位/角色</th>');
+        permissionsHtml.push('<th class="text-center" width="25%">添加时间</th>');
+        permissionsHtml.push('<th class="text-center" width="15%">操作</th>');
+        permissionsHtml.push('</tr>');
+        permissionsHtml.push('</thead>');
+        permissionsHtml.push('<tbody class="text-center"></tbody>');
+        // ...内容
+        me.selectedIdsArray.splice(0, me.selectedIdsArray.length);
+        me.permissions.forEach((permission) => {
+            const id = parseInt(permission.user_id);
+            if (!me.selectedIdsArray.includes(id)) me.selectedIdsArray.push(id);
+        });
+        const permissionStrs = [];
+        me.permissions.forEach(permission => {
+            if (permission.rpt_id === reportFormatSetupObj.currentRptId) {
+                permissionStrs.push(me.createPermissionTbStr(permission));
+            }
+        });
+        if (permissionStrs.length > 0) permissionsHtml.push(permissionStrs.join(''));
+        permissionsHtml.push('</tbody>');
+        permissionsHtml.push('</table>');
+        jDom.append(permissionsHtml.join(''));
+    },
+    beforeRemove: (dom, user_id) => {
+        $('#remove_user_id').val(user_id);
+    },
+    removeUser: (dom) => {
+        const me = reportPermissionObj;
+        const curNodes = reportFormatSetupObj.treeObj.getSelectedNodes();
+        if (curNodes.length > 0) {
+            const id = parseInt($('#remove_user_id').val());
+            const params = { user_id: id, rpt_id: curNodes[0].ID, tid: TENDER_ID };
+            const url = '/report_api/removeReportPermission';
+            $.bootstrapLoading.start();
+            CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'),
+                async function(result){
+                    console.log(result);
+                    $.bootstrapLoading.end();
+                    // after remove
+                    const uId = me.selectedIdsArray.indexOf(id);
+                    if (uId >= 0) {
+                        me.selectedIdsArray.splice(uId, 1);
+                    }
+                    for (let idx = me.permissions.length - 1; idx >= 0; idx--) {
+                        if (parseInt(me.permissions[idx].user_id) === id) {
+                            me.permissions.splice(idx, 1);
+                            break;
+                        }
+                    }
+                    me.iniReportPermission();
+                }, function(err){
+                    console.log(err);
+                    $.bootstrapLoading.end();
+                }, function(ex){
+                    console.log(ex);
+                    $.bootstrapLoading.end();
+                }
+            );
+        }
+    },
+    createPermissionTbStr: (permission) => {
+        const rstArr = [];
+        rstArr.push('<tr>');
+        rstArr.push(`<td class="text-center">${permission.user_name || permission.name}</td>`);
+        rstArr.push(`<td class="text-center">${permission.user_role || permission.role}</td>`);
+        rstArr.push(`<td class="text-center">${(new Date(permission.create_time)).Format('yyyy-MM-dd hh:mm:ss')}</td>`);
+        rstArr.push(`<td class="text-center"><a onclick="reportPermissionObj.beforeRemove(this, ${permission.user_id})" href="#remove-user1" data-toggle="modal" data-target="#remove-user" class="btn btn-sm btn-outline-danger">移除</a></td>`);
+        rstArr.push('</tr>');
+        return rstArr.join('');
+    },
+    addUser: (userId) => {
+        const me = reportPermissionObj;
+        let b = false;
+        for (let grp of ACCOUNT_LIST) {
+            for (let user of grp.groupList) {
+                if (user.id === userId) {
+                    b = true;
+                    const newPermission = { tid: TENDER_ID, user_id: userId, rpt_id: -1, name: user.name, role: user.role, create_time: new Date() };
+                    me.permissions.push(newPermission);
+                    // me.createPermissionTbStr(user);
+                    me.iniReportPermission();
+                    break;
+                }
+            }
+            if (b) break;
+        }
+    },
+    updateSelectedMarks: (userId = null) => {
+        // 此方法是更新下拉菜单的勾选符号(根据permissions列表)
+        const me = reportPermissionObj;
+        // const selectedIdsArray = [];
+        // if (userId) selectedIdsArray.push(userId);
+        if ($('#format-setup-add-user .book-list').length > 0) {
+            $('.user-item').each(function() {
+                const userIdStr = $(this).data('id');
+                const userId = parseInt(userIdStr, 10);
+                const $mark = $(this).find('.selected-mark');
+                if (!isNaN(userId) && me.selectedIdsArray.includes(userId)) {
+                    $mark.show();
+                    $(this).addClass('bg-light');
+                } else {
+                    $mark.hide();
+                    $(this).removeClass('bg-light');
+                }
+            });
+        }
+        //
+    },
+    iniPermissionRpts: () => {
+        const me = reportPermissionObj;
+        if (!me.treeObj) {
+            zTreeHelper.createTreeDirectly(INDI_TOP_TREE_NODES, rpt_permission_setting, "rptFormatSetupTplTree2", reportPermissionObj);
+            refreshNodes(reportPermissionObj);
+        }
+    },
+    batchApplyPermissions: () => {
+        const me = reportPermissionObj;
+        // 1. 收集用户列表
+        const userIds = [];
+        me.permissions.forEach(permission => {
+            if (permission.rpt_id === reportFormatSetupObj.currentRptId) {
+                userIds.push(permission.user_id);
+            }
+        });
+        // 2. 收集报表模板列表
+        const rptIds = [];
+        const curNodes = me.treeObj.getCheckedNodes(true);
+        // if (treeNode.nodeType === RT.NodeType.TEMPLATE) {
+        curNodes.forEach(node => {
+            if (node.nodeType === RT.NodeType.TEMPLATE && reportFormatSetupObj.currentRptId !== node.ID) rptIds.push(node.ID);
+        });
+        if (userIds.length > 0 && rptIds.length > 0) {
+            const params = { tid: TENDER_ID, userIds, rptIds };
+            const url = '/report_api/batchApplyReportPermission';
+            $.bootstrapLoading.start();
+            CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'),
+                async function(result){
+                    console.log(result);
+                    $.bootstrapLoading.end();
+                }, function(err){
+                    console.log(err);
+                    $.bootstrapLoading.end();
+                }, function(ex){
+                    console.log(ex);
+                    $.bootstrapLoading.end();
+                }
+            );
+        }
+    },
+};
+
+const rpt_format_setting = {
+    view: {
+        selectedMulti: false
+    },
+    check: {
+        enable: true
+    },
+    data: {
+        keep: {
+            parent:true,
+            leaf:true
+        },
+        key: {
+            children: "items",
+            title: "title",
+            isHidden: "hidden"
+        },
+        simpleData: {
+            enable: true,
+            rootPId: -1
+        }
+    },
+    callback: {
+        onCheck: reportFormatSetupObj.onCheck,
+        onClick: reportFormatSetupObj.onClick
+    }
+};
+
+const rpt_permission_setting = {
+    view: {
+        selectedMulti: false
+    },
+    check: {
+        enable: true
+    },
+    data: {
+        keep: {
+            parent:true,
+            leaf:true
+        },
+        key: {
+            children: "items",
+            title: "title",
+            isHidden: "hidden"
+        },
+        simpleData: {
+            enable: true,
+            rootPId: -1
+        }
+    },
+    callback: {
+        // onCheck: reportFormatSetupObj.onCheck,
+        // onClick: reportFormatSetupObj.onClick
+    }
+};

+ 3 - 0
app/router.js

@@ -890,6 +890,9 @@ module.exports = app => {
     app.post('/report_api/getReport', sessionAuth, 'reportController.getReport');
     app.post('/report_api/getReportTemplate', sessionAuth, 'reportController.getReportTemplate');
     app.post('/report_api/updateReportTemplate', sessionAuth, 'reportController.updateReportTemplate');
+    app.post('/report_api/addReportPermission', sessionAuth, 'reportPermissionController.addRptPermission');
+    app.post('/report_api/removeReportPermission', sessionAuth, 'reportPermissionController.deleteRptPermission');
+    app.post('/report_api/batchApplyReportPermission', sessionAuth, 'reportPermissionController.batchApplyPermission');
     app.post('/report_api/getPreviewReport', sessionAuth, 'reportController.getPreviewReport');
     app.post('/tender/report_api/getDirectReport', sessionAuth, 'reportController.createExcelFilesFromDirectData');
     app.post('/tender/report_api/getMultiReports', sessionAuth, subProjectCheck, 'reportController.getMultiReportsEx');

+ 42 - 0
app/view/report/rpt_format_popup.ejs

@@ -61,3 +61,45 @@
         </div>
     </div>
 </div> 
+<!--移除账号-->
+<div class="modal fade" id="remove-user" 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">
+                <span>移除账号后,该账号则取消相关权限。确认移除账号?</span>
+            </div>
+            <div class="modal-footer">
+                <input type="hidden" id="remove_user_type">
+                <input type="hidden" id="remove_user_id">
+                <input type="hidden" id="show_id">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-sm btn-sm btn-danger" id="remove_user_btn" onclick="reportPermissionObj.removeUser(this)" data-dismiss="modal">确定移除</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--应用账号至其他报表-->
+<div class="modal fade" id="bdcopy" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">应用账号至其他报表</h5>
+            </div>
+            <div class="modal-body">
+                <!-- <div class="mb-1">
+                    <input type="text" class="form-control form-control-sm" placeholder="输入报表名称搜索"  aria-describedby="button-addon2">
+                </div> -->
+                <div class="modal-height-300">
+                    <ul id="rptFormatSetupTplTree2" class="ztree"></ul>
+                </div>
+            </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-primary" data-dismiss="modal" onclick="reportPermissionObj.batchApplyPermissions();">确认</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 46 - 89
app/view/report/rpt_format_setup.ejs

@@ -59,7 +59,7 @@
                     <nav class="nav nav-tabs m-3" role="tablist">
                         <a class="nav-item nav-link active" data-toggle="tab" data-target="#format-setup-edit" href="#format-setup-edit" role="tab" aria-selected="true">修改报表模板</a>
                         <% if (isAdmin) {%>
-                        <a class="nav-item nav-link" data-toggle="tab" data-target="#format-setup-private" href="#format-setup-private" role="tab" aria-selected="false">报表私有化</a>
+                        <a class="nav-item nav-link" data-toggle="tab" data-target="#format-setup-permission" href="#format-setup-permission" role="tab" aria-selected="false">报表私有化</a>
                         <% } %>
                     </nav>
                     <div class="tab-content m-3">
@@ -73,7 +73,7 @@
                                 </ul>
                             </div>
                             <div class="mt-3">
-                                <label class="form-text alert alert-danger">请先点击「预览报表/预览电子签名」,确定修改无误后,再点击「更新报表模板」(一旦更新无法撤销)。</label>
+                                <label class="form-text alert alert-danger">请先点击「预览报表/预览电子签名」,确定修改无误后,再点击「更新报表模板」(一旦更新无法撤销,封面等类型的报表建议联系总部修改)。</label>
                             </div>
                             <div class="sjs-height-0">
                                 <div class="row">
@@ -118,15 +118,15 @@
                                 </div>
                             </div>
                         </div>
-                        <div id="format-setup-private" class="tab-pane">
+                        <div id="format-setup-permission" class="tab-pane">
                             <div class="sjs-height-0 row" style="height: 479px;">
                                 <div class="col">
                                     <div class="d-flex">
                                         <div class="d-inline-block dropdown ">
-                                            <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                            <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" id="add_user_dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                                 添加用户
                                             </button>
-                                            <div class="dropdown-menu" id="format-setup-add-user" aria-labelledby="dropdownMenuButton" style="width:220px">
+                                            <div class="dropdown-menu" id="format-setup-add-user" aria-labelledby="add_user_dropdownMenuButton" style="width:220px">
 												<!-- <div class="mb-2 p-2"><input class="form-control form-control-sm" placeholder="姓名/手机 检索"></div> -->
 												<dl class="list-unstyled book-list">
                                                     <% accountGroup.forEach((group, idx) => { %>
@@ -146,8 +146,10 @@
 												</dl>
 											</div>
                                         </div>
+                                        <a href="#" class="btn btn-primary btn-sm pull-right ml-2" data-toggle="modal" data-target="#bdcopy" onclick="reportPermissionObj.iniPermissionRpts()">应用账号至其他报表</a>
+									    <div class="ml-2 text-danger ml-auto">说明:仅最底层报表可设置,给单张报表添加用户后,则此张表仅添加用户可见。</div>
                                     </div>
-                                    <div class="col-6 pl-0">
+                                    <div class="col-6 pl-0" id="report-permission-div">
                                         <table class="table table-hover table-bordered table-sm mt-3">
                                             <thead>
                                                 <tr>
@@ -186,36 +188,12 @@
 <script type="text/javascript" src="/public/js/ztree/jquery.ztree.excheck.js"></script>
 
 <script type="text/javascript">
+    const TENDER_ID = <%- tender_id %>;
     const SCREEN_DPI = [];
-    const rpt_format_setting = {
-        view: {
-            selectedMulti: false
-        },
-        check: {
-            enable: true
-        },
-        data: {
-            keep: {
-                parent:true,
-                leaf:true
-            },
-            key: {
-                children: "items",
-                title: "title",
-                isHidden: "hidden"
-            },
-            simpleData: {
-                enable: true,
-                rootPId: -1
-            }
-        },
-        callback: {
-            onCheck: reportFormatSetupObj.onCheck,
-            onClick: reportFormatSetupObj.onClick
-        }
-    };
+    const ACCOUNT_LIST = <%- accountList %>;
 
     let TOP_TREE_NODES = <%- rpt_tpl_data %>;
+    // const 
     const CUST_TREE_NODES = <%- cust_tpl_data %>;
     const ALL_COMMON_TREE_NODES = [];
     const ALL_INDIVI_TREE_NODES = <%- all_indivi_tpl_data %>;
@@ -246,6 +224,8 @@
             }
         }
     }
+    const INDI_TOP_TREE_NODES = [];
+    
     for (let item of ALL_COMMON_TREE_NODES) {
         // item.items = JSON.parse(item.items);
         if (item.items && item.items.length > 0) {
@@ -263,13 +243,14 @@
         }
     }
 
+    setupDateFormat();
     // 初始化报表模板数
     buildTplTree();
 
     // 初始化报表树 备注:这里不用考虑过滤了,把全部的定制报表显示即可
     // filterReportsByType(ALL_COMMON_TREE_NODES, ALL_INDIVI_TREE_NODES, CURRENT_SELECTED_BIZ_TYPE, TOP_TREE_NODES, CUST_TREE_NODES);
     getReportTemplateTree();
-    refreshNodes();
+    refreshNodes(reportFormatSetupObj);
 
     <% if (isAdmin) {%>
     // 初始化 报表私有化 用户
@@ -292,61 +273,36 @@
     });    
     // format-setup-add-user
     $('body').on('click', '#format-setup-add-user dl dd', function (e) {
-        console.log(e);
-    });
-    function iniPrivateReport() {
-        //
-    }
-    <% } %>
-
-    function updateSelectedMarks(forcedType = null) { 
-        let currentUserListSelector = '';
-        let selectedIdsArray = []; 
-        let currentType = forcedType; 
-        if (!currentType) {
-            const $activeTabPane = $('.tab-pane.active');
-            const activeTabId = $activeTabPane.attr('id');
-            switch(activeTabId) {
-                case 'guest': currentType = 'tourist'; break;
-                case 'tzpro': currentType = 'schedule'; break;
-                case 'htgl': currentType = 'contract'; break;
-                case 'sgrz': currentType = 'construction'; break;
-                case 'zlgl': currentType = 'quality'; break;
-                case 'zlxj': currentType = 'inspection'; break;
-                default: currentType = null;
-            }
-        }
-
-        if (currentType && selectedUserIdsByType.hasOwnProperty(currentType)) {
-            switch(currentType) {
-                case 'tourist': currentUserListSelector = '#tourist-users'; break;
-                case 'schedule': currentUserListSelector = '#schedule-users'; break;
-                case 'contract': currentUserListSelector = '#contract-users'; break;
-                case 'construction': currentUserListSelector = '#construction-users'; break;
-                case 'quality': currentUserListSelector = '#quality-users'; break;
-                case 'inspection': currentUserListSelector = '#inspection-users'; break;
+        const curNodes = reportFormatSetupObj.treeObj.getSelectedNodes();
+        if (curNodes.length > 0) {
+            // console.log(e);
+            const id = parseInt($(this).data('id'));
+            if (!reportPermissionObj.selectedIdsArray.includes(id)) {
+                reportPermissionObj.selectedIdsArray.push(id);
+                // const params = { tplId: curNodes[0].ID, tplName: curNodes[0].name, tplObj: JSON.stringify(rptTemplate) };
+                const params = { user_id: id, rpt_id: curNodes[0].ID, tid: TENDER_ID };
+                const url = '/report_api/addReportPermission';
+                e.stopPropagation();
+                $.bootstrapLoading.start();
+                CommonAjax.postXsrfEx(url, params, 300000, true, getCookie('csrfToken_j'),
+                    async function(result){
+                        console.log(result);
+                        $.bootstrapLoading.end();
+                        reportPermissionObj.addUser(id);
+                        reportPermissionObj.updateSelectedMarks();
+                    }, function(err){
+                        console.log(err);
+                        $.bootstrapLoading.end();
+                    }, function(ex){
+                        console.log(ex);
+                        $.bootstrapLoading.end();
+                    }
+                );
             }
-            selectedIdsArray = selectedUserIdsByType[currentType];
-        } else {
-            $('.user-item').find('.selected-mark').hide();
-            $('.user-item').removeClass('bg-light');
-            return;
-        }
-        if ($('#add_user_dropdownMenu2 .book-list').length > 0) {
-            $('.user-item').each(function() {
-                const userIdStr = $(this).data('id');
-                const userId = parseInt(userIdStr, 10);
-                const $mark = $(this).find('.selected-mark');
-                if (!isNaN(userId) && selectedIdsArray.includes(userId)) {
-                    $mark.show();
-                    $(this).addClass('bg-light');
-                } else {
-                    $mark.hide();
-                    $(this).removeClass('bg-light');
-                }
-            });
+            //
         }
-    }
+    });
+    <% } %>
 
     function buildTplTree() {
         if (TOP_TREE_NODES.length > 0) {
@@ -384,6 +340,7 @@
             }
             //ORG_TOP_TREE_NODES.push(individualNode);
             ORG_TOP_TREE_NODES.unshift(individualNodeOrg);
+            INDI_TOP_TREE_NODES.push(individualNodeOrg);
         }
     }
 
@@ -459,8 +416,8 @@
         zTreeHelper.createTreeDirectly(TOP_TREE_NODES, rpt_format_setting, "rptFormatSetupTplTree", reportFormatSetupObj);
     }
 
-    function refreshNodes() {
-        let me = reportFormatSetupObj;
+    function refreshNodes(parenObj) {
+        let me = parenObj;
         const _set_archive_icon = function (tplNode) {
             if (!tplNode.isParent) {
                 tplNode.icon = "/public/css/ztree/img/diy/11.png"; // 躺枪,ico_docu已换成其他图标,调整的代价大,在这里调整

+ 18 - 0
sql/update.sql

@@ -261,3 +261,21 @@ CREATE TABLE `zh_safe_stage_file`  (
 ------------------------------------
 
 Update zh_project_spread Set name = '养护' Where code = 'xxby';
+
+
+------------------------------------
+-- 报表私有化权限表
+------------------------------------
+CREATE TABLE `calculation`.`zh_rpt_permission` (
+  `id` INT NOT NULL,
+  `tid` INT NULL COMMENT '标段ID',
+  `user_id` INT NULL COMMENT '有读取权限用户id',
+  `rpt_id` INT NULL COMMENT '报表模板id',
+  `create_time` DATETIME NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  INDEX `rptId` (`rpt_id` ASC),
+  INDEX `tenderId` (`tid` ASC))
+COMMENT = '报表私有化权限控制';
+
+ALTER TABLE `calculation`.`zh_rpt_permission` 
+CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;