$(function () { 'use strict'; function resetUploadedFileInfo(fileInfo) { fileInfo.SiteId = undefined; fileInfo.FileId = undefined; } window.BWA.DropZone = { create: function (options) { var id = options.id, categoryId = options.categoryId, handleSuccess = options.handleSuccess, handleRemovedFile = options.handleRemovedFile, handleRemoveBeforePromise = options.handleRemoveBeforePromise, uploadedFileInfo = options.uploadedFileInfo; // {}, //MaxFileCountCheck = options.MaxFileCountCheck var url = [ BWA.api.url, '/Upload?SiteId={0}&FileCategoryId={1}'.formati(BWA.UserInfo.SiteId(), categoryId) ].join(''); var isTempFile = false; var dropzone = new Dropzone(id, { //hcLee 2016 03 24 MaxFileCountCheck: function () { utils.toast.show('업로드 파일을 추가 할 수 없습니다. 기존파일을 삭제하고 시도해 주세요.'); }, startLoadFileCount: 0, //hcLee 2016 03 24 url: url, maxFilesize: 10, //초기 1000, 08.12: 10MB maxFiles: (_.isUndefined(options.maxFiles) === false) ? options.maxFiles : 1, uploadMultiple: false, autoProcessQueue: false,//2019-10-14 변경 addRemoveLinks: true, thumbnail: function () { }, clickable: id, dictRemoveFile: '파일 삭제', dictFileTooBig: '파일이 너무 큽니다(최대 10MB).', dictResponseError: '{{statusCode}} 코드를 서버에서 응답했습니다.', dictCancelUpload: '업로드 취소', dictCancelUploadConfirmation: '정말로 업로드를 취소하시겠습니까?', dictMaxFilesExceeded: '업로드 파일을 추가 할 수 없습니다. 기존파일을 삭제하고 시도해 주세요.', dictDefaultMessage: '파일 끌어다 놓기 혹은 클릭', dictFallbackMessage: '브라우저에서 "파일 끌어다 놓기 기능"을 지원하지 않습니다.', }); dropzone.on('success', function (file, resFileInfo, formData) { uploadedFileInfo.SiteId = resFileInfo.SiteId; uploadedFileInfo.FileId = resFileInfo.FileId; options.startLoadFileCount = 1; isTempFile = true; if (_.isUndefined(handleSuccess) === false) { handleSuccess(uploadedFileInfo); } }); dropzone.on('error', function (file, errorMessage, xhr) { isTempFile = false; resetUploadedFileInfo(uploadedFileInfo); if (_.isUndefined(handleRemovedFile) === false) { handleRemovedFile(); } utils.toast.show('업로드 작업이 실패하였습니다: ' + errorMessage, 'error'); }); dropzone.on('removedfile', function (file) { ////2019-10-14 변경 if (_.isUndefined(file.FileId)) return;//uploadedFileInfo var promise; if (_.isUndefined(handleRemoveBeforePromise)) { promise = BWA.db.CmFile.remove(file);//uploadedFileInfo } else { promise = handleRemoveBeforePromise().then(function () { return BWA.db.CmFile.remove(file);//uploadedFileInfo }); } promise.done(function () { //options.startLoadFileCount = 0; resetUploadedFileInfo(file);//uploadedFileInfo if (_.isUndefined(handleRemovedFile) === false) { handleRemovedFile(); } //utils.toast.show('파일을 삭제하였습니다.'); }); //resetUploadedFileInfo(uploadedFileInfo); //if (_.isUndefined(handleRemovedFile) === false) { // handleRemovedFile(); //} }) dropzone.resetUploadedFileInfo = function () { resetUploadedFileInfo(uploadedFileInfo); isTempFile = false; // hcLee 2016 03 24 // options.startLoadFileCount = 0; //removeAllFiles(); }; dropzone.dispose = function () { if (_.isUndefined(uploadedFileInfo.FileId) === false && isTempFile) { BWA.db.CmFile.remove(uploadedFileInfo).done(function () { resetUploadedFileInfo(uploadedFileInfo); isTempFile = false; }); } }; dropzone.setTempFileFlag = function (value) { isTempFile = value; }; dropzone.isTempFile = function () { return isTempFile; }; return dropzone; }, setupDropZoneEditModeSubscribeInPopupFunc: function (options) { var dropZoneSelector = options.dropZoneSelector, dataViewModel = options.dataViewModel, categoryId = options.categoryId, tableName = options.tableName, fileIdFieldName = options.fileIdFieldName, handleAllocateDropZone = options.handleAllocateDropZone, handleReleaseDropZone = options.handleReleaseDropZone; var timer = null; var dropZone = null; var uploadedFileInfo = {}; return function (value) { if (value) { if (timer) { clearInterval(timer); } timer = setInterval(function () { if ($(dropZoneSelector).length) { if (_.isNull(dropZone)) { dropZone = BWA.DropZone.create({ id: dropZoneSelector, categoryId: categoryId, uploadedFileInfo: uploadedFileInfo, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject(tableName, dataViewModel); var valueObject = {}; valueObject[fileIdFieldName] = null; var promise = BWA.db[tableName].update(keys, valueObject); promise.then(function () { dataViewModel[fileIdFieldName](null); }); return promise; }, handleSuccess: function (fileInfo) { dataViewModel[fileIdFieldName](fileInfo.FileId); }, handleRemovedFile: function () { dropZone.resetUploadedFileInfo(); dataViewModel[fileIdFieldName](null); }, }); handleAllocateDropZone(dropZone); uploadedFileInfo.SiteId = dataViewModel.SiteId(); uploadedFileInfo.FileId = dataViewModel[fileIdFieldName](); if (uploadedFileInfo.FileId) { BWA.db.CmFile.byKey(uploadedFileInfo).done(function (data) { //dropZone.removeAllFiles(); dropZone.emit('addedfile', { name: data.Name, size: data.FileSize }); dropZone.setTempFileFlag(false); //dropZone.options.maxFiles = 0; // 이게 있으면 삭제후 다시 업로드가 안 된다. options.startLoadFileCount = 1; }); } } } }, 100); } else { if (timer) { clearInterval(timer); timer = null; } if (dropZone) { dropZone.dispose(); } dropZone = null; handleReleaseDropZone(); } }; } // uploadedFileInfo에 FileId가 남아있다는 의미는 업로드는 성공했으나, 사용되지 않음을 의미한다. // 그러므로 업로드 성공후 CmFacility나 FmsDrawingHistory 등에 연결했으면 uploadedFileInfo를 reset 해야 한다. // 사용하지 않는다? //dispose: function(uploadedFileInfo, dropzone) { // if (_.isUndefined(uploadedFileInfo.FileId) === false) { // BWA.db.CmFile.remove(uploadedFileInfo).done(function() { // resetUploadedFileInfo(uploadedFileInfo); // }); // } //} }; });