424b6974c2fde4557c4a514ef1c91c93885e2a86.svn-base 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. $(function () {
  2. 'use strict';
  3. function resetUploadedFileInfo(fileInfo) {
  4. fileInfo.SiteId = undefined;
  5. fileInfo.FileId = undefined;
  6. }
  7. window.BWA.DropZone = {
  8. create: function (options) {
  9. var id = options.id,
  10. categoryId = options.categoryId,
  11. handleSuccess = options.handleSuccess,
  12. handleRemovedFile = options.handleRemovedFile,
  13. handleRemoveBeforePromise = options.handleRemoveBeforePromise,
  14. uploadedFileInfo = options.uploadedFileInfo; // {},
  15. //MaxFileCountCheck = options.MaxFileCountCheck
  16. var url = [
  17. BWA.api.url,
  18. '/Upload?SiteId={0}&FileCategoryId={1}'.formati(BWA.UserInfo.SiteId(), categoryId)
  19. ].join('');
  20. var isTempFile = false;
  21. var dropzone = new Dropzone(id, {
  22. //hcLee 2016 03 24
  23. MaxFileCountCheck: function () {
  24. utils.toast.show('업로드 파일을 추가 할 수 없습니다. 기존파일을 삭제하고 시도해 주세요.');
  25. },
  26. startLoadFileCount: 0,
  27. //hcLee 2016 03 24
  28. url: url,
  29. maxFilesize: 10, //초기 1000, 08.12: 10MB
  30. maxFiles: (_.isUndefined(options.maxFiles) === false) ? options.maxFiles : 1,
  31. uploadMultiple: false,
  32. autoProcessQueue: false,//2019-10-14 변경
  33. addRemoveLinks: true,
  34. thumbnail: function () {
  35. },
  36. clickable: id,
  37. dictRemoveFile: '파일 삭제',
  38. dictFileTooBig: '파일이 너무 큽니다(최대 10MB).',
  39. dictResponseError: '{{statusCode}} 코드를 서버에서 응답했습니다.',
  40. dictCancelUpload: '업로드 취소',
  41. dictCancelUploadConfirmation: '정말로 업로드를 취소하시겠습니까?',
  42. dictMaxFilesExceeded: '업로드 파일을 추가 할 수 없습니다. 기존파일을 삭제하고 시도해 주세요.',
  43. dictDefaultMessage: '파일 끌어다 놓기 혹은 클릭',
  44. dictFallbackMessage: '브라우저에서 "파일 끌어다 놓기 기능"을 지원하지 않습니다.',
  45. });
  46. dropzone.on('success', function (file, resFileInfo, formData) {
  47. uploadedFileInfo.SiteId = resFileInfo.SiteId;
  48. uploadedFileInfo.FileId = resFileInfo.FileId;
  49. options.startLoadFileCount = 1;
  50. isTempFile = true;
  51. if (_.isUndefined(handleSuccess) === false) {
  52. handleSuccess(uploadedFileInfo);
  53. }
  54. });
  55. dropzone.on('error', function (file, errorMessage, xhr) {
  56. isTempFile = false;
  57. resetUploadedFileInfo(uploadedFileInfo);
  58. if (_.isUndefined(handleRemovedFile) === false) {
  59. handleRemovedFile();
  60. }
  61. utils.toast.show('업로드 작업이 실패하였습니다: ' + errorMessage, 'error');
  62. });
  63. dropzone.on('removedfile', function (file) { ////2019-10-14 변경
  64. if (_.isUndefined(file.FileId)) return;//uploadedFileInfo
  65. var promise;
  66. if (_.isUndefined(handleRemoveBeforePromise)) {
  67. promise = BWA.db.CmFile.remove(file);//uploadedFileInfo
  68. }
  69. else {
  70. promise = handleRemoveBeforePromise().then(function () {
  71. return BWA.db.CmFile.remove(file);//uploadedFileInfo
  72. });
  73. }
  74. promise.done(function () {
  75. //options.startLoadFileCount = 0;
  76. resetUploadedFileInfo(file);//uploadedFileInfo
  77. if (_.isUndefined(handleRemovedFile) === false) {
  78. handleRemovedFile();
  79. }
  80. //utils.toast.show('파일을 삭제하였습니다.');
  81. });
  82. //resetUploadedFileInfo(uploadedFileInfo);
  83. //if (_.isUndefined(handleRemovedFile) === false) {
  84. // handleRemovedFile();
  85. //}
  86. })
  87. dropzone.resetUploadedFileInfo = function () {
  88. resetUploadedFileInfo(uploadedFileInfo);
  89. isTempFile = false;
  90. // hcLee 2016 03 24
  91. // options.startLoadFileCount = 0;
  92. //removeAllFiles();
  93. };
  94. dropzone.dispose = function () {
  95. if (_.isUndefined(uploadedFileInfo.FileId) === false && isTempFile) {
  96. BWA.db.CmFile.remove(uploadedFileInfo).done(function () {
  97. resetUploadedFileInfo(uploadedFileInfo);
  98. isTempFile = false;
  99. });
  100. }
  101. };
  102. dropzone.setTempFileFlag = function (value) {
  103. isTempFile = value;
  104. };
  105. dropzone.isTempFile = function () {
  106. return isTempFile;
  107. };
  108. return dropzone;
  109. },
  110. setupDropZoneEditModeSubscribeInPopupFunc: function (options) {
  111. var dropZoneSelector = options.dropZoneSelector,
  112. dataViewModel = options.dataViewModel,
  113. categoryId = options.categoryId,
  114. tableName = options.tableName,
  115. fileIdFieldName = options.fileIdFieldName,
  116. handleAllocateDropZone = options.handleAllocateDropZone,
  117. handleReleaseDropZone = options.handleReleaseDropZone;
  118. var timer = null;
  119. var dropZone = null;
  120. var uploadedFileInfo = {};
  121. return function (value) {
  122. if (value) {
  123. if (timer) {
  124. clearInterval(timer);
  125. }
  126. timer = setInterval(function () {
  127. if ($(dropZoneSelector).length) {
  128. if (_.isNull(dropZone)) {
  129. dropZone = BWA.DropZone.create({
  130. id: dropZoneSelector,
  131. categoryId: categoryId,
  132. uploadedFileInfo: uploadedFileInfo,
  133. handleRemoveBeforePromise: function () {
  134. var keys = BWA.db.extractKeysObject(tableName, dataViewModel);
  135. var valueObject = {};
  136. valueObject[fileIdFieldName] = null;
  137. var promise = BWA.db[tableName].update(keys, valueObject);
  138. promise.then(function () {
  139. dataViewModel[fileIdFieldName](null);
  140. });
  141. return promise;
  142. },
  143. handleSuccess: function (fileInfo) {
  144. dataViewModel[fileIdFieldName](fileInfo.FileId);
  145. },
  146. handleRemovedFile: function () {
  147. dropZone.resetUploadedFileInfo();
  148. dataViewModel[fileIdFieldName](null);
  149. },
  150. });
  151. handleAllocateDropZone(dropZone);
  152. uploadedFileInfo.SiteId = dataViewModel.SiteId();
  153. uploadedFileInfo.FileId = dataViewModel[fileIdFieldName]();
  154. if (uploadedFileInfo.FileId) {
  155. BWA.db.CmFile.byKey(uploadedFileInfo).done(function (data) {
  156. //dropZone.removeAllFiles();
  157. dropZone.emit('addedfile', {
  158. name: data.Name,
  159. size: data.FileSize
  160. });
  161. dropZone.setTempFileFlag(false);
  162. //dropZone.options.maxFiles = 0; // 이게 있으면 삭제후 다시 업로드가 안 된다.
  163. options.startLoadFileCount = 1;
  164. });
  165. }
  166. }
  167. }
  168. }, 100);
  169. }
  170. else {
  171. if (timer) {
  172. clearInterval(timer);
  173. timer = null;
  174. }
  175. if (dropZone) {
  176. dropZone.dispose();
  177. }
  178. dropZone = null;
  179. handleReleaseDropZone();
  180. }
  181. };
  182. }
  183. // uploadedFileInfo에 FileId가 남아있다는 의미는 업로드는 성공했으나, 사용되지 않음을 의미한다.
  184. // 그러므로 업로드 성공후 CmFacility나 FmsDrawingHistory 등에 연결했으면 uploadedFileInfo를 reset 해야 한다.
  185. // 사용하지 않는다?
  186. //dispose: function(uploadedFileInfo, dropzone) {
  187. // if (_.isUndefined(uploadedFileInfo.FileId) === false) {
  188. // BWA.db.CmFile.remove(uploadedFileInfo).done(function() {
  189. // resetUploadedFileInfo(uploadedFileInfo);
  190. // });
  191. // }
  192. //}
  193. };
  194. });