167 lines
4.8 KiB
TypeScript
167 lines
4.8 KiB
TypeScript
import { JumpType } from '@/utils/common'
|
|
import { dateFormat, formatRichText, PUBLIC_PATH_URL, showToast } from '@/utils/util'
|
|
import store from '@/store'
|
|
|
|
export default {
|
|
install(Vue: any) {
|
|
Vue.mixin({
|
|
data() {
|
|
return {}
|
|
},
|
|
computed: {},
|
|
methods: {
|
|
getStatusHeightCss() {
|
|
const systemInfo = uni.getSystemInfoSync()
|
|
return { '--status-height': systemInfo.statusBarHeight + 'px' }
|
|
},
|
|
getNavHeightCss() {
|
|
return store.getters.getNavHeight
|
|
},
|
|
/**
|
|
* 跳转页面
|
|
* @param url
|
|
* @param jumpType
|
|
* @param delay
|
|
*/
|
|
goto(url: string, jumpType: JumpType = JumpType.navigator, delay: number = 0) {
|
|
// console.info('goto', url, jumpType, delay)
|
|
let checkIsTab = (url: string): boolean => {
|
|
// TODO tab标签
|
|
let tabPage = ['/pages/index/index', '/pages/mine/index']
|
|
let isTab = false
|
|
if (url) {
|
|
for (let i = 0; i < tabPage.length; i++) {
|
|
if (url.indexOf(tabPage[i]) == 0) {
|
|
isTab = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return isTab
|
|
}
|
|
|
|
let goto = (url: string, jumpType: JumpType = JumpType.navigator) => {
|
|
let isTab = checkIsTab(url)
|
|
if (isTab) {
|
|
jumpType = JumpType.switchTab
|
|
}
|
|
if (jumpType == JumpType.navigator) {
|
|
// @ts-ignore
|
|
this.$Router.push(url)
|
|
// uni.navigateTo({url: url});
|
|
} else if (jumpType == JumpType.switchTab) {
|
|
// @ts-ignore
|
|
this.$Router.pushTab(url)
|
|
// let baseUrl = url.split('?')
|
|
// if (baseUrl[1]) {
|
|
// this.$Router.pushTab(baseUrl[0])
|
|
// } else {
|
|
// this.$Router.pushTab(url)
|
|
// }
|
|
// uni.switchTab({url: baseUrl})
|
|
} else if (jumpType == JumpType.redirect) {
|
|
// @ts-ignore
|
|
this.$Router.replace(url)
|
|
// uni.redirectTo({url: url})
|
|
}
|
|
}
|
|
|
|
if (url) {
|
|
if (delay > 0) {
|
|
let timer = setTimeout(() => {
|
|
goto(url, jumpType)
|
|
}, delay)
|
|
} else {
|
|
goto(url, jumpType)
|
|
}
|
|
} else {
|
|
goto('/pages/index/index', JumpType.redirect)
|
|
}
|
|
},
|
|
goBack() {
|
|
let pages = getCurrentPages()
|
|
if (pages.length > 1) {
|
|
uni.navigateBack({})
|
|
} else {
|
|
this.goto('')
|
|
}
|
|
},
|
|
/**
|
|
* @description 保存图片至手机相册
|
|
* @param url
|
|
*/
|
|
saveInPhoto(url: string) {
|
|
// #ifdef APP-PLUS
|
|
uni.showLoading({
|
|
// @ts-ignore
|
|
title: '加载中'
|
|
})
|
|
uni.downloadFile({
|
|
url,
|
|
success: (res) => {
|
|
uni.hideLoading()
|
|
if (res.statusCode === 200) {
|
|
uni.saveImageToPhotosAlbum({
|
|
filePath: res.tempFilePath,
|
|
success: () => {
|
|
showToast('保存成功')
|
|
},
|
|
fail: () => {
|
|
showToast('保存失败')
|
|
}
|
|
})
|
|
} else {
|
|
showToast('下载失败')
|
|
}
|
|
}
|
|
})
|
|
// #endif
|
|
},
|
|
/**
|
|
* 格式化图片地址
|
|
* @param url 图片地址
|
|
* @param defaultUrl 图片默认地址
|
|
*/
|
|
getFullImageUrl(url: string, defaultUrl: string = ''): string {
|
|
if (!url) {
|
|
return defaultUrl
|
|
}
|
|
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
return url
|
|
}
|
|
return `${PUBLIC_PATH_URL}${url}`
|
|
},
|
|
/**
|
|
* 格式化时间
|
|
* @param value
|
|
* @param fmt
|
|
*/
|
|
formatDateTime(value: string, fmt: string = 'YYYY-MM-DD HH:mm:ss'): string {
|
|
if (!value) return ''
|
|
return dateFormat(value, fmt)
|
|
},
|
|
/**
|
|
* 格式化富文本
|
|
* @param value 富文本内容
|
|
*/
|
|
formatHtmlContent(value: string): string {
|
|
if (!value) return ''
|
|
return formatRichText(value)
|
|
},
|
|
// 解析url
|
|
parseUrl(url: string) {
|
|
const params = url.split('?')[1]
|
|
if (!params) return null
|
|
const paramsArr = params.split('&')
|
|
const paramsObj: any = {}
|
|
paramsArr.forEach((item: string) => {
|
|
const key = item.split('=')[0]
|
|
paramsObj[key] = item.split('=')[1]
|
|
})
|
|
return paramsObj
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|