import { getProjectPermission, getUserProjectPermissions, getUserOrganizationPermissions, validationProjectPermission, validationOrganizationPermission, getSetApprove } from '@/request/api/datacenter.js' import store from '../store'; import message from './message.js'; let organization, project, user; let checker = []; //审核人 const initData = () => { organization = store.getters.organization; project = store.getters.project; user = store.getters.user; } //permission:1-公开 2-私密 3-密码 const permission = (option, callback) => { switch (option.permissions) { case '1': callback(); break; case '2': privacy(option, callback); break; case '3': password(option, callback); break; default: break; } } //私密操作 const privacy = (option, callback) => { if (option.approveType === 1) { getUserProjectPermissions(option.id, user.userId).then(res => { privacySuccessFunc(res, option, callback) }) } else if (option.approveType === 2) { getUserOrganizationPermissions(option.id, user.userId).then(res => { privacySuccessFunc(res, option, callback) }) } } const privacySuccessFunc = (res, option, callback) => { if (res.code === 200) { let data = res.data || {}; //权限通过 if (data[option.type]) return callback(); //权限不通过,是否申请权限 approveUser(option, callback); } } const approveUser = (option, callback) => { getSetApprove({ projectId: project.id, operationOrganizationId: option.operationOrganizationId, type: option.approveType }).then(res => { if (res.code === 200) { let obj = res.data[0] || {}; if (obj.checker) checker = JSON.parse(obj.checker).map(node => -node[node.length - 1]); if (checker.filter(id => id === user.userId).length > 0) return callback(); //仅申请文件夹访问和文件下载 approveTip(option) } }) } const operationName = (type) => { let str = ''; switch (type) { case 'access': str = '访问'; break; case 'create': str = '创建'; break; case 'delete': str = '删除'; break; case 'edit': str = '编辑'; break; case 'fileDelete': str = '删除'; break; case 'fileDownload': str = '下载'; break; case 'fileUpload': str = '上传'; break; case 'fileView': str = '预览'; break; default: break; } return str; } const approveTip = (option) => { let title = `该文件是私密文件夹,是否申请${operationName(option.type)}?`; uni.showModal({ title: '系统提示', content: title, success: function(res) { if (res.confirm) { if (checker.length === 0) return uni.showToast({ title: '暂未设置审核人', icon: "none" }); let folder = ''; for (let i = 0; i < option.folderList.length; i++) { folder += ('-' + option.folderList[i].name); } let folderName = `【${option.typeName}${folder}-${option.name}】`; let title = `申请${operationName(option.type)}${folderName}`; message.sendFlowMessage({}, { operation: title, receiver: checker.join(','), messageType: 5, dataType: returnType(option)[option.type], dataId: option.id }).then(res => { if (res.code === 200) uni.showToast({ title: '申请成功,请等待审核', icon: "none" }); }) } } }); } const returnType = (option) => { let obj = {}; switch (option.approveType) { case 1: obj = { access: 1, create: 2, delete: 3, edit: 4, fileDelete: 5, fileDownload: 6, fileUpload: 7, fileView: 8 } break; case 2: obj = { access: 9, create: 10, delete: 11, edit: 12, fileDelete: 13, fileDownload: 14, fileUpload: 15, fileView: 16 } break; default: break; } return obj; } //密码验证 const password = (option, callback) => { let title = `该文件是加密文件夹,请输入密码${operationName(option.type)}?`; uni.showModal({ title: title, editable: true, placeholderText: '请输入密码', success: function(res) { if (res.confirm) { if (res.content) return uni.showToast({ title: '密码错误', icon: "none" }); if (option.approveType === 1) { validationProjectPermission(option.permissionsId, res.content).then(res => { passwordSuccessFunc(res, callback) }) } else if (option.approveType === 2) { validationOrganizationPermission(option.id, res.content).then(res => { passwordSuccessFunc(res, callback) }) } } } }); } const passwordSuccessFunc = (res, callback) => { if (res.code === 200) { if (res.data) return callback(); uni.showToast({ title: '密码错误', icon: "none" }); } } /* * 项目中心文件夹以及文件权限 * option['type'] = access-访问/create创建/delete-删除/edit-修改/fileDelete-文件删除/fileDownload-文件下载/fileUpload-文件上传/fileView-文件预览 */ export function projectPermission(option, callback) { if (!user) initData(); //获取最新权限 option['dataType'] = 'project'; option['typeName'] = '项目中心'; option['approveType'] = 1; option['operationOrganizationId'] = -1; getProjectPermission(option.id, -1).then(res => { if (res.code === 200) { option['permissions'] = res.data == null ? option.oldPermission : res.data.permissions; if (res.data) option['permissionsId'] = res.data.id; permission(option, callback); } }) } /* * 企业中心文件夹以及文件权限 * */ export function organizationPermission(option, callback) { if (!user) initData(); option['dataType'] = 'organization'; option['typeName'] = '企业中心'; option['approveType'] = 2; option['operationOrganizationId'] = organization.id; permission(option, callback); } /* * 下载文件 * */ export function downloadFileDom(data, fileName) { let blob = new Blob([data], { type: 'application/octet-stream' }); // 转化为blob对象 if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(blob, fileName); } else { var blobURL = window.URL.createObjectURL(blob); // 将blob对象转为一个URL var tempLink = document.createElement('a'); // 创建一个a标签 tempLink.style.display = 'none'; tempLink.href = blobURL; tempLink.setAttribute('download', fileName); // 给a标签添加下载属性 if (typeof tempLink.download === 'undefined') { tempLink.setAttribute('target', '_blank'); } document.body.appendChild(tempLink); // 将a标签添加到body当中 tempLink.click(); // 启动下载 document.body.removeChild(tempLink); // 下载完毕删除a标签 window.URL.revokeObjectURL(blobURL); } }