import CONFIG from '@/config' export const formatTime = date => { const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); const hour = date.getHours(); const minute = date.getMinutes(); const second = date.getSeconds(); return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':'); }; export const formatNumber = n => { n = n.toString(); return n[1] ? n : '0' + n; }; export function resetNum(num, type = 'first', fixNum = 6) { const pow = Math.pow(10, fixNum); if (type === 'end') { return (Number(num) / pow).toFixed(4) } return Number(num) * pow } export function setTabBarBadge (num, index = 1) { if (num < 1) { uni.removeTabBarBadge({ index }) return } uni.setTabBarBadge({ //给tabBar添加角标 index, text: String(num) }); } export function toast(message = 'message', duration = 2000) { uni.showToast({ title: message, icon: 'none', duration }) } export function getFileList (url) { const imgType = ['.png', '.jpeg', '.jpg','.xbm','.tif','.ico','.tiff','.gif','.svg','.webp','.bmp','.pjp','.apng','.pjpeg','.avif'] const urls = url ? url.split(',') : [] return urls.map(v => { const isImg = imgType.some(item => v.includes(item)) const type = isImg ? 'img' : 'video' console.Console return { type, _url: v, url: CONFIG.imgUrl + v } }) } export const debounce = (() => { let timer = null return (callback, wait = 800) => { timer&&clearTimeout(timer) timer = setTimeout(callback, wait) } })(); // 图片旋转处理 => output(base64) export const rotateBase64Img = (src, edg, callback) => { try { const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') let imgW = 0 // 图片宽度 let imgH = 0 // 图片高度 let size = 0 // canvas初始大小 if (edg % 90 !== 0) { throw new Error('旋转角度必须是90的倍数!') } (edg < 0) && (edg = (edg % 360) + 360) const quadrant = (edg / 90) % 4 // 旋转象限 const cutCoor = { sx: 0, sy: 0, ex: 0, ey: 0 } // 裁剪坐标 const image = new Image() image.src = src image.crossOrigin = 'anonymous' image.onload = function () { imgW = image.width imgH = image.height size = imgW > imgH ? imgW : imgH canvas.width = size * 2 canvas.height = size * 2 switch (quadrant) { case 0: cutCoor.sx = size cutCoor.sy = size cutCoor.ex = size + imgW cutCoor.ey = size + imgH break case 1: cutCoor.sx = size - imgH cutCoor.sy = size cutCoor.ex = size cutCoor.ey = size + imgW break case 2: cutCoor.sx = size - imgW cutCoor.sy = size - imgH cutCoor.ex = size cutCoor.ey = size break case 3: cutCoor.sx = size cutCoor.sy = size - imgW cutCoor.ex = size + imgH cutCoor.ey = size + imgW break } ctx.translate(size, size) ctx.rotate(edg * Math.PI / 180) ctx.drawImage(image, 0, 0) const imgData = ctx.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey) if (quadrant % 2 === 0) { canvas.width = imgW canvas.height = imgH } else { canvas.width = imgH canvas.height = imgW } ctx.putImageData(imgData, 0, 0) if (typeof callback === 'function') { const blob = base64ImgtoFile(canvas.toDataURL('image/png', 0.7)) const blobUrl = window.URL.createObjectURL(blob); callback(blobUrl) } } } catch (e) { console.log(e) } } function base64ImgtoFile (dataurl, filename = 'file') { //将base64格式分割:['data:image/png;base64','XXXX'] const arr = dataurl.split(',') // .*? 表示匹配任意字符到下一个符合条件的字符 刚好匹配到: // image/png const mime = arr[0].match(/:(.*?);/)[1] //image/png //[image,png] 获取图片类型后缀 const suffix = mime.split('/')[1] //png const bstr = atob(arr[1]) //atob() 方法用于解码使用 base-64 编码的字符串 let n = bstr.length const u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], `${filename}.${suffix}`, { type: mime }) }