Selaa lähdekoodia

合同管理权限设置及控制

ellisran 3 viikkoa sitten
vanhempi
commit
b61968ccc5

+ 23 - 11
app/public/js/contract_detail.js

@@ -315,7 +315,7 @@ $(document).ready(function() {
                         $('#htpay-table tbody').find('.pay-del').hide();
                     }
                 } else {
-                    $('#add_contract_pay_btn').show();
+                    if (node.uid === user_id || permission_add_pay) $('#add_contract_pay_btn').show();
                     if (need && contractPays && contractPays.length > 0) {
                         for (const [i, cp] of contractPays.entries()) {
                             if (cp.uid === user_id) {
@@ -410,7 +410,7 @@ $(document).ready(function() {
                     contractTreeSpreadObj.setContractPays(result.pays, node);
                     contractTreeSpreadObj.setContractFiles(result.files, node.id);
                 });
-                if (node.uid === user_id) {
+                if ((node.uid === user_id || permission_edit_contract)) {
                     if (node.settle_code) {
                         $('a[href*="#cons-unlock"]').show();
                         $('a[href*="#cons-close"]').hide();
@@ -427,7 +427,11 @@ $(document).ready(function() {
                     $('a[href*="#cons-close"]').hide();
                     $('a[href*="#cons-upfile"]').hide();
                     if (node && node.c_code && $('.bc-bar .nav li .active').attr('href') === '#htfile' && permission_att) $('a[href*="#cons-upfile"]').show();
-                    $('#add_contract_pay_btn').hide();
+                    if (node && node.c_code && $('.bc-bar .nav li .active').attr('href') === '#htpay' && (node.uid === user_id || permission_add_pay)) {
+                        $('#add_contract_pay_btn').show();
+                    } else {
+                        $('#add_contract_pay_btn').hide();
+                    }
                 }
             } else {
                 $('#htdetail-table').hide();
@@ -1157,15 +1161,17 @@ $(document).ready(function() {
     $('.bc-bar ul li a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
         const node = SpreadJsObj.getSelectObject(contractSheet);
         $('a[href*="#cons-upfile"]').hide();
+        $('#add_contract_pay_btn').hide();
         if (node && node.c_code) {
             if ($('.bc-bar .nav li .active').attr('href') === '#htfile' && permission_att) $('a[href*="#cons-upfile"]').show();
-            if (node.uid === user_id) contractTreeSpreadObj.changeContractTab(node, true);
+            if ($('.bc-bar .nav li .active').attr('href') === '#htpay' && !node.settle_code && permission_add_pay) $('#add_contract_pay_btn').show();
+            if ((node.uid === user_id || permission_edit_contract)) contractTreeSpreadObj.changeContractTab(node, true);
         }
     });
 
     $('#edit_contract_btn').on('click', function () {
         const node = SpreadJsObj.getSelectObject(contractSheet);
-        if (node && node.c_code && node.uid === user_id) {
+        if (node && node.c_code && (node.uid === user_id || permission_edit_contract)) {
             $('#edit_contract_btn').hide();
             $('#save_contract_btn').show();
             $('#cancel_contract_btn').show();
@@ -1186,7 +1192,7 @@ $(document).ready(function() {
 
     $('#save_contract_btn').on('click', function () {
         const node = SpreadJsObj.getSelectObject(contractSheet);
-        if (node && node.c_code && node.uid === user_id) {
+        if (node && node.c_code && (node.uid === user_id || permission_edit_contract)) {
             const data = {
                 id: node.id,
             };
@@ -1237,7 +1243,7 @@ $(document).ready(function() {
 
     $('#cancel_contract_btn').on('click', function () {
         const node = SpreadJsObj.getSelectObject(contractSheet);
-        if (node && node.c_code && node.uid === user_id) {
+        if (node && node.c_code && (node.uid === user_id || permission_edit_contract)) {
             $('#edit_contract_btn').show();
             $('#save_contract_btn').hide();
             $('#cancel_contract_btn').hide();
@@ -1531,6 +1537,12 @@ $(document).ready(function() {
                 if (ca && ca.permission_add) {
                     txt.push('添加合同');
                 }
+                if (ca && ca.permission_edit_contract) {
+                    txt.push('编辑合同');
+                }
+                if (ca && ca.permission_add_pay) {
+                    txt.push('添加支付');
+                }
                 if (ca && ca.permission_show_unit) {
                     txt.push('查看本单位合同');
                 }
@@ -1810,8 +1822,8 @@ $(document).ready(function() {
             toastr.error('请选择一个合同节点');
             return;
         }
-        if (node.uid !== user_id) {
-            toastr.error('只能添加自己的合同' + contractConst.typeName[contract_type]);
+        if (!(node.uid === user_id || permission_add_pay)) {
+            toastr.error('没有权限添加合同' + contractConst.typeName[contract_type]);
             return;
         }
         if (node.settle_code) {
@@ -2119,8 +2131,8 @@ $(document).ready(function() {
         },
         spreadSetting: {
             cols: [
-                {title: '项目节编号', field: 'code', hAlign: 0, width: 120, formatter: '@', readOnly: true, cellType: 'tree'},
-                {title: '名称', field: 'name', hAlign: 0, width: 150, formatter: '@', readOnly: true},
+                {title: '项目节编号', field: 'code', hAlign: 0, width: 180, formatter: '@', readOnly: true, cellType: 'tree'},
+                {title: '名称', field: 'name', hAlign: 0, width: 200, formatter: '@', readOnly: true},
             ],
             treeCol: 0,
             emptyRows: 0,

+ 8 - 0
app/public/js/setting_manage.js

@@ -675,6 +675,8 @@ $(document).ready(() => {
                 userData.permission = {
                     add: $('#contract-users tr').eq(i).find('input[data-type="permission_add"]').eq(0).is(':checked') ? 1 : 0,
                     edit: $('#contract-users tr').eq(i).find('input[data-type="permission_edit"]').eq(0).is(':checked') ? 1 : 0,
+                    edit_contract: $('#contract-users tr').eq(i).find('input[data-type="permission_edit_contract"]').eq(0).is(':checked') ? 1 : 0,
+                    add_pay: $('#contract-users tr').eq(i).find('input[data-type="permission_add_pay"]').eq(0).is(':checked') ? 1 : 0,
                     showUnit: $('#contract-users tr').eq(i).find('input[data-type="permission_show_unit"]').eq(0).is(':checked') ? 1 : 0,
                     showNode: $('#contract-users tr').eq(i).find('input[data-type="permission_show_node"]').eq(0).is(':checked') ? 1 : 0,
                 }
@@ -976,6 +978,12 @@ function setContractHtml(datas) {
                                 <input type="checkbox" class="permission-checkbox" data-type="permission_add" value="${ca.uid}" ${ca.permission_add ? 'checked' : ''}>
                             </td>
                             <td class="text-center">
+                                <input type="checkbox" class="permission-checkbox" data-type="permission_edit_contract" value="${ca.uid}" ${ca.permission_edit_contract ? 'checked' : ''}>
+                            </td>
+                            <td class="text-center">
+                                <input type="checkbox" class="permission-checkbox" data-type="permission_add_pay" value="${ca.uid}" ${ca.permission_add_pay ? 'checked' : ''}>
+                            </td>
+                            <td class="text-center">
                                 <input type="checkbox" class="permission-checkbox" data-type="permission_show_unit" value="${ca.uid}" ${ca.permission_show_unit ? 'checked' : ''}>
                             </td>
                             <td class="text-center">

+ 20 - 4
app/service/sub_proj_permission.js

@@ -49,6 +49,8 @@ module.exports = app => {
                 contract: {
                     edit: { title: '编辑节点', value: 1 },
                     add: { title: '添加合同', value: 2 },
+                    edit_contract: { title: '编辑合同', value: 7 },
+                    add_pay: { title: '添加支付', value: 8 },
                     node: { title: '授权节点下查看本节点合同', value: 3 },
                     unit: { title: '授权节点下查看本单位合同', value: 4 },
                     view: { title: '查看所有合同', value: 5 },
@@ -74,10 +76,12 @@ module.exports = app => {
                 { key: 'info', name: '项目概况', field: 'info_permission' },
                 { key: 'contract', name: '合同管理', field: 'contract_permission', hint: ['1、编辑节点:编辑合同管理内页树结构',
                         '2、添加合同:允许添加合同',
-                        '3、授权节点下查看本节点合同:授权节点下查看所有人上传的合同',
-                        '4、授权节点下查看本单位合同:授权节点下查看本单位人员添加的所有合同',
-                        '5、查看所有合同:未授权节点情况下可以查看包括其他单位人员添加的合同',
-                        '注:查看合同第3、4、5必须选择其一,否则无法查看本项目合同管理',
+                        '3、编辑合同:编辑非自己上传的合同信息',
+                        '4、添加支付:给非自己上传的合同添加合同支付',
+                        '5、授权节点下查看本节点合同:授权节点下查看所有人上传的合同',
+                        '6、授权节点下查看本单位合同:授权节点下查看本单位人员添加的所有合同',
+                        '7、查看所有合同:未授权节点情况下可以查看包括其他单位人员添加的合同',
+                        '注:查看合同第5、6、7必须选择其一,否则无法查看本项目合同管理',
                     ] },
                 { key: 'file', name: '资料管理', field: 'file_permission' },
                 { key: 'budget', name: '动态投资', field: 'budget_permission' },
@@ -409,6 +413,8 @@ module.exports = app => {
                     uid: r.uid,
                     permission_add: permission.permission_add,
                     permission_edit: permission.permission_edit,
+                    permission_edit_contract: permission.permission_edit_contract,
+                    permission_add_pay: permission.permission_add_pay,
                     permission_show_node: permission.permission_show_node,
                     permission_show_unit: permission.permission_show_unit,
                     permission_att: permission.permission_att,
@@ -425,6 +431,12 @@ module.exports = app => {
             if (newContractPermission.permission_edit !== undefined) {
                 oldPermission.permission_edit = newContractPermission.permission_edit;
             }
+            if (newContractPermission.permission_edit_contract !== undefined) {
+                oldPermission.permission_edit_contract = newContractPermission.permission_edit_contract;
+            }
+            if (newContractPermission.permission_add_pay !== undefined) {
+                oldPermission.permission_add_pay = newContractPermission.permission_add_pay;
+            }
             if (newContractPermission.permission_show_node !== undefined) {
                 oldPermission.permission_show_node = newContractPermission.permission_show_node;
             }
@@ -437,6 +449,8 @@ module.exports = app => {
             const permissionArr = [];
             if (oldPermission.permission_edit) permissionArr.push(1);
             if (oldPermission.permission_add) permissionArr.push(2);
+            if (oldPermission.permission_edit_contract) permissionArr.push(7);
+            if (oldPermission.permission_add_pay) permissionArr.push(8);
             if (oldPermission.permission_show_node) permissionArr.push(3);
             if (oldPermission.permission_show_unit) permissionArr.push(4);
             if (!oldPermission.permission_show_unit && !oldPermission.permission_show_node) permissionArr.push(5);
@@ -448,6 +462,8 @@ module.exports = app => {
             const permission = {
                 permission_edit: cp.indexOf(1) !== -1 ? 1: 0,
                 permission_add: cp.indexOf(2) !== -1 ? 1: 0,
+                permission_edit_contract: cp.indexOf(7) !== -1 ? 1: 0,
+                permission_add_pay: cp.indexOf(8) !== -1 ? 1: 0,
                 permission_show_node: cp.indexOf(3) !== -1 ? 1: 0,
                 permission_show_unit: cp.indexOf(4) !== -1 ? 1: 0,
                 permission_att: cp.indexOf(6) !== -1 ? 1: 0,

+ 2 - 0
app/view/contract/detail.ejs

@@ -214,6 +214,8 @@
     const permission_edit = <%- (ctx.session.sessionUser.is_admin || audit_permission.permission_edit) %>;
     const permission_add = <%- (ctx.session.sessionUser.is_admin || audit_permission.permission_add) %>;
     const permission_att = <%- (ctx.session.sessionUser.is_admin || audit_permission.permission_att) %>;
+    const permission_edit_contract = <%- (ctx.session.sessionUser.is_admin || audit_permission.permission_edit_contract) %>;
+    const permission_add_pay = <%- (ctx.session.sessionUser.is_admin || audit_permission.permission_add_pay) %>;
     const contract_type = <%- contract_type %>;
     const whiteList = JSON.parse(unescape('<%- escape(JSON.stringify(whiteList)) %>'));
     const contractConst = JSON.parse(unescape('<%- escape(JSON.stringify(contractConst)) %>'));

+ 12 - 2
app/view/contract/modal.ejs

@@ -56,8 +56,10 @@
                             <div class="dropdown-menu bg-dark">
                                 <div class="dropdown-item text-light bg-dark">1、编辑节点:编辑合同管理内页树结构</div>
                                 <div class="dropdown-item text-light bg-dark">2、添加合同:允许添加合同</div>
-                                <div class="dropdown-item text-light bg-dark">3、授权范围本单位:授权节点下查看本单位人员添加的所有合同</div>
-                                <div class="dropdown-item text-light bg-dark">4、授权范围本节点:授权节点下查看所有人上传的合同</div>
+                                <div class="dropdown-item text-light bg-dark">3、编辑合同:编辑非自己上传的合同信息</div>
+                                <div class="dropdown-item text-light bg-dark">4、添加支付:给非自己上传的合同添加合同支付</div>
+                                <div class="dropdown-item text-light bg-dark">5、授权范围本单位:授权节点下查看本单位人员添加的所有合同</div>
+                                <div class="dropdown-item text-light bg-dark">6、授权范围本节点:授权节点下查看所有人上传的合同</div>
                             </div>
                         </div>
                     </div>
@@ -69,6 +71,8 @@
                         <th rowspan="2" class="align-middle">角色/职位</th>
                         <th rowspan="2" class="align-middle">编辑节点</th>
                         <th rowspan="2" class="align-middle">添加合同</th>
+                        <th rowspan="2" class="align-middle">编辑合同</th>
+                        <th rowspan="2" class="align-middle">添加支付</th>
                         <th colspan="2">授权节点合同查看范围</th>
                         <th rowspan="2" class="align-middle">上传附件</th>
                         <th rowspan="2" class="align-middle">操作</th>
@@ -219,6 +223,12 @@
                                 <input type="checkbox" class="permission-checkbox" data-type="permission_add" value="${ca.uid}" ${ca.permission_add ? 'checked' : ''}>
                             </td>
                             <td>
+                                <input type="checkbox" class="permission-checkbox" data-type="permission_edit_contract" value="${ca.uid}" ${ca.permission_edit_contract ? 'checked' : ''}>
+                            </td>
+                            <td>
+                                <input type="checkbox" class="permission-checkbox" data-type="permission_add_pay" value="${ca.uid}" ${ca.permission_add_pay ? 'checked' : ''}>
+                            </td>
+                            <td>
                                 <input type="checkbox" class="permission-checkbox" data-type="permission_show_unit" value="${ca.uid}" ${ca.permission_show_unit ? 'checked' : ''}>
                             </td>
                             <td>

+ 6 - 2
app/view/sp_setting/manage.ejs

@@ -33,8 +33,10 @@
                                     <div class="dropdown-menu bg-dark">
                                         <div class="dropdown-item text-light bg-dark">1、编辑节点:编辑合同管理内页树结构</div>
                                         <div class="dropdown-item text-light bg-dark">2、添加合同:允许添加合同</div>
-                                        <div class="dropdown-item text-light bg-dark">3、授权范围本单位:授权节点下查看本单位人员添加的所有合同</div>
-                                        <div class="dropdown-item text-light bg-dark">4、授权范围本节点:授权节点下查看所有人上传的合同</div>
+                                        <div class="dropdown-item text-light bg-dark">3、编辑合同:编辑非自己上传的合同信息</div>
+                                        <div class="dropdown-item text-light bg-dark">4、添加支付:给非自己上传的合同添加合同支付</div>
+                                        <div class="dropdown-item text-light bg-dark">5、授权范围本单位:授权节点下查看本单位人员添加的所有合同</div>
+                                        <div class="dropdown-item text-light bg-dark">6、授权范围本节点:授权节点下查看所有人上传的合同</div>
                                     </div>
                                 </div>
                             </div>
@@ -174,6 +176,8 @@
                                     <th rowspan="2" class="align-middle">角色/职位</th>
                                     <th rowspan="2" class="align-middle">编辑节点</th>
                                     <th rowspan="2" class="align-middle">添加合同</th>
+                                    <th rowspan="2" class="align-middle">编辑合同</th>
+                                    <th rowspan="2" class="align-middle">添加支付</th>
                                     <th colspan="2">授权节点合同查看范围</th>
                                     <th rowspan="2" class="align-middle">操作</th>
                                 </tr>

+ 3 - 1
sql/update.sql

@@ -1378,7 +1378,9 @@ ALTER TABLE `zh_stage_pos_final_99`
 ADD COLUMN `used_time` datetime NULL COMMENT '首次使用时间' AFTER `unit_price`,
 ADD COLUMN `update_time` datetime NULL COMMENT '最后更新时间' AFTER `used_time`;
 
-
+ALTER TABLE `zh_contract_audit`
+ADD COLUMN `permission_edit_contract` tinyint(1) NULL DEFAULT 0 COMMENT '编辑非本人合同权限' AFTER `permission_edit`,
+ADD COLUMN `permission_add_pay` tinyint(1) NULL DEFAULT 0 COMMENT '添加非本人合同支付权限' AFTER `permission_edit_contract`;
 
 ------------------------------------
 -- 表数据