|
@@ -0,0 +1,263 @@
|
|
|
+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) => {
|
|
|
+ console.log(option);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+}
|