datacenter.js 6.8 KB

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