This commit is contained in:
给我
2026-04-10 17:10:36 +08:00
parent 368ed7897b
commit ef83eeb5fe
767 changed files with 167713 additions and 0 deletions

574
src/utils/tools.js Normal file
View File

@ -0,0 +1,574 @@
import axios from 'axios';
import router from "../router";
import {
Toast
} from "vant";
import {
baseUrl2
} from './request';
// 转换时间格式
export function timeValidate(date, type) {
const time = date ? new Date(date) : new Date()
const yyyy = time.getFullYear()
const MM = (time.getMonth() + 1).toString().padStart(2, 0)
const dd = time.getDate().toString().padStart(2, '0')
const hh = time.getHours().toString().padStart(2, '0')
const mm = time.getMinutes().toString().padStart(2, '0')
const ss = time.getSeconds().toString().padStart(2, '0')
if (type == 'ymd') {
return `${yyyy}-${MM}-${dd}`;
}
if (type == 'md') {
return `${MM}.${dd}`
}
return `${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss}`
}
// 获取当前近多少天 7后7天 -7 前五天
export function getRecentDay(n, type) {
var currentDate = new Date();
var preDate = new Date(currentDate.getTime() + n * 24 * 3600 * 1000)
let year = preDate.getFullYear()
let mon = preDate.getMonth() + 1
let day = preDate.getDate()
let s = year + '-' + (mon < 10 ? ('0' + mon) : mon) + '-' + (day < 10 ? ('0' + day) : day)
if (type == 'ymd') {
return s
} else {
return s + ' 00:00:00'
}
}
// 获取n近7月 7后7 -7 前
export function getnRencebtMonth(n) {
let date = new Date();
date.setMonth(date.getMonth() - n)
date.toLocaleDateString()
let y = date.getFullYear()
let m = date.getMonth() + 1
m = m < 10 ? ('0' + m) : m + ''
return y + m
}
/**
* 数据去重 相同数据值累加
* @param {Object} array 数据
*/
export function setArray(array) {
let newArr = []
array.forEach(item => {
const res = newArr.findIndex(ol => {
//组织机构代码相同 并且报警类别相同
return item.ssbmdm == ol.ssbmdm && item.bjlb == ol.bjlb
})
if (res !== -1) {
newArr[res].sl = newArr[res].sl + item.sl
} else {
newArr.push(item)
}
})
return newArr
}
/**
* 合并数据
* @param {Object} array 数据
*/
export function hbArray(array, item1, item2, item3) {
let newArr = []
array.forEach(item => {
const res = newArr.findIndex(ol => {
//组织机构代码相同 并且报警类别相同
return item.product == ol.product
})
if (res !== -1) {
newArr[res][item1] = newArr[res][item1] + item[item1]
newArr[res][item2] = newArr[res][item2] + item[item2]
newArr[res][item3] = newArr[res][item3] + item[item3]
} else {
newArr.push(item)
}
})
return newArr
}
/**
* 时间格式
* @param {*} type
* @param {*} time
*/
export function dateFormat(type, time) {
let date
if (time) {
date = new Date(time);
} else {
date = new Date();
}
let year = date.getFullYear();
let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
if (type == 'all') {
//格式化日期时间
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} else if (type == 'z') {
//前一天
let date1 = new Date(date.getTime() - 24 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == 'z2') {
//前2天
let date1 = new Date(date.getTime() - 48 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == 'h') {
//后一天
let date1 = new Date(date.getTime() + 24 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == '3') {
//近三天
let date1 = new Date(date.getTime() - 72 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == 'week') {
//近7天
let date1 = new Date(date.getTime() - 168 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == 'month') {
//近一月
let date1 = new Date(date.getTime() - 720 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == '3month') {
//近三月
let date1 = new Date(date.getTime() - 2160 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else if (type == '6month') {
//近半年
let date1 = new Date(date.getTime() - 4320 * 60 * 60 * 1000)
return setTimeTormat(date1);
} else {
//当天日期
return `${year}-${month}-${day}`;
}
}
//设置时间
function setTimeTormat(date) {
let year1 = date.getFullYear();
let month1 =
date.getMonth() + 1 < 10 ?
"0" + (date.getMonth() + 1) :
date.getMonth() + 1;
let day1 = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return `${year1}-${month1}-${day1}`;
}
/**
* 获取类型名称
* @param {*} type
*/
export function getTypeName(type) {
let name
switch (type) {
case 'zjq':
name = '总数'
break
case 'zdjq':
name = '重大警情'
break
case 'wffz':
name = '违法犯罪'
break
case 'jmjq':
name = '街面警情'
break
}
return name
}
/**
* 警情数据去重
* @param {Object} array 数据
*/
export function setArrayQc(array) {
let newArr = []
array.forEach(item => {
const res = newArr.findIndex(ol => {
return item.type == ol.type
})
if (res !== -1) {
newArr[res] = item
} else {
newArr.push(item)
}
})
return newArr
}
//深珀方面警情相关请求
export function spPostRequest(url, data = {}, fun) {
axios.post(`${baseUrl2}/xz1Api${url}`, data, {}).then(res => {
fun(res.data)
})
}
//托尔斯走访记录相关请求
export function trsGetRequest(url, params = {}, token, fun) {
axios.get(`${baseUrl2}/trs2Api${url}`, {
params,
headers: {
"Authorization": `Bearer ${token}`,
"User-Agent": "trs",
"End-Mode": "app"
},
}).then(res => {
fun(res.data)
})
}
//托尔斯走访记录相关请求
export function trsPostRequest(url, data = {}, token, fun) {
axios.post(`${baseUrl2}/trs2Api${url}`, data, {
headers: {
"Authorization": `Bearer ${token}`,
"User-Agent": "trs",
"End-Mode": "app"
}
}).then(res => {
fun(res.data)
})
}
export function trs2PostRequest(url, data, token, fun) {
axios.post(`${baseUrl2}/trs2Api${url}?${data}`, {}, {
headers: {
"Authorization": `Bearer ${token}`,
"User-Agent": "trs",
"End-Mode": "app"
}
}).then(res => {
fun(res.data)
})
}
//获取托尔斯token
export function getTrsToken(params, fun) {
axios.get(`${baseUrl2}/mosty-api/mosty-base/trs/token/new/getToken`, {
params
}, {}).then(res => {
fun(res.data)
})
}
//源码实有人口任务相关请求
export function ymGetRequest(url, params = {}, token, fun) {
axios.get(`${baseUrl2}/ymApi/af-api/api${url}`, {
params,
headers: {
"Authorization": token,
},
}).then(res => {
fun(res.data)
})
}
//源码实有人口任务相关请求
export function ymPostRequest(url, data = {}, token, fun) {
axios.post(`${baseUrl2}/ymApi/af-api/api${url}`, data, {
headers: {
"Authorization": token,
}
}).then(res => {
fun(res.data)
})
}
//获取源码token
export function getYmToken(data, fun) {
axios.post(`${baseUrl2}/ymApi/af-api/login`, data, {}).then(res => {
fun(res.data)
}).catch((err) => {
hintToast("您没有权限,请联系管理员!")
});
}
//获取模板内容信息
export function getPzPlateList(bklx) {
if (bklx) {
let plateList = []
let module = JSON.parse(getStorage("defaultModule"))
//模板信息
if (module) {
let info = module.find(item => {
return bklx == item.bklx
})
//模板内容信息
if (info) plateList = info.plateList
}
return plateList
}
}
/**
* 计算两点之间距离
* @export
* @param {*} lat1
* @param {*} lng1
* @param {*} lat2
* @param {*} lng2
*/
export function getDistance(lat1, lng1, lat2, lng2) {
let redLat1 = lat1 * Math.PI / 180.0;
let redLat2 = lat2 * Math.PI / 180.0;
let a = redLat1 - redLat2;
let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(redLat1) * Math.cos(redLat2) * Math.pow(Math
.sin(b / 2), 2)));
s = s * 6378.137;
s = Math.round(s * 10000) / 10000
s = s * 1000
return s
}
/**
* @export 函数节流
* @param {*} fn 函数
* @param {number} [time=500] 延迟延迟执行毫秒数
* @param {number} [type=2] 1 时间戳 2 定时器
*/
export function throtter(fn, time = 500, type = 2) {
let previous, timeout
if (type == 1) previous = 0
return function () {
let context = this
let args = arguments
if (type == 1) {
let now = Date.now()
if (now - previous > time) {
fn.apply(context, args);
previous = now;
}
} else {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null
fn.apply(context, args);
}, time)
}
}
}
}
/**
*对象数组排序
* @export
* @param {*} attr 排序的字段
* @param {*} rev true 升序 false 降序
*/
export function compare(attr, rev) {
if (rev == undefined) {
rev = 1
} else {
rev = rev ? 1 : -1
}
return (a, b) => {
a = a[attr]
b = b[attr]
if (a > b) {
return rev * -1
}
if (a < b) {
return rev * 1
}
return 0
}
}
/**
* 获取base64地址
* @param {*} fun 回调
* @param {*} url 地址
*/
export function getBase64(fun, url) {
if (fun && typeof fun === 'function') {
axios.get(`${baseUrl2}/mosty-api/mosty-base/image/base64`, {
params: {
url
}
}).then((res) => {
fun(`data:image/jpeg;base64,${res.data.data}`);
}).catch((err) => {
fun("");
});
} else {
// Promise模式
return new Promise((resolve, reject) => {
axios.get(`${baseUrl2}/mosty-api/mosty-base/image/base64`, {
params: { url }
}).then((res) => {
resolve(`data:image/jpeg;base64,${res.data.data}`);
}).catch((err) => {
console.error('获取base64失败:', err);
resolve("");
});
});
}
}
/**
* 文件是否是图片
* @param {*} val
*/
export function IS_PNG(val) {
return ['bmp', 'jpg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf', 'ufo',
'eps', 'ai', 'raw', 'wmf', 'webp', 'avif', 'apng'
].indexOf(val.toLowerCase()) !== -1
}
/**
* 文件是否是音频
* @param {*} val
*/
export function IS_MP3(val) {
return ['mp3', 'wav', 'wma', 'mp2', 'flac', 'midi', 'ra', 'ape', 'aac', 'cda', 'mov'].indexOf(val.toLowerCase()) !==
-1
}
/**
* 文件是否是视频
* @param {*} val
*/
export function IS_MP4(val) {
return ['avi', 'wmv', 'mpeg', 'mp4', 'm4v', 'mov', 'asf', 'fiv', 'f4v', 'mvb', 'rm', '3gp', 'vob'].indexOf(val
.toLowerCase()) !== -1
}
/**
* 数据去重
* @param {*} array 去重数据
* @param {*} val 去重字段
*/
export function dataQc(array, val) {
let newArr = []
array.forEach(item => {
const res = newArr.findIndex(ol => {
return item[val] == ol[val]
})
if (res !== -1) {
newArr[res] = item
} else {
newArr.push(item)
}
})
return newArr
}
//默认时间赛选条件
export function setTimeQuantum() {
return {
title: "按时间",
isCheckBox: false,
array: [{
name: "今日",
key: 1,
},
{
name: "近三日",
key: 2,
},
{
name: "近一周",
key: 3,
},
{
name: "近一月",
key: 4,
},
{
name: "近三月",
key: 5,
},
{
name: "近半年",
key: 6,
},
],
}
}
export function GetDateDiff(startTime, endTime, diffType) {
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
var sTime = new Date(startTime);
var eTime = new Date(endTime);
var timeType = 1
switch (diffType) {
case 's':
timeType = 1000;
break;
case 'm':
timeType = 1000 * 60;
break;
case 'h':
timeType = 1000 * 3600;
break;
case 'd':
timeType = 1000 * 3600 * 24;
break;
default:
break;
}
return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(timeType))
}
/**
* 跳转首页
* @param {*} value ID
*/
export function setUserHome(value) {
switch (value) {
case 6:
setStorage("homeUrl", "/newTwoHome");
router.replace("/newTwoHome");
break;
case 7:
setStorage("homeUrl", "/");
router.replace("/");
break;
}
}
//获取天气数据
export function getWeatherData(params, fun) {
axios.get(`${baseUrl2}/mosty-api/mosty-base/other/getWeather`, {
params
}, {}).then(res => {
fun(res.data.data)
})
}
/**
* 提示窗口
* @param {*} msg 消息
* @param {*} hintType 位置
*/
Toast.allowMultiple();
export function hintToast(msg, hintType = 'top') {
const toast1 = Toast({
message: msg,
position: hintType
})
}
export function getLocationJs() {
let jwd = {}
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(
(pos) => {
if (pos.coords) {
jwd.lat = pos.coords.latitude;
jwd.lng = pos.coords.longitude;
}
},
(err) => {
console.log(err, "err");
}
);
} else {
console.log("Geolocation is not supported by this browser.");
}
return jwd;
};