import accounting from 'accounting'; import {ref} from 'vue'; accounting.settings.currency = { ...accounting.settings.currency, precision: 2, format: '%v %s', decimal: ',', thousand: '.', }; export default function () { const dropping = ref(false); async function read(file) { return new Promise((resolve) => { var reader = new FileReader(); reader.onload = function () { var r = reader.result; resolve({ content: r.substr(r.search(',') + 1), name: file.name, type: file.type, size: file.size, }); }; reader.readAsDataURL(file); }); } function onDragEnter(e) { e.preventDefault(); e.stopPropagation(); dropping.value = true; } function onDragOver(e) { e.preventDefault(); e.stopPropagation(); } function onDragLeave(e) { e.preventDefault(); e.stopPropagation(); dropping.value = false; } function processDrop(e, maxFiles) { e.preventDefault(); e.stopPropagation(); let dt = e.dataTransfer; let files = [...dt.files].slice(0, maxFiles ? maxFiles : dt.files.length); let result = []; for (const f in files) { if (typeof files[f] === 'object') { result.push(files[f]); } } dropping.value = false; return result; } function size(file) { if (file.size < 1000) { return accounting.formatMoney(file.size, {symbol: 'B'}); } if (file.size < 1000000) { return accounting.formatMoney(file.size / 1000, {symbol: 'KB'}); } if (file.size < 1000000000) { return accounting.formatMoney(file.size / 1000000, {symbol: 'MB'}); } if (file.size < 1000000000000) { return accounting.formatMoney(file.size / 1000000000, {symbol: 'GB'}); } return ''; } return {dropping, onDragLeave, onDragOver, onDragEnter, processDrop, read}; }