Files
qiming/qiming-mobile/uni_modules/x-tools/tools/sugar.js

213 lines
6.1 KiB
JavaScript
Raw 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.
export const log = console.log
import { t } from '@/utils/i18n'
export const upx2px = val => uni.upx2px(parseInt(val))
export const toast = (title, options = { duration: 2000, icon: 'none' }) => uni.showToast({ title, fail: console.log, ...options })
export const makePhoneCall = phoneNumber => uni.makePhoneCall({ phoneNumber, fail: console.log });
export const previewImage = (urls, current, options) => uni.previewImage({ urls, current, fail: console.log, ...options });
export const copy = (str, options) => uni.setClipboardData({ data: String(str), fail: console.log, ...options })
export const openMap = (lng, lat, name, address, options) => uni.openLocation({ longitude: parseFloat(lng), latitude: parseFloat(lat), name, address, fail: console.log, ...options })
export const setStorage = (key, value) => uni.setStorageSync(key, value)
// 判断空值
export const isEmpty = value => {
if (value === null || value === undefined || value === '') {
return true;
}
if (Array.isArray(value)) {
return value.length === 0;
}
if (typeof value === 'object') {
return Object.keys(value).length === 0;
}
return false;
}
// 返回对象属性为空的 property path
const getEmptyValuePropertyPath = (obj, excludedKeys = []) => {
for (let key in obj) {
if (obj.hasOwnProperty(key) && !excludedKeys.includes(key)) {
let value = obj[key];
if (Array.isArray(value)) {
// 判断是否为数组对象
for (let item of value) {
const childrenKey = getEmptyValuePropertyPath(item, excludedKeys)
if (item instanceof Object && childrenKey) {
return key + '.' + childrenKey;
}
}
if (value.length === 0) {
return key;
}
} else if (value instanceof Object) {
const childrenKey = getEmptyValuePropertyPath(value, excludedKeys)
if (childrenKey) {
return key + '.' + childrenKey;
}
} else if (isEmpty(value)) {
return key;
}
}
}
return null;
}
// 有无空字段
export const hasEmptyField = (obj, excludedKeys = []) => getEmptyValuePropertyPath(obj, excludedKeys)
// 跳转企业微信客服
export const toCustomerService = (corpId, url) => {
// #ifdef MP-WEIXIN
wx.openCustomerServiceChat({
extInfo: {
url
},
corpId,
success(res) {},
fail: (err) => {
console.log(err);
uni.showToast({
title: err?.errMsg
})
}
})
// #endif
// #ifdef APP
plus.share.getServices(services => {
const sweixin = services.find(i => i.id === 'weixin')
if (sweixin) {
sweixin.openCustomerServiceChat({
corpid: corpId,
url,
}, res => {
console.log("success", JSON.stringify(res))
}, err => {
console.log("error", JSON.stringify(err))
})
} else {
plus.nativeUI.alert(t('Mobile.ThirdParty.XTools.wechatUnsupported'))
}
}, function() {
uni.showToast({
title: t('Mobile.ThirdParty.XTools.getServiceFailed'),
icon: 'error'
})
})
// #endif
// #ifdef H5
window.location.href = url
// #endif
}
// 保存图片
export const saveImage = async (url, tips = true) => {
try {
console.log('saveImage', url);
// #ifdef H5
const link = document.createElement('a');
link.href = url;
link.download = url.substring(url.lastIndexOf('/') + 1);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// #endif
// #ifndef H5
if (url.startsWith('http')) {
const { statusCode, tempFilePath: filePath } = await uni.downloadFile({
url
})
if (statusCode == 200) {
await uni.saveImageToPhotosAlbum({
filePath
})
} else {
throw Error('图片下载失败')
}
} else {
await uni.saveImageToPhotosAlbum({
filePath: url
})
}
// #endif
tips && uni.showToast({
title: t('Mobile.ThirdParty.XTools.saveSuccess'),
icon: 'success'
})
} catch (e) {
console.log(e);
tips && uni.showToast({
title: t('Mobile.ThirdParty.XTools.saveFailed'),
icon: 'error'
})
}
}
// 获取页面通信管道(支持 vue2 需绑定this
export const pageEvent = function() {
// #ifdef VUE2
return this.getOpenerEventChannel()
// #endif
// #ifdef VUE3
console.error('vue3 不支持这种使用方式')
// #endif
}
// 对象转查询字符串
export const object2queryStr = (obj) => {
if (!obj) return obj
return Object.keys(obj).reduce((val, key) => {
return `${val}${key}=${obj[key]}&`
}, '?').slice(0, -1)
}
// html 转纯文本
export const html2text = (html) => {
return String(html).replace(/<[^>]+>|&[^;]+;/g, '').replace(/\s+/g, ' ').trim();
}
/**
* @Func dataMask
* @Desc 数据脱敏
* @param {String} str 字符串
* @param {Number} head 头部保留位数
* @param {Number} tail 尾部保留位数
* @return {String} 脱敏后的数据
*/
export const dataMask = (str, head, tail) => {
if (!str) return str
const arr = String(str).split('')
tail = arr.length - tail
if (head < 0) head = 0
if (head > tail) return str
for (let i = head; i < tail; i++) {
arr[i] = '*'
}
return arr.join('')
}
// 查询元素信息
export const queryElementRect = function(selector) {
if (Array.isArray(selector)) return Promise.all(selector.map(i => queryElementRect.call(this, i)))
return new Promise(resolve => {
uni.createSelectorQuery()
.in(this).select(selector)
.boundingClientRect(resolve)
.exec();
})
}