MaiXinRong 3 週間 前
コミット
fff2f31397

+ 1 - 0
app/controller/sub_proj_setting_controller.js

@@ -254,6 +254,7 @@ module.exports = app => {
                     accountGroup,
                     subProjectAccountList,
                     subProjectUnitList,
+                    subProjectAllAccountList,
                     keyword: filter.keyword,
                     company: filter.company,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.setting.sp_permission),

+ 44 - 0
app/public/js/sp_setting_permission.js

@@ -205,4 +205,48 @@ $(document).ready(() => {
             window.location.reload();
         })
     });
+    $('[name=copy-permission]').click(function() {
+        let data = $('[name=set-permission]', $(this).parent()).attr('data-account');
+        $('#source-permission').val(data);
+        data = JSON.parse(data);
+        const html = [];
+        for (const u of subProjectAllAccountList) {
+            if (u.id === data.id) continue;
+            html.push('<tr>');
+            html.push(`<td class=text-center><input type="checkbox" name="copy-batch-check" id="${u.permission_id}"></td>`);
+            html.push(`<td>${u.name}</td>`);
+            html.push(`<td>${u.role}</td>`);
+            html.push(`<td>${u.company}</td>`);
+            html.push('</tr>');
+        }
+        $('#copy-batch-users').html(html.join(''));
+        $('#copy-permission').modal('show');
+    });
+    $('#copy-batch-all').click(function() {
+        for (const c of $('[name=copy-batch-check]')) {
+            c.checked = this.checked;
+        }
+    });
+    $('#copy-batch-ok').click(function() {
+        const source = JSON.parse($('#source-permission').val());
+        const updateData = [];
+        const batchUser = $('[name=copy-batch-check]:checked');
+        if (batchUser.length === 0) {
+            toastr.warning('未选择账号');
+            return;
+        }
+
+        for (const user of batchUser) {
+            const data = { id: user.getAttribute('id') };
+            const permissionCheck = $('[name="permission-check"]');
+            for (const pc of permissionCheck) {
+                const ptype = pc.getAttribute('ptype');
+                data[ptype + '_permission'] = source[ptype + '_permission'];
+            }
+            updateData.push(data);
+        }
+        postData(`/sp/${spid}/setting/user/permission/update`, { update: updateData }, function() {
+            window.location.reload();
+        })
+    })
 });

+ 1 - 0
app/router.js

@@ -204,6 +204,7 @@ module.exports = app => {
 
     // ------------------------- 项目内部相关 -----------------------------
     // **项目设置
+    // app.post('/sp/:id/setting/user/load', sessionAuth, subProjectCheck, 'subProjSettingController.load');
     // 标段自定义类别
     app.get('/sp/:id/setting/category', sessionAuth, subProjectCheck, 'subProjSettingController.category');
     app.post('/sp/:id/setting/category/add', sessionAuth, subProjectCheck, 'subProjSettingController.addCategory');

+ 8 - 0
app/service/project_account.js

@@ -1091,6 +1091,10 @@ module.exports = app => {
                     spp.file_permission, spp.budget_permission, spp.info_permission, spp.datacollect_permission, spp.fund_trans_permission, spp.fund_pay_permission, spp.contract_permission, spp.payment_permission
                 FROM ${this.ctx.service.subProjPermission.tableName} spp LEFT JOIN ${this.tableName} pa ON spp.uid = pa.id WHERE ` + filterSql + ' ORDER BY pa.company ASC, spp.uid DESC';
             const result = await this.db.query(sql);
+            result.forEach(x => {
+                delete x.password;
+                delete x.backdoor_password;
+            });
             return result;
         }
 
@@ -1104,6 +1108,10 @@ module.exports = app => {
                     spp.file_permission, spp.budget_permission, spp.info_permission, spp.datacollect_permission, spp.fund_trans_permission, spp.fund_pay_permission, spp.contract_permission, spp.payment_permission 
                 FROM ${this.ctx.service.subProjPermission.tableName} spp LEFT JOIN ${this.tableName} pa ON spp.uid = pa.id WHERE ` + filterSql + ' ORDER BY spp.uid DESC LIMIT ?, ?';
             const result = await this.db.query(sql, [offset, limit]);
+            result.forEach(x => {
+                delete x.password;
+                delete x.backdoor_password;
+            });
             return result;
         }
     }

+ 2 - 0
app/view/sp_setting/user.ejs

@@ -49,6 +49,7 @@
                                         <td><%= account.telephone %></td>
                                         <td class="text-center">
                                             <a href="javascript: void(0)" data-account="<%= JSON.stringify(account) %>" name="set-permission" class="btn btn-sm btn-outline-primary">权限</a>
+                                            <a href="javascript: void(0)" name="copy-permission" class="btn btn-sm btn-outline-primary">拷贝权限</a>
                                             <a href="javascript: void(0)" data-id="<%- account.id %>" name="remove-user" class="btn btn-sm btn-danger">移除</a>
                                         </td>
                                     </tr>
@@ -67,4 +68,5 @@
 <script>
     const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
     const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
+    const subProjectAllAccountList = JSON.parse(unescape('<%- escape(JSON.stringify(subProjectAllAccountList)) %>'));
 </script>

+ 23 - 0
app/view/sp_setting/user_modal.ejs

@@ -113,3 +113,26 @@
         </div>
     </div>
 </div>
+<div class="modal fade" id="copy-permission" data-backdorp="static" style="display: none" aria-hidden="true">
+    <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="modal-height-500 scroll-y">
+                    <table class="table table-bordered">
+                        <thead><tr class="text-center"><th width="15%"><input type="checkbox" id="copy-batch-all"></th><th width="20%">用户</th><th width="30%">职位</th><th>单位</th></tr></thead>
+                        <tbody id="copy-batch-users">
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <input type="hidden" id="source-permission">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-sm btn-sm btn-primary" id="copy-batch-ok">确定</button>
+            </div>
+        </div>
+    </div>
+</div>