|
@@ -51,7 +51,7 @@ module.exports = app => {
|
|
|
add: { title: '添加合同', value: 2 },
|
|
|
node: { title: '授权查看本节点合同', value: 3 },
|
|
|
unit: { title: '授权查看本单位合同', value: 4 },
|
|
|
-
|
|
|
+ view: { title: '查看所有合同', value: 5 },
|
|
|
},
|
|
|
fund_trans: {
|
|
|
view: { title: '查看', value: 1 },
|
|
@@ -66,7 +66,13 @@ module.exports = app => {
|
|
|
this.PermissionBlock = [
|
|
|
{ key: 'datacollect', name: '决策大屏', field: 'datacollect_permission' },
|
|
|
{ key: 'info', name: '项目概况', field: 'info_permission' },
|
|
|
- { key: 'contract', name: '合同管理', field: 'contract_permission', hint: ['1、编辑节点:编辑合同管理内页树结构', '2、添加合同:允许添加合同', '3、授权查看本节点合同:授权节点下查看所有人上传的合同', '4、授权查看本单位合同:授权节点下查看本单位人员添加的所有合同'] },
|
|
|
+ { key: 'contract', name: '合同管理', field: 'contract_permission', hint: ['1、编辑节点:编辑合同管理内页树结构',
|
|
|
+ '2、添加合同:允许添加合同',
|
|
|
+ '3、授权查看本节点合同:授权节点下查看所有人上传的合同',
|
|
|
+ '4、授权查看本单位合同:授权节点下查看本单位人员添加的所有合同',
|
|
|
+ '5、查看所有合同:查看所有合同,包括其他单位人员添加的合同',
|
|
|
+ '注:查看合同第3、4、5必须选择其一,否则无法查看本项目合同管理',
|
|
|
+ ] },
|
|
|
{ key: 'file', name: '资料归集', field: 'file_permission' },
|
|
|
{ key: 'budget', name: '动态投资', field: 'budget_permission' },
|
|
|
{
|
|
@@ -246,7 +252,8 @@ module.exports = app => {
|
|
|
async _updateUserPermission(data) {
|
|
|
const datas = data instanceof Array ? data : [data];
|
|
|
const updateData = [];
|
|
|
- datas.forEach(x => {
|
|
|
+ // const contractData = [];
|
|
|
+ for (const x of datas) {
|
|
|
const ud = { id: x.id };
|
|
|
for (const p of this.PermissionBlock) {
|
|
|
if (p.children) {
|
|
@@ -255,11 +262,65 @@ module.exports = app => {
|
|
|
}
|
|
|
} else {
|
|
|
if (x[p.field] !== undefined) ud[p.field] = x[p.field] || '';
|
|
|
+ // if (p.field === 'contract_permission') {
|
|
|
+ // const spAudit = await this.getDataById(x.id);
|
|
|
+ // if (spAudit) {
|
|
|
+ // const contractAudit = await this.ctx.service.contractAudit.getDataByCondition({ spid: spAudit.spid, uid: spAudit.uid });
|
|
|
+ // const contractPermission = x.contract_permission ? this._.map(x.contract_permission.split(','), this._.toInteger) : [];
|
|
|
+ // const newContractPermission = contractPermission.length > 0 ? await this.getContractPermission(contractPermission) : [];
|
|
|
+ // console.log(newContractPermission, contractAudit);
|
|
|
+ // if (!contractAudit && contractPermission.length === 0) continue;
|
|
|
+ // if (contractAudit) {
|
|
|
+ // if (contractPermission.length === 0 || this._.intersection([3,4,5], contractPermission).length === 0) {
|
|
|
+ // contractData.push({ delete: { id: contractAudit.id }});
|
|
|
+ // } else if (contractAudit.permission_add !== newContractPermission.permission_add ||
|
|
|
+ // contractAudit.permission_edit !== newContractPermission.permission_edit ||
|
|
|
+ // contractAudit.permission_show_unit !== newContractPermission.permission_show_unit ||
|
|
|
+ // contractAudit.permission_show_node !== newContractPermission.permission_show_node) {
|
|
|
+ // contractData.push({ update: { id: contractAudit.id,
|
|
|
+ // permission_add: newContractPermission.permission_add,
|
|
|
+ // permission_edit: newContractPermission.permission_edit,
|
|
|
+ // permission_show_unit: newContractPermission.permission_show_unit,
|
|
|
+ // permission_show_node: newContractPermission.permission_show_node,
|
|
|
+ // }});
|
|
|
+ // }
|
|
|
+ // } else if (!contractAudit && contractPermission.length > 0) {
|
|
|
+ // contractData.push({ add: {
|
|
|
+ // spid: spAudit.spid,
|
|
|
+ // tid: null,
|
|
|
+ // uid: spAudit.uid,
|
|
|
+ // permission_add: newContractPermission.permission_add,
|
|
|
+ // permission_edit: newContractPermission.permission_edit,
|
|
|
+ // permission_show_unit: newContractPermission.permission_show_unit,
|
|
|
+ // permission_show_node: newContractPermission.permission_show_node,
|
|
|
+ // create_time: new Date(),
|
|
|
+ // }});
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
}
|
|
|
}
|
|
|
updateData.push(ud);
|
|
|
- });
|
|
|
- await this.db.updateRows(this.tableName, updateData);
|
|
|
+ }
|
|
|
+ const conn = await this.db.beginTransaction();
|
|
|
+ try {
|
|
|
+ // if (contractData.length > 0) {
|
|
|
+ // for (const d of contractData) {
|
|
|
+ // if (d.add) {
|
|
|
+ // await conn.insert(this.ctx.service.contractAudit.tableName, d.add);
|
|
|
+ // } else if (d.update) {
|
|
|
+ // await conn.update(this.ctx.service.contractAudit.tableName, d.update);
|
|
|
+ // } else if (d.delete) {
|
|
|
+ // await conn.delete(this.ctx.service.contractAudit.tableName, d.delete);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ await conn.updateRows(this.tableName, updateData);
|
|
|
+ await conn.commit();
|
|
|
+ } catch(err) {
|
|
|
+ await conn.rollback();
|
|
|
+ throw err;
|
|
|
+ }
|
|
|
return updateData;
|
|
|
}
|
|
|
|
|
@@ -308,6 +369,11 @@ module.exports = app => {
|
|
|
if (!viewPermission || ctx.subProject.permission[c.field].indexOf(viewPermission.value) >= 0) canView = true;
|
|
|
}
|
|
|
return canView;
|
|
|
+ } else if (ctx.controllerName === 'contract') {
|
|
|
+ if (ctx.url.indexOf('contract/tender') >= 0) return true;
|
|
|
+ const contractViewPermission = this._.map(permissionBlock.permission.filter(x => { return ['view', 'unit', 'node'].indexOf(x.key) >= 0; }), 'value');
|
|
|
+ if (!contractViewPermission) return true;
|
|
|
+ return this._.intersection(ctx.subProject.permission[permissionBlock.field], contractViewPermission).length > 0;
|
|
|
} else {
|
|
|
const viewPermission = permissionBlock.permission.find(x => { return x.key === 'view'; });
|
|
|
if (!viewPermission) return true;
|
|
@@ -315,6 +381,61 @@ module.exports = app => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ async getContractAuditList(spid, uid = null) {
|
|
|
+ const uidSql = uid ? 'AND uid in (' + uid.join(',') + ')' : '';
|
|
|
+ const sql = `SELECT * FROM ?? WHERE spid = ? AND contract_permission <> ''` + uidSql;
|
|
|
+ const sqlParams = [this.tableName, spid];
|
|
|
+ const result = await this.db.query(sql, sqlParams);
|
|
|
+ const list = [];
|
|
|
+ for (const r of result) {
|
|
|
+ const permission = await this.getContractPermission(this._.map(r.contract_permission.split(','), this._.toInteger));
|
|
|
+ list.push({
|
|
|
+ id: r.id,
|
|
|
+ spid: r.spid,
|
|
|
+ tid: null,
|
|
|
+ uid: r.uid,
|
|
|
+ permission_add: permission.permission_add,
|
|
|
+ permission_edit: permission.permission_edit,
|
|
|
+ permission_show_unit: permission.permission_show_unit,
|
|
|
+ permission_show_node: permission.permission_show_node,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ async getNewContractPermission(permission, newContractPermission) {
|
|
|
+ const oldPermission = await this.getContractPermission(this._.map(permission.split(','), this._.toInteger));
|
|
|
+ if (newContractPermission.permission_add !== undefined) {
|
|
|
+ oldPermission.permission_add = newContractPermission.permission_add;
|
|
|
+ }
|
|
|
+ if (newContractPermission.permission_edit !== undefined) {
|
|
|
+ oldPermission.permission_edit = newContractPermission.permission_edit;
|
|
|
+ }
|
|
|
+ if (newContractPermission.permission_show_unit !== undefined) {
|
|
|
+ oldPermission.permission_show_unit = newContractPermission.permission_show_unit;
|
|
|
+ }
|
|
|
+ if (newContractPermission.permission_show_node !== undefined) {
|
|
|
+ oldPermission.permission_show_node = newContractPermission.permission_show_node;
|
|
|
+ }
|
|
|
+ const permissionArr = [];
|
|
|
+ if (oldPermission.permission_edit) permissionArr.push(1);
|
|
|
+ if (oldPermission.permission_add) permissionArr.push(2);
|
|
|
+ if (oldPermission.permission_show_unit) permissionArr.push(3);
|
|
|
+ if (oldPermission.permission_show_node) permissionArr.push(4);
|
|
|
+ if (!oldPermission.permission_show_unit && !oldPermission.permission_show_node) permissionArr.push(5);
|
|
|
+ return permissionArr.join(',');
|
|
|
+ }
|
|
|
+
|
|
|
+ async getContractPermission(cp) {
|
|
|
+ const permission = {
|
|
|
+ permission_edit: cp.indexOf(1) !== -1 ? 1: 0,
|
|
|
+ permission_add: cp.indexOf(2) !== -1 ? 1: 0,
|
|
|
+ permission_show_unit: cp.indexOf(3) !== -1 ? 1: 0,
|
|
|
+ permission_show_node: cp.indexOf(4) !== -1 ? 1: 0,
|
|
|
+ };
|
|
|
+ return permission;
|
|
|
+ }
|
|
|
+
|
|
|
async getFinancailPermission(trans_permission, pay_permission) {
|
|
|
const permission = {
|
|
|
transfer_show: trans_permission.indexOf(1) !== -1,
|