import { reverse, map, minBy, maxBy, get } from 'lodash'; import moment, { Moment } from 'moment'; import { ConstantListItem } from '@/common/types'; export function formatNumber(count: number) { let list = reverse(count.toString().split('')); if (list.length < 4) return count; const length = list.length; return reverse( map(list, (char: string, idx: number) => { return (idx + 1) % 3 === 0 && idx !== 0 && idx !== length ? `,${char}` : char; }), ); } /** * 通过value获取数组某项的值 * @param list * @param key * @param fieldNames */ export function getTextByList( list: ConstantListItem[], key: any, fieldNames?: { value?: string; label?: string; }, ): any { let current = null; const defaultFieldNames = { value: 'value', label: 'label', }; const newFieldNames = Object.assign(defaultFieldNames, fieldNames); list.forEach(item => { if (item[newFieldNames.value] === key) { current = item; } }); if (current) { return current[newFieldNames.label]; } else { return ''; } } export const toFixed = (num: number, fractionDigits: number) => { const str = num?.toFixed ? num?.toFixed(fractionDigits) : ''; return str.replace(/\.?0+$/g, ''); }; /** * 格式化时间 * @param time 需要格式化的时间 * @param formatStr 格式化的模板 */ export function formatTime( time: number | moment.Moment, formatStr = 'YYYY-MM-DD HH:mm:ss', ): string { if (!time) return ''; return moment(time).format(formatStr); } /** * * @param imgUrl 图片的url地址 * @param name 图片的名称 */ export function imgDownload(imgUrl: string, name?: string): void { let a = document.createElement('a'); let event = new MouseEvent('click'); if (name) { a.download = `${name}-${moment().format('YYYY-MM-DD HH:mm:ss')}.jpg`; } else { a.download = `down_load-${moment().format('YYYY-MM-DD HH:mm:ss')}.jpg`; } a.href = imgUrl; // 触发a的单击事件 a.dispatchEvent(event); // 生成一个图片 // const img = new Image(); // const url = imgUrl.replace('http:', 'https:'); // img.src = url; // img.crossOrigin = 'anonymous'; // img.onerror = e => { // console.error('图片转换格式失败'); // }; // img.onload = () => { // // 创建一个canvas // let canvas = document.createElement('canvas'); // canvas.width = img.width; // canvas.height = img.height; // // @ts-ignore // canvas.getContext('2d').drawImage(img, 0, 0); // const url = canvas.toDataURL('image/png'); // // @ts-ignore // let a = document.createElement('a'); // let event = new MouseEvent('click'); // if (name) { // a.download = `${name}-${moment().format('YYYY-MM-DD HH:mm:ss')}.jpg`; // } else { // a.download = `down_load-${moment().format('YYYY-MM-DD HH:mm:ss')}.jpg`; // } // a.href = url; // // 触发a的单击事件 // a.dispatchEvent(event); // }; } /** * 复制到剪切板 * @param text 需要复制的文本 */ export const copyText = (text: string) => { return new Promise((resolve, reject) => { let transfer = document.createElement('input'); document.body.appendChild(transfer); transfer.value = text; transfer.focus(); transfer.select(); if (document.execCommand('copy')) { transfer.blur(); resolve(true); } else { reject(false); } document.body.removeChild(transfer); }).catch(() => { console.log('复制到剪贴板失败了'); }); }; export const downloadFile = (fileName: string, totken: string) => { function createObjectURL(object) { return window.URL ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object); } var xhr = new XMLHttpRequest(); var formData = new FormData(); xhr.open( 'get', `${window.BASE_URL}/oss/v1/private/download/stream?fileName=${fileName}`, ); //url填写后台的接口地址,如果是post,在formData append参数 xhr.setRequestHeader('authorization', `Bearer ${totken}`); xhr.responseType = 'blob'; xhr.onload = function(e) { if (this.status == 200) { var blob = this.response; if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, fileName); } else { var a = document.createElement('a'); var url = createObjectURL(blob); a.href = url; a.download = fileName; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); } } }; xhr.send(formData); }; export const formatLnglatToArray = (lnglat: any) => { if (lnglat && Object.keys(lnglat).length) { return [lnglat.longitude, lnglat.latitude]; } else { return lnglat; } }; export const formatArrayToLnglat = (lnglat: any) => { if (lnglat && Array.isArray(lnglat) && lnglat.length > 0) { return { longitude: lnglat[0], latitude: lnglat[1] }; } else if (lnglat && Object.keys(lnglat).length) { return lnglat; } else { return null; } };