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