cxc-szcx-uniapp/utils/index.js
2025-03-12 21:45:06 +08:00

307 lines
7.3 KiB
JavaScript
Raw Permalink 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.

const baseurl = import.meta.env.VITE_REQUEST_BASE_URL + '/jeecg-boot/sys/common/static/'
/**提示*/
export const toast = (title, icon, duration) => {
uni.showToast({
title,
icon: icon || 'none',
duration: duration || 2000
})
}
import {
useStore
} from '@/store';
import {
getUserPermissionApi
} from '@/api/login.js'
/**判断用户跳转前是否可以进入该页面*/
export const beforeJump = (url, callback) => {
const store = useStore();
// let page = store.allowPage
getUserPermissionApi({
token: store.token,
type: 'mobile'
}).then((res) => {
if (res.success) {
// 登录人被允许访问的页面
let page = handleAllowPage(res.result?.menu || [])
// console.log('@!1',res.result?.menu);
if (page.some(item => url.indexOf(item) !== -1)) {
callback()
} else {
toast('无查看权限!')
}
}
}).catch((err) => {
console.log('err@', err);
})
// 用户点击的页面路径是否被允许
}
// 处理接口返回的允许访问页面的数据
const handleAllowPage = (menu, arr = []) => {
if (!menu.length) {
return []
}
menu.forEach((item) => {
if (item.children) {
arr.push(...handleAllowPage(item.children))
}
arr.push(item.path)
})
return arr
}
/**
* 判断是否有新版本
* @param version 接口返回的版本号
* @param isWgt 是否是热资源更新 默认不是
*/
export const hasNewVersion = (version, isWgt = false) => {
// #ifdef APP_PLUS
return new Promise((resolve) => {
const transfer = (str) => str.replace(/\./g, '')
if (isWgt) {
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
const currentVersion = widgetInfo.version
resolve(+transfer(version) > +transfer(currentVersion))
})
} else {
const currentVersion = plus.runtime.version
resolve(+transfer(version) > +transfer(currentVersion))
}
})
// #endif
}
function downloadApp(url) {
console.log('url', url);
var dtask = plus.downloader.createDownload(url, {
filename: `_downloads/wgt-${Date.now()}.wgt` //利用保存路径,实现下载文件的重命名
}, function(d, status) {
//d为下载的文件对象
if (status == 200) {
//下载成功,d.filename是文件在保存在本地的相对路径使用下面的API可转为平台绝对路径
var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
console.log('fileSaveUrl', fileSaveUrl);
installApp(fileSaveUrl)
} else {
//下载失败
plus.downloader.clear(); //清除下载任务
uni.showToast({
title: 'App下载失败',
icon: 'error'
})
}
})
let prg = 0
let showLoading = plus.nativeUI.showWaiting('正在下載')
dtask.start()
dtask.addEventListener('statechanged', (task, status) => {
// 给下载任务设置一个监听 并根据状态 做操作
switch (task.state) {
case 1:
showLoading.setTitle("正在下载")
break
case 2:
showLoading.setTitle("已连接到服务器")
break
case 3:
prg = parseInt(
(
parseFloat(task.downloadedSize) /
parseFloat(task.totalSize)
) * 100
)
showLoading.setTitle(" 正在下载")
break
case 4:
plus.nativeUI.closeWaiting()
//下载完成
break
}
})
// const downloadTask = uni.downloadFile({
// url,
// success: res => {
// if (res.statusCode === 200) {
// console.log('res.tempFilePath',res.tempFilePath);
// installApp(res.tempFilePath)
// } else {
// uni.showToast({
// title: 'App下载失败',
// icon: 'error'
// })
// }
// }
// })
// downloadTask.onProgressUpdate(res => {
// progress.value = res.progress
// })
}
function installApp(tempFilePath) {
// #ifdef APP-PLUS
plus.runtime.install(
tempFilePath, {
force: true
},
() => {
uni.showModal({
title: '更新',
content: '更新成功,请点击确认后重启',
showCancel: false,
success(res) {
if (res.confirm) {
plus.runtime.restart()
}
}
})
},
() =>
uni.showToast({
title: '安装失败!',
icon: 'error'
})
)
// #endif
}
export function onClickUpdate(updateType, url) {
// #ifdef APP-PLUS
if (updateType != 'wgt') plus.runtime.openURL(url.apkUrl)
else downloadApp(url.wgtUrl)
// #endif
}
/**
* 获取年月日
*/
export const getTime = () => {
let date = new Date(); //Fri Oct 29 2021 16:37:56 GMT+0800 (CST)
let timestamp = new Date().getTime(); //1635496676223 (毫秒级)
let y = date.getFullYear(); //获取完整的年份(4位)
let m = (date.getMonth() + 1).toString().padStart(2, 0); //获取当前月份(0-11,0代表1月)
let d = (date.getDate()).toString().padStart(2, 0); //获取当前日(1-31)
return `${y}-${m}-${d}`
}
/**
* 定位
*/
export const getLocation = () => {
const store = useStore()
if (!store.positionSwitch) {
uni.setStorageSync('position', '濮阳市')
store.setPosition('濮阳市')
getWeather()
} else {
toast('定位刷新中')
uni.getLocation({
type: 'wgs84',
success: function(position) {
uni.request({
url: 'http://api.tianditu.gov.cn/geocoder',
method: 'GET',
data: {
postStr: JSON.stringify({
lon: position.longitude,
lat: position.latitude,
ver: 1
}),
type: 'geocode',
tk: '30fe0f0c1b2320e112bde797f3ddaff4'
},
success: function(res) {
let data = res.data;
if (data.status == 0) {
const obj = data.result.addressComponent
let info = obj.city ? obj.city : obj.province
uni.setStorageSync('position', info)
store.setPosition(info)
getWeather(position.latitude, position.longitude)
} else {
console.log(data.message);
}
},
fail: function(err) {
toast('获取定位失败');
}
});
}
});
}
}
export const getWeather = (lat, lon) => {
const store = useStore()
let params = {}
if (!store.positionSwitch) {
params.q = '濮阳市'
weatherRequest(params)
} else {
params.lat = lat
params.lon = lon
weatherRequest(params)
}
}
const weatherRequest = (params) => {
const store = useStore()
uni.request({
url: 'https://api.openweathermap.org/data/2.5/weather',
method: 'GET',
data: {
...params,
appid: '600a60694b0e453dfbaafa862f1d1482',
lang: 'zh_cn'
},
success: function(res) {
uni.setStorageSync('wendu', Math.round(res.data.main.temp - 273.15))
uni.setStorageSync('wenduIcon', res.data.weather[0].icon)
store.setWeather(Math.round(res.data.main.temp - 273.15), res.data
.weather[0].icon)
},
fail: function(err) {
toast('天气获取失败');
}
});
}
export const opendocument = (url) => {
uni.downloadFile({
url: baseurl + url,
success: function(res) {
var filePath = res.tempFilePath;
uni.openDocument({
filePath: filePath,
showMenu: true,
fail: function(err) {
toast(err.errMsg);
}
});
},
fail: function(err) {
console.error('文件下载失败', err);
}
});
}
export const preview = (current, urls) => {
console.log(current, urls, 'current, urls');
uni.previewImage({
// current,
urls,
indicator: 'default',
loop: false,
longPressActions: {
itemList: ['保存图片'],
success: function(data) {
console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
},
fail: function(err) {
console.log(err.errMsg);
}
}
});
}
export const imgUrl = (url) => {
return baseurl + `/${url}`
}