| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import { map, zipObject } from 'lodash-es';
- import dayjs from 'dayjs';
- import weekday from 'dayjs/plugin/weekday';
- import 'dayjs/locale/zh-cn';
- import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
- dayjs.extend(isSameOrBefore);
- // config dayjs
- dayjs.extend(weekday);
- dayjs.locale('zh-cn');
- export function formatterDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
- if (!date) {
- return '-';
- }
- return dayjs(date).format(format);
- }
- export function formatterDateWithTypeAndTime(type = 'year', num = 1) {
- return dayjs().subtract(num, type);
- }
- // range : date year month quarter week
- // type : start end
- export function rangeDate(
- type = 'start',
- range = 'date',
- format = 'YYYY-MM-DD HH:mm:ss'
- ) {
- let result = '';
- if (type === 'start') {
- result = dayjs()
- .startOf(range)
- .set('hour', type === 'start' ? 0 : 23)
- .set('minute', type === 'start' ? 0 : 59)
- .set('second', type === 'start' ? 0 : 59)
- .format(format);
- } else {
- result = dayjs()
- .endOf(range)
- .set('hour', type === 'start' ? 0 : 23)
- .set('minute', type === 'start' ? 0 : 59)
- .set('second', type === 'start' ? 0 : 59)
- .format(format);
- }
- return result;
- }
- export function diffDateMinutes(startDate, endDate) {
- const isNormalDiffDate = dayjs(startDate).isSameOrBefore(dayjs(endDate));
- if (isNormalDiffDate) {
- return dayjs(endDate).diff(startDate, 'minute');
- } else {
- return '';
- }
- }
- export function subtractDate(num, type = 'year', format = 'YYYY-MM-DD', date) {
- // type:day week month quarter year hour minute
- return dayjs(date).subtract(num, type).format(format);
- }
- export function getTypeStartDay(type = 'year', format = 'YYYY-MM-DD') {
- return dayjs().startOf(type).add(1, 'day').format(format);
- }
- export function addDate(startDate, num, type = 'year', format = 'YYYY-MM-DD') {
- // type:day week month quarter year hour minute
- return dayjs(startDate).add(num, type).format(format);
- }
- // 消息中心跳转
- export function generateQueryString(obj) {
- const queryString = Object.entries(obj)
- .map(
- ([key, value]) =>
- `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
- )
- .join('&');
- return queryString;
- }
- export function normalize(dataList, key = 'id') {
- return zipObject(map(dataList, key), dataList);
- }
- function transformLat(x, y) {
- const pi = 3.1415926535897932384626;
- let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
- ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
- ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
- ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
- return ret;
- }
- function transformLng(x, y) {
- const pi = 3.1415926535897932384626;
- let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
- ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
- ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
- ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
- return ret;
- }
- // 2. wgs84转gcj02的核心算法(无需调用API,本地计算)
- export function wgs84togcj02(lng, lat) {
- const pi = 3.1415926535897932384626;
- const a = 6378245.0;
- const ee = 0.00669342162296594323;
- let dLat = transformLat(lng - 105.0, lat - 35.0);
- let dLng = transformLng(lng - 105.0, lat - 35.0);
- const radLat = lat / 180.0 * pi;
- let magic = Math.sin(radLat);
- magic = 1 - ee * magic * magic;
- const sqrtMagic = Math.sqrt(magic);
- dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
- dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
- const mgLat = lat + dLat;
- const mgLng = lng + dLng;
- return { lng: mgLng, lat: mgLat };
- }
- export function convertToGrayscale(url) {
- return new Promise((resolve) => {
- const img = new Image();
- img.crossOrigin = 'Anonymous';
- img.onload = () => {
- const canvas = document.createElement('canvas');
- canvas.width = img.width;
- canvas.height = img.height;
- const ctx = canvas.getContext('2d');
- ctx.drawImage(img, 0, 0);
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
- const data = imageData.data;
- for (let i = 0; i < data.length; i += 4) {
- const gray =
- 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];
- data[i] = data[i + 1] = data[i + 2] = gray;
- }
- ctx.putImageData(imageData, 0, 0);
- resolve(canvas.toDataURL());
- };
- img.src = url;
- });
- }
- export function numToFixed(val, count = 2) {
- if (!Number(val)) {
- return 0;
- }
- return Number(val).toFixed(count);
- }
|