datacenter.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. import {
  2. getProjectPermission,
  3. getUserProjectPermissions,
  4. getUserOrganizationPermissions,
  5. validationProjectPermission,
  6. validationOrganizationPermission,
  7. getSetApprove
  8. } from '@/api/datacenter'
  9. import store from '../store';
  10. import {
  11. MessageBox,
  12. Message
  13. } from 'element-ui';
  14. import message from './message.js';
  15. let organization, project, user;
  16. let checker = []; //审核人
  17. const initData = () => {
  18. organization = store.getters.organization;
  19. project = store.getters.project;
  20. user = store.getters.user;
  21. }
  22. //permission:1-公开 2-私密 3-密码
  23. const permission = (option, callback) => {
  24. switch (option.permissions) {
  25. case '1':
  26. callback();
  27. break;
  28. case '2':
  29. privacy(option, callback);
  30. break;
  31. case '3':
  32. password(option, callback);
  33. break;
  34. default:
  35. break;
  36. }
  37. }
  38. //私密操作
  39. const privacy = (option, callback) => {
  40. if (option.approveType === 1) {
  41. getUserProjectPermissions(option.id, user.userId).then(res => {
  42. privacySuccessFunc(res, option, callback)
  43. })
  44. } else if (option.approveType === 2) {
  45. getUserOrganizationPermissions(option.id, user.userId).then(res => {
  46. privacySuccessFunc(res, option, callback)
  47. })
  48. }
  49. }
  50. const privacySuccessFunc = (res, option, callback) => {
  51. if (res.state) {
  52. let data = res.data || {};
  53. //权限通过
  54. if (data[option.type]) return callback();
  55. //权限不通过,是否申请权限
  56. approveUser(option, callback);
  57. }
  58. }
  59. const approveUser = (option, callback) => {
  60. getSetApprove({
  61. projectId: project.id,
  62. operationOrganizationId: option.operationOrganizationId,
  63. type: option.approveType
  64. }).then(res => {
  65. if (res.state) {
  66. let obj = res.data[0] || {};
  67. if (obj.checker) checker = JSON.parse(obj.checker).map(node => -node[node.length - 1]);
  68. if (checker.filter(id => id === user.userId).length > 0) return callback();
  69. //仅申请文件夹访问和文件下载
  70. approveTip(option)
  71. }
  72. })
  73. }
  74. const operationName = (type) => {
  75. let str = '';
  76. switch (type) {
  77. case 'access':
  78. str = '访问';
  79. break;
  80. case 'create':
  81. str = '创建';
  82. break;
  83. case 'delete':
  84. str = '删除';
  85. break;
  86. case 'edit':
  87. str = '编辑';
  88. break;
  89. case 'fileDelete':
  90. str = '删除';
  91. break;
  92. case 'fileDownload':
  93. str = '下载';
  94. break;
  95. case 'fileUpload':
  96. str = '上传';
  97. break;
  98. case 'fileView':
  99. str = '预览';
  100. break;
  101. default:
  102. break;
  103. }
  104. return str;
  105. }
  106. const approveTip = (option) => {
  107. let title = `该文件是私密文件夹,是否申请${operationName(option.type)}?`;
  108. MessageBox.confirm(title, '系统提示', {
  109. confirmButtonText: '确定',
  110. cancelButtonText: '取消',
  111. cancelButtonClass: 'cancel',
  112. confirmButtonClass: 'confirm',
  113. type: 'warning'
  114. }).then(() => {
  115. if (checker.length === 0) return Message.warning('暂未设置审核人');
  116. let folder = '';
  117. for (let i = 0; i < option.folderList.length; i++) {
  118. folder += ('-' + option.folderList[i].name);
  119. }
  120. let folderName = `【${option.typeName}${folder}-${option.name}】`;
  121. let title = `申请${operationName(option.type)}${folderName}`;
  122. message.sendFlowMessage({}, {
  123. operation: title,
  124. receiver: checker.join(','),
  125. messageType: 5,
  126. dataType: returnType(option)[option.type],
  127. dataId: option.id
  128. }).then(res => {
  129. if (res.state) Message.success('申请成功,请等待审核');
  130. })
  131. }).catch(() => {});
  132. }
  133. const returnType = (option) => {
  134. let obj = {};
  135. switch (option.approveType) {
  136. case 1:
  137. obj = {
  138. access: 1,
  139. create: 2,
  140. delete: 3,
  141. edit: 4,
  142. fileDelete: 5,
  143. fileDownload: 6,
  144. fileUpload: 7,
  145. fileView: 8
  146. }
  147. break;
  148. case 2:
  149. obj = {
  150. access: 9,
  151. create: 10,
  152. delete: 11,
  153. edit: 12,
  154. fileDelete: 13,
  155. fileDownload: 14,
  156. fileUpload: 15,
  157. fileView: 16
  158. }
  159. break;
  160. default:
  161. break;
  162. }
  163. return obj;
  164. }
  165. //密码验证
  166. const password = (option, callback) => {
  167. let title = `该文件是加密文件夹,请输入密码${operationName(option.type)}?`;
  168. MessageBox.prompt(title, '系统提示', {
  169. confirmButtonText: '确定',
  170. cancelButtonText: '取消',
  171. cancelButtonClass: 'cancel',
  172. confirmButtonClass: 'confirm',
  173. type: 'warning',
  174. inputType: 'password',
  175. customClass: 'input-message'
  176. }).then(({
  177. value
  178. }) => {
  179. if (option.approveType === 1) {
  180. validationProjectPermission(option.permissionsId, value).then(res => {
  181. passwordSuccessFunc(res, callback)
  182. })
  183. } else if (option.approveType === 2) {
  184. validationOrganizationPermission(option.id, value).then(res => {
  185. passwordSuccessFunc(res, callback)
  186. })
  187. }
  188. }).catch(() => {});
  189. }
  190. const passwordSuccessFunc = (res, callback) => {
  191. if (res.state) {
  192. if (res.data) return callback();
  193. Message.warning('密码错误');
  194. }
  195. }
  196. /*
  197. * 项目中心文件夹以及文件权限
  198. * option['type'] = access-访问/create创建/delete-删除/edit-修改/fileDelete-文件删除/fileDownload-文件下载/fileUpload-文件上传/fileView-文件预览
  199. */
  200. export function projectPermission(option, callback) {
  201. if (!user) initData();
  202. //获取最新权限
  203. option['dataType'] = 'project';
  204. option['typeName'] = '项目中心';
  205. option['approveType'] = 1;
  206. option['operationOrganizationId'] = -1;
  207. getProjectPermission(option.id, -1).then(res => {
  208. if (res.state) {
  209. option['permissions'] = res.data == null ? option.oldPermission : res.data.permissions;
  210. if (res.data) option['permissionsId'] = res.data.id;
  211. permission(option, callback);
  212. }
  213. })
  214. }
  215. /*
  216. * 企业中心文件夹以及文件权限
  217. *
  218. */
  219. export function organizationPermission(option, callback) {
  220. if (!user) initData();
  221. option['dataType'] = 'organization';
  222. option['typeName'] = '企业中心';
  223. option['approveType'] = 2;
  224. option['operationOrganizationId'] = organization.id;
  225. permission(option, callback);
  226. }
  227. /*
  228. * 下载文件
  229. *
  230. */
  231. export function downloadFileDom(data, fileName) {
  232. let blob = new Blob([data], {
  233. type: 'application/octet-stream'
  234. }); // 转化为blob对象
  235. if (typeof window.navigator.msSaveBlob !== 'undefined') {
  236. window.navigator.msSaveBlob(blob, fileName);
  237. } else {
  238. var blobURL = window.URL.createObjectURL(blob); // 将blob对象转为一个URL
  239. var tempLink = document.createElement('a'); // 创建一个a标签
  240. tempLink.style.display = 'none';
  241. tempLink.href = blobURL;
  242. tempLink.setAttribute('download', fileName); // 给a标签添加下载属性
  243. if (typeof tempLink.download === 'undefined') {
  244. tempLink.setAttribute('target', '_blank');
  245. }
  246. document.body.appendChild(tempLink); // 将a标签添加到body当中
  247. tempLink.click(); // 启动下载
  248. document.body.removeChild(tempLink); // 下载完毕删除a标签
  249. window.URL.revokeObjectURL(blobURL);
  250. }
  251. }