emis-app/common/untool.js
2024-08-10 10:49:58 +08:00

345 lines
6.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import qs from "@/common/libs/qs"
// #ifdef H5
import { saveAs } from "file-saver"
// #endif
// #ifdef APP-PLUS
const appCloudScanner = uni.requireNativePlugin('Ba-Scanner');
// #endif
const tabBarUrls = [
'/pages/tabBar/deal/deal',
'/pages/tabBar/home/home',
'/pages/tabBar/mine/mine',
'/pages/tabBar/order/order'
]
const goto = (url, type = 1)=> {
if(!url) {
console.error("goto 缺少入参 url=========")
return
}
url = url.replace(`pages/`, '')
url = `/pages/${url}`
if(tabBarUrls.indexOf(url) > -1) {
return uni.switchTab({
url
});
}
if (type == 1){
uni.navigateTo({
url
});
} else if (type == 2){
uni.redirectTo({
url
});
}
}
const goBack = (opt = {})=> {
uni.navigateBack({
fail: ()=>{
goto(opt._finalUrl || `tabBar/home/home`, 2)
},
...opt,
})
}
const reLaunch = (opt = {})=> {
uni.reLaunch(opt)
}
const setClipboardData = (val)=> {
uni.setClipboardData({
data: val,
success: () => {
showToast('复制成功')
},
})
}
const showToast = (val)=> {
uni.showToast({ title: val, icon: 'none' })
}
const confirmModal = (title, opt = {}) => {
return new Promise((resolve)=> {
uni.showModal({ content: title, confirmColor: '#B12D29', ...opt }).then((res)=> {
if(res.confirm) {
resolve(true)
} else {
resolve(false)
}
})
})
}
const showLoading = (title)=> {
uni.showLoading({
mask: true,
title: title || '加载中'
});
}
const hideLoading = ()=> {
uni.hideLoading();
}
const customAppScanCode = ({resolve, reject})=> {
appCloudScanner.onScan(
{
// isContinuous: true,
barcodeFormats: [
// "QR Code"
],
// scanTimeSpace: 2000,
// isShowVibrate: true,
// isShowBeep: false,
hintText: '扫码',
},
(res) => {
console.log("scanCode res========", res)
let code = res.result
if (code) {
// 去除 扫码多出来的特殊字符
code = code.replace(//g, '')
resolve(code)
}
}
);
}
const scanCode = ()=> {
return new Promise((resolve, reject)=> {
// #ifdef APP-PLUS
customAppScanCode({resolve, reject})
// #endif
// #ifndef APP-PLUS
uni.scanCode({
onlyFromCamera: false,
success: (res) =>{
console.log("scanCode res========", res)
resolve(res.result)
},
fail: reject
})
// #endif0
})
}
const makePhoneCall = (phoneNumber)=> {
uni.makePhoneCall({
phoneNumber: phoneNumber
});
}
const downloadFile = (url, ext = {})=> {
return new Promise((resolve, reject)=> {
uni.downloadFile({
url: url,
...ext,
success: (res) => {
console.log("downloadFile:success:res======", res)
if (res.statusCode === 200 || res.statusCode === 400) {
console.log('下载成功');
resolve(res)
}
},
fail: (err)=>{
console.log("downloadFile:err", err)
reject(err)
}
});
})
}
const saveNetFile = (url) => {
return new Promise(async (resolve, reject)=> {
showLoading('正在保存文件')
try{
let dRes = await getImageInfo(url)
console.log("save:downloadFile:getImageInfo", dRes)
let { tempFilePath, path } = dRes
// #ifdef H5
saveAs(path)
// #endif
// let res = await saveFile({ path })
// #ifdef APP-PLUS
plus.io.convertLocalFileSystemURL(path);
plus.runtime.openFile(path); //选择软件打开文件
// #endif
hideLoading()
showToast('保存成功')
resolve(tempFilePath)
}catch(e){
hideLoading()
showToast('保存失败')
reject(e)
}
})
}
const saveFile = ({ tempFilePath })=> {
return new Promise(async (resolve, reject)=> {
//保存到本地
uni.saveFile({
tempFilePath,//文件的临时路径
success: function(res) {
console.log("saveFile:success", res)
resolve(res)
},
fail: function(err) {
console.log("saveFile:err", err)
reject(err)
},
complete(res){
console.log("saveFile:complete", res)
}
});
})
}
const getImageInfo = (src)=> {
return new Promise(async (resolve, reject)=> {
uni.getImageInfo({
src,
success(res) {
resolve(res)
},
fail(e) {
console.log("获取图片信息失败=======", e)
reject(e)
}
})
})
}
const getImageTempFilePath = (options) => {
return new Promise(async (resolve, reject) => {
let { url, reqHeader, param } = options
if(param) {
let qsStr =qs.stringify(param)
url += `${url.indexOf("?")>-1?'&':'?'}${qsStr}`
}
let res = await downloadFile(url, { header: reqHeader })
resolve(res.tempFilePath)
})
}
const canvasGetImageData = (params = {})=> {
return new Promise((resolve, reject)=> {
uni.canvasGetImageData({
x: 0,
y: 0,
...params,
success(res) {
console.log("img====",res);
resolve(res)
if(res.data) {
let data = res.data
resolve(res);
} else {
showToast('canvasGetImageData:失败')
reject('canvasGetImageData:失败')
}
},
fail(err){
showToast('canvasGetImageData:失败')
console.log("canvasGetImageData:失败====", err);
}
})
})
}
const uniPromiseApi = (name, options = {}, extObj = { })=> {
return new Promise((resolve, reject)=> {
if(!(uni?.[name])) {
console.error(`uni.${name} api不存在 `)
return reject(`uni.${name} api不存在`)
}
uni?.[name]?.({
...options,
success(res){
console.log(`uni.${name} -execResult:success====`, res)
if(extObj.successText) {
showToast(successText)
}
resolve({ res })
},
fail(err){
console.error(`uni.${name} -execResult:fail====`, err)
if(extObj.failText) {
showToast(failText)
}
resolve({ err })
}
})
})
}
const promiseTimeout = (time = 300) => {
return new Promise((resolve, reject)=> {
setTimeout(()=> {
resolve()
}, time)
})
}
const setNavigationBarTitle = (title)=> {
uni.setNavigationBarTitle({
title
})
}
const reloadCurrentPage = (_thisPage)=> {
let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
let curPage = routes[routes.length - 1] // 获取当前页面路由,也就是最后一个打开的页面路由
_thisPage = curPage || _thisPage
let { fullPath } = _thisPage.$page
goto(fullPath, 2)
}
const playAudio = (src)=> {
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = src
innerAudioContext.onPlay(() => {
console.log('开始播放===');
});
innerAudioContext.onError((res) => {
console.log("playAudio onError ======", res);
});
}
export {
reLaunch,
goto,
goBack,
setClipboardData,
confirmModal,
showLoading,
hideLoading,
showToast,
scanCode,
makePhoneCall,
downloadFile,
saveNetFile,
saveFile,
getImageTempFilePath,
canvasGetImageData,
getImageInfo,
uniPromiseApi,
promiseTimeout,
setNavigationBarTitle,
reloadCurrentPage,
playAudio
}