ahyd_DIB/common/utils.js
2023-12-21 19:10:27 +08:00

515 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import store from '../store/store.js'
import request from '@/util/index.js'
// const QQMapWX = require('./qqmap-wx-jssdk.min.js')
// const qqmapsdk = new QQMapWX({
// key: "SVKBZ-P6QCJ-NH7F7-KOPJW-CBNEV-FUBRT"
// })
// /**
// * 地图两点之间的距离
// * @doc 文档参考https://lbs.qq.com/qqmap_wx_jssdk/method-search.html
// * @export
// * @param {*} to 坐标 { latitude: 39.984060, longitude: 116.307520 }
// * @param {*} location 坐标:{ latitude: 39.984060, longitude: 116.307520 }
// * @returns
// */
// function calculateDistance (fromp, to) {
// return new Promise((resolve, reject) => {
// qqmapsdk.calculateDistance({
// mode: 'straight',
// to: [{
// latitude: to.latitude,
// longitude: to.longitude
// }],
// 'from': {
// latitude: fromp.latitude,
// longitude: fromp.longitude
// },
// success: res => {
// resolve(res)
// },
// fail: err => {
// reject(err)
// uni.showToast({
// title: err.message,
// icon: 'none',
// duration: 3000
// })
// }
// })
// })
// }
// /**
// * 坐标转换,百度地图坐标转换成腾讯地图坐标
// * lng 腾讯经度pointy
// * lat 腾讯纬度pointx
// * 经度>纬度
// */
// function bMapToQQMap(lng, lat) {
// if (lng == null || lng == '' || lat == null || lat == '')
// return [lng, lat];
// var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
// var x = parseFloat(lng) - 0.0065;
// var y = parseFloat(lat) - 0.006;
// var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
// var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
// var lng = (z * Math.cos(theta)); //.toFixed(7);
// var lat = (z * Math.sin(theta)); //.toFixed(7);
// return [lng, lat];
// }
const netChange = () => {
uni.onNetworkStatusChange(function(res) {
// console.log(res.isConnected)
store.mutations.isConnect(res.isConnected)
if (!res.isConnected) {
uni.showToast({
title: '网络未连接',
icon: 'none'
})
}
})
}
const cutDate = (dd, type, daynum) => {
dd = new Date(dd) || new Date();
type = type || 'YYYY/MM/DD' //hh:mm:ss
daynum = daynum * 24 * 60 * 60 * 1000 || 0
// console.log(daynum,dd,dd.getTime()+daynum)
dd = new Date(dd.getTime() + daynum) // 获取AddDayCount天后的日期
var y = dd.getFullYear()
var m = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1) // 获取当前月份的日期不足10补0
var d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号不足10补0
var h = dd.getHours() < 10 ? '0' + dd.getHours() : dd.getHours()
var mi = dd.getMinutes() < 10 ? '0' + dd.getMinutes() : dd.getMinutes()
var s = dd.getSeconds() < 10 ? '0' + dd.getSeconds() : dd.getSeconds()
return type.replace('YYYY', y).replace('MM', m).replace('DD', d).replace('hh', h).replace('mm', mi).replace('ss', s)
}
// 金额格式化处理方法
const fmoney = (s, n) => {
/*
* 参数说明:
* s要格式化的数字
* n保留几位小数
* */
n = n > 0 && n <= 20 ? n : 2;
var fuhao = ''; //如果数字小于零则值为-
if (s < 0) {
s = Math.abs(s);
fuhao = '-'
}
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
let t = "";
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
if (n===0){
return s
}else{
return fuhao + [...t].reverse().join("") + "." + r;
}
}
// 没有小数点的金额格式化
function noDecimal(s){
let fuhao = ''; //如果数字小于零则值为-
if (s < 0) {
s = Math.abs(s);
fuhao = '-'
}
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")) + ""
let l = s.split(".")[0].split("").reverse(), r = s.split(".")[1];
let t = ''
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
return fuhao + [...t].reverse().join("")
}
/**
* 将数据转成日期格式
* @param {string} s: 要格式化的日期数据
*/
function changeStringToDate(s) {
if (s.length === 14) {
return s.substring(0, 4) + '-' + s.substring(4, 6) + '-' + s.substring(6, 8) + ' ' +
s.substring(8, 10) + ':' + s.substring(10, 12) + ':' + s.substring(12, 14);
}
else if (s.length === 8) {
return s.substring(0, 4) + '-' + s.substring(4, 6) + '-' + s.substring(6, 8);
}
}
function toNextRoute(type, url) {
uni[type]({
url: url,
success: (result) => {
addUserBehavior({
intoRoute: url
})
}
})
}
// 记录用户行为的方法 每个页面的onUnload里面要调用
function addUserBehavior(obj) {
var pages = getCurrentPages() // 获取加载的页面
let len = pages.length
if (len) {
var currentPage = pages[len - 1] // 获取当前页面的对象
var nowRoute = '/' + currentPage.route // 当前页面url
if (obj) {
obj.outtoRoute = (obj.outtoRoute === '' || obj.outtoRoute) ? obj.outtoRoute : nowRoute
obj.intoRoute = obj.intoRoute ? obj.intoRoute.split('?')[0] : ''
} else {
obj = {}
obj.outtoRoute = nowRoute
obj.intoRoute = len > 1 ? '/' + pages[len - 2].route : '/pages/index/index'
}
}
obj.visitChannels = store.state.visitChannels
let userDate = store.state.userData
let req = {
userName:userDate.UserName,
phoneNumber:userDate.Membership_Phone,
userId:userDate.UserId ? userDate.UserId:'',
wechatAppId:'wx4fb5da2b8d9e0e43',
intoRoute:obj.intoRoute,
outtoRoute:obj.outtoRoute,
visitChannels:obj.visitChannels,
behaviorRecordDesc:''
}
request.$webGet('CommercialApi/UserBehavior/AddUserBehavior',req).then(() => {
})
}
function addUserBehaviorNew(obj) {
var pages = getCurrentPages() // 获取加载的页面
let len = pages.length
if (len) {
var currentPage = pages[len - 1] // 获取当前页面的对象
var nowRoute = '/' + currentPage.route // 当前页面url
if (obj) {
obj.outtoRoute = (obj.outtoRoute === '' || obj.outtoRoute) ? obj.outtoRoute : nowRoute
obj.intoRoute = obj.intoRoute ? obj.intoRoute.split('?')[0] : ''
} else {
obj = {}
obj.outtoRoute = nowRoute
obj.intoRoute = len > 1 ? '/' + pages[len - 2].route : '/pages/index/index'
}
}
obj.visitChannels = store.state.visitChannels
let userDate = store.state.userData
let req = {
userName:userDate.UserName,
phoneNumber:userDate.Membership_Phone,
userId:userDate.UserId ? userDate.UserId:'',
wechatAppId:'wx4fb5da2b8d9e0e43',
intoRoute:obj.intoRoute,
outtoRoute:obj.outtoRoute,
visitChannels:obj.visitChannels,
behaviorRecordDesc:''
}
request.$webGet('CommercialApi/UserBehavior/AddUserBehavior',req).then(() => {
})
}
/*
根据关键字获取相应的枚举选项,文档见 https://api.eshangtech.com/EShangApiMain/swagger/ui/index#!/FrameWork/FrameWork_GetFieldEnumByField
params:{FieldExplainField,FieldEnumStatus}
*/
async function getFieldEnumByField(params) {
if (!params.FieldExplainField) return null
// 缓存了上次请求的数据 如果字段一致 则直接返回缓存数据 否则请求
// 可优化:根据有效期判断是否再次请求
if (!this.dataMap) {
this.dataMap = {}
}
if (this.dataMap[params.FieldExplainField]) {
return this.dataMap[params.FieldExplainField]
}
const data = await request.$webGet('EShangApiMain/FrameWork/GetFieldEnumByField', params)
if (data.Result_Code == 100) {
let typeMap = {}
data.Result_Data.List.map(n => {
typeMap[n.value] = n.label
})
this.dataMap[params.FieldExplainField] = typeMap
return typeMap
}
}
// 得到这个月有多少天
function getThisMonthDay(value){
let date = new Date(value)
let y = date.getFullYear()
let m = date.getMonth() + 1
let howDay;
let flag = false
if( y%4 ===0 && y%100!==0 || y%400===0 ){
flag=true
}
switch (m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
howDay=31
break
case 4: case 6: case 9: case 11:
howDay=30
break
case 2 :
if(flag){
howDay=29
}else{
howDay = 28
}
break
}
return howDay
}
// 输入时间拿到月份
function getThisMonth(value){
const date = new Date(value)
let y = date.getFullYear()
let m = date.getMonth()+1
if (m<10){
m = '0'+m
}
return `${y}${m}`
}
//有横杠
function getThisMonthHave(value){
const date = new Date(value)
let y = date.getFullYear()
let m = date.getMonth()+1
if (m<10){
m = '0'+m
}
return `${y}-${m}`
}
// 输入时间拿到月份 输出月份的字符串
function getThisTimeMonth(value){
const date = new Date(value)
let m = date.getMonth()+1
if (m<10){
m = '0'+m
}
return `${m}`
}
// 视频播放
const EZUIPlayer = require('./ezuikit.js');
function playVideo(opt) {
return new EZUIPlayer(opt)
}
// 输入年份和月份 输出该月的天数 是一个数组 格式为 *月**日
function getThisMonthDateList(value){
let date = new Date(value)
let y = date.getFullYear()
let m = date.getMonth() + 1
let howDay;
let flag = false
if( y%4 ===0 && y%100!==0 || y%400===0 ){
flag = true
}
switch (m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
howDay=31
break
case 4: case 6: case 9: case 11:
howDay=30
break
case 2 :
if(flag){
howDay=29
}else{
howDay = 28
}
break
}
let list = []
for (let i = 0;i <= howDay,++i;) {
if (i>howDay){
break
}else{
list.push({label:`${m}${i}`,value:`${y}-${m<10?'0'+m:m}-${i<10?'0'+i:i}`})
}
}
return list
}
// 传入 老的时间和要变成的时间 老时间要日期 新时间不用 月份为1无效
function handleReduceAMonth(nowTime,newTime){
const oldDate = new Date(nowTime)
let y = oldDate.getFullYear()
let m = oldDate.getMonth() + 1
let d = oldDate.getDate()
const newDate = new Date(newTime)
let newY = newDate.getFullYear()
let newM = newDate.getMonth() + 1
let thisMonth = newM<10?'0'+newM:newM
let howDay = this.getThisMonthDay(`${y}-${m}`)
let newHowDay = this.getThisMonthDay(`${newY}-${thisMonth}`)
const nowDate = new Date()
let nowM =nowDate.getMonth() + 1
let nowD = nowDate.getDate()
if (d === newHowDay){
if (d<nowD){
if (newM<10){
newM = '0' + newM
}
if (newHowDay<10){
newHowDay = '0' + newHowDay
}
return `${newY}-${newM}-${newHowDay}`
}else{
if (newM===nowM){
if (newM<10){
newM = '0' + newM
}
if (nowD<10){
nowD = '0' + nowD
}
return `${newY}-${newM}-${nowD}`
}else{
if (newM<10){
newM = '0' + newM
}
if (newHowDay<10){
newHowDay = '0' + newHowDay
}
return `${newY}-${newM}-${newHowDay}`
}
}
}else{
if (newM===2){
if (d>newHowDay){
if (newM<10){
newM = '0' + newM
}
if (newHowDay<10){
newHowDay = '0' + newHowDay
}
return `${newY}-${newM}-${newHowDay}`
}else{
if (newM<10){
newM = '0' + newM
}
if (d<10){
d = '0' + d
}
return `${newY}-${newM}-${d}`
}
}else{
if (nowD<d){
if (nowM===newM){
if (newM<10){
newM = '0' + newM
}
if (nowD<10){
nowD = '0' + nowD
}
return `${newY}-${newM}-${nowD}`
}else{
if (d<newHowDay){
if (newM<10){
newM = '0' + newM
}
if (d<10){
d = '0' + d
}
return `${newY}-${newM}-${d}`
}else{
if (newM<10){
newM = '0' + newM
}
if (newHowDay<10){
newHowDay = '0' +newHowDay
}
return `${newY}-${newM}-${newHowDay}`
}
}
}else {
if (newM<10){
newM = '0' + newM
}
if (d<10){
d = '0' +d
}
return `${newY}-${newM}-${d}`
}
}
}
}
function getMoney(money){
if (!money || isNaN(money)) return "0.00";
let num = parseFloat(money + '') + '';
num = parseInt(money * 100 + '') / 100 + ''
let reg = /(-?\d+)(\d{4})/;
while (reg.test(num)) {
num = num.replace(reg, "$1,$2");
}
let idx = num.indexOf('.')
if (idx === -1) {
num = num + '.00'
}
if (idx > 0) {
let num_per = num.substring(0, idx) + '.'
let num_next = num.substring(idx + 1).padEnd(2, '0')
num = num_per + num_next
}
return num;
}
export default {
netChange,
cutDate,
getThisMonthDay,
getThisMonth,
getThisMonthHave,
getThisTimeMonth,
fmoney,
noDecimal,
changeStringToDate,
toNextRoute,
addUserBehavior,
addUserBehaviorNew,
getFieldEnumByField, // 获取枚举参数
// calculateDistance,
// bMapToQQMap,
playVideo,
getMoney,
getThisMonthDateList,
handleReduceAMonth
}