datacenter.js 6.8 KB

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