cxc-szcx-uniapp/utils/index.js

307 lines
7.3 KiB
JavaScript
Raw Permalink Normal View History

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}`
}