| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 | $(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);        //        });        //    }        //}    };});
 |