const fileHeader = { "/9j": { type: 'image', suffix: "JPG" }, "iVB": { type: 'image', suffix: "PNG" }, "Qk0": { type: 'image', suffix: "BMP" }, "SUk": { type: 'image', suffix: "TIFF" }, "JVB": { type: 'image', suffix: "PDF" }, "UEs": { type: 'image', suffix: "OFD" }, "IyF": { type: 'audio', suffix: "AMR" } }; /** * 根据base64的前三个字符判断文件格式 * @param base64 * @returns base64 string */ export function addBase64head(base64) { if (base64.startsWith('data:/') || base64.startsWith('http')) { return base64; } const head = base64.substr(0, 3); if (fileHeader[head]) { return `data:${fileHeader[head].type}/${fileHeader[head].suffix.toLowerCase()};base64,${base64}`; } // 直接返回 return base64; } // 格式化时间 export function formatTime(time, format, locale) { format = Object.assign({ year: locale.message.year, month: locale.message.month, day: locale.message.day, hour: locale.message.hour, minute: locale.message.minute }, format || {}); if (!time) { return null; } const date = new Date(time); const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); let hour = date.getHours() + ""; if (hour.length < 2) { hour = '0' + hour; } let minute = date.getMinutes() + ""; if (minute.length < 2) { minute = '0' + minute; } const now = new Date(); const dValue = judgeDay(date); if (dValue === -1) { // let yesterday = locale ? locale.conversation.yesterday : ''; let yesterday = locale.conversation.yesterday; // return `${yesterday} ${hour}${format.hour}${minute}${format.minute}`; // return `${yesterday} ${hour}${format.hour}${minute}${format.minute}`; return `${yesterday}`; } if (now.getFullYear() === year) { if (now.toDateString() === date.toDateString()) { return `${hour}:${minute}`; } return `${month}/${day}`; } return locale.area === 'zh_CN' ? `${year}/${month}/${day}` : `${month}/${day}/${year}`; // else if (dValue === -2) { // // let before = locale ? locale.conversation.before : ''; // let before = locale.conversation.before; // return `${before} ${hour}${format.hour}${minute}${format.minute}`; // } // 同年 // if (now.getFullYear() === year) { // // 同月 // if (now.getMonth() + 1 === month) { // // 同天 // if (now.toDateString() === date.toDateString()) { // return `${hour}${format.hour}${minute}${format.minute}`; // } else { // return `${month}${format.month}${day}${format.day} ${hour}${format.hour}${minute}${format.minute}`; // } // } else { // return `${month}${format.month}${day}${format.day} ${hour}${format.hour}${minute}${format.minute}`; // } // } // return `${year}${format.year}${month}${format.month}`; } function judgeDay(sourceDate, targetDate = new Date()) { var year = sourceDate.getFullYear(); var month = sourceDate.getMonth() + 1; var day = sourceDate.getDate(); var d1 = new Date(year + '/' + month + '/' + day).getTime(); var y = targetDate.getFullYear(); var m = targetDate.getMonth() + 1; var d = targetDate.getDate(); var d2 = new Date(y + '/' + m + '/' + d).getTime(); var iday = (d1 - d2) / 1000 / 60 / 60 / 24; return iday; } export function getCursortPosition(element) { var caretOffset = 0; var doc = element.ownerDocument || element.document; var win = doc.defaultView || doc.parentWindow; var sel; if (typeof win.getSelection != "undefined") { //谷歌、火狐 sel = win.getSelection(); if (sel.rangeCount > 0) { //选中的区域 var range = win.getSelection().getRangeAt(0); var preCaretRange = range.cloneRange(); //克隆一个选中区域 preCaretRange.selectNodeContents(element); //设置选中区域的节点内容为当前节点 preCaretRange.setEnd(range.endContainer, range.endOffset); //重置选中区域的结束位置 caretOffset = preCaretRange.toString().length; } } else if ((sel = doc.selection) && sel.type != "Control") { //IE var textRange = sel.createRange(); var preCaretTextRange = doc.body.createTextRange(); preCaretTextRange.moveToElementText(element); preCaretTextRange.setEndPoint("EndToEnd", textRange); caretOffset = preCaretTextRange.text.length; } return caretOffset; } /** * 获取光标前的文本 * @param containerEl * @returns */ export function getTextBeforeCursor(containerEl) { var precedingChar = '', sel, range, precedingRange; if (window.getSelection) { sel = window.getSelection(); if (sel.rangeCount > 0) { range = sel.getRangeAt(0).cloneRange(); range.collapse(true); range.setStart(containerEl, 0); precedingChar = range.cloneContents(); } } else if ((sel = document.selection)) { range = sel.createRange(); precedingRange = range.duplicate(); precedingRange.moveToElementText(containerEl); precedingRange.setEndPoint("EndToStart", range); precedingChar = precedingRange.htmlText; } return [precedingChar, range]; } export function delHtmlTag(str) { //正则去掉所有的html标记 return str.replace(/<[^>]+>/g, ''); } export function deepClone(target) { let result; if (typeof target === 'object') { if (Array.isArray(target)) { result = []; for (const i in target) { result.push(deepClone(target[i])); } } else if (target === null) { result = null; } else if (target instanceof RegExp) { result = target; } else { result = {}; for (const i in target) { result[i] = deepClone(target[i]); } } } else { result = target; } return result; } export function formatTextMessage(content) { // const urlReg = new RegExp('(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]', 'g'); const urlReg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g; // 简单的过滤 content = content.replace('<', '<'); content = content.replace('>', '>'); if (urlReg.test(content)) { content = content.replace(urlReg, a => { let prefix = ''; if (a.indexOf('http:') < 0 && a.indexOf('https:') < 0) { prefix = '//'; } return `${a}`; }); } return content; }