Files
im/util/index.js
T
cansnow 5a086fa1fa 13
2025-12-11 22:33:31 +08:00

296 lines
7.2 KiB
JavaScript

//import i18n from '@/locales'
import base from '@/common/config';
//import store from "@/store";
import IMSDK from "openim-uniapp-polyfill";
const isString = (v)=> {
return typeof v === 'string' || v instanceof String;
},
isNumber=(v) =>{
return typeof v === 'number' && !isNaN(v);
},
isInteger=(v) =>{
return typeof v === 'number' && isFinite(v) && Math.floor(v) === v;
},
isBoolean=(v) =>{
return typeof v === 'boolean';
},
isArray=(v) =>{
return Array.isArray(v);
},
isObject=(v) =>{
return v !== null && typeof v === 'object' && !Array.isArray(v);
},
isFunction=(v) =>{
return typeof v === 'function';
},
isNull=(v) =>{
return v === null;
},
isUndefined=(v) =>{
return typeof v === 'undefined';
},
isSymbol=(v) =>{
return typeof v === 'symbol';
},
isDate=(v) =>{
return Object.prototype.toString.call(v) === '[object Date]';
},
isRegExp=(v) =>{
return Object.prototype.toString.call(v) === '[object RegExp]';
},
isError=(v) =>{
return v instanceof Error;
},
isMap=(v) =>{
return v instanceof Map;
},
isSet=(v) =>{
return v instanceof Set;
},
isWeakMap=(v) =>{
return v instanceof WeakMap;
},
isWeakSet=(v) =>{
return v instanceof WeakSet;
};
export default{
isString :isString,
isNumber :isNumber,
isInteger :isInteger,
isBoolean :isBoolean,
isArray :isArray,
isObject :isObject,
isFunction :isFunction,
isNull :isNull,
isUndefined :isUndefined,
isSymbol :isSymbol,
isDate :isDate,
isRegExp :isRegExp,
isError :isError,
isMap :isMap,
isSet :isSet,
isWeakMap :isWeakMap,
isWeakSet :isWeakSet,
cdn(v){
v= v || "";
v = v.replace(/\\/ig,"/").replace('/\/\/ig',"/");
//console.log(v);
if(isString(v)){
if(v.startsWith('blob:')){
return v;
}
if(v.startsWith('file://')){
return v;
}
v= v.startsWith('/') ? v : '/'+v;
return base.cdnUrl+''+v;
}
return "";
},
goto(url,type){
//console.log(url);
type = type || '0'; //0 navigateTo 1 redirectTo
if(url){
if(isInteger(url)){
uni.navigateBack({
delta:url,
})
}else{
url+="";
if(url.substr(0,6) != '/pages'){
url='/pages'+url
}
if(type == '1'){
return uni.redirectTo({
url:url
});
}
if(type == '2'){
return uni.switchTab({
url:url
});
}
uni.navigateTo({
url:url
})
}
}
},
showToast(msg,url,icon){
const _this = this;
//msg = i18n.t(msg);
// #ifdef APP
plus.nativeUI.closeToast();
plus.nativeUI.toast(msg,{
align:'center',
verticalAlign:"center",
style:"inline",
icon:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png',
iconWidth:24,
iconHeight:24
});
if(url){
setTimeout(()=>{
_this.goto(url);
},3000)
}
// #endif
// #ifndef APP
uni.showToast({
//image:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png',
icon:icon=='error' ? icon : 'success',
title:msg,
showToast:3000,
complete:()=>{
if(url){
setTimeout(()=>{
_this.goto(url);
},3000)
}
}
});
// #endif
},
error(msg,url){
this.showToast(msg,url,'error');
},
success(msg,url){
this.showToast(msg,url,'success');
},
scan(){
uni.scanCode({
success(res){
/**
* result 所扫码的内容
scanType 所扫码的类型 App、微信小程序、百度小程序、QQ小程序、京东小程序、支付宝小程序
charSet 所扫码的字符集 App、微信小程序、百度小程序(所扫码的字符集,仅支持 Android 系统)、QQ小程序、京东小程序
path 当所扫的码为当前应用的合法二维码时,会返回此字段,内容为二维码携带的 path。 微信小程序、QQ小程序、京东小程序
rawData 原始数据,base64 编码 微信小程序、QQ小程序、京东小程序、支付宝小程序
code 扫码所得数据 支付宝小程序
qrCode 扫描二维码时返回二维码数据 支付宝小程序
barCode 扫描条形码时返回条形码数据 支付宝小程序
imageChannel 来源 支付宝小程序
*/
if(res.result){
if(res.result.indexOf('blackcatp:/')){
uni.navigateTo({
url:res.result.substring(11)
})
}else{
this.success(res.result)
}
}
},
fail(res){
},
complete(res){
console.log(res)
}
});
},
copy(v){
let that = this;
uni.setClipboardData({
data:v+'',
success() {
that.success('复制成功');
}
})
},
toDate(time) {
var date = new Date(time * 1000);
var fmt = 'yyyy-MM-dd hh:mm:ss';
var o = {
'M+': date.getMonth() + 1, //月份
'd+': date.getDate(), //日
'h+': date.getHours(), //小时
'm+': date.getMinutes(), //分
's+': date.getSeconds(), //秒
'q+': Math.floor((date.getMonth() + 3) / 3), //季度
S: date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
return fmt;
},
formatAmount(v,wei){
if(!v){return 0.00;}
v=v+"";
v = parseFloat(v).toFixed(wei || 2);
return parseFloat(v);
},
imapi(method,data){
return IMSDK.asyncApi(method,IMSDK.uuid(),data);
},
async fileExsit(fn){
return await new Promise((resolve) => {
plus.io.resolveLocalFileSystemURL(fn, function(entry) { resolve(true); }, function() { resolve(false); });
})
},
downloadFile (url, savepath, successCb, errorCb, progressCb) {
if (!url) {
errorCb && errorCb(new Error('empty url'));
return;
}
const startDownload = () => {
try {
const task = plus.downloader.createDownload(url, { filename: savepath, timeout: 120000 }, function(d, status) {
if (status === 200) {
const local = d && d.filename ? d.filename : savepath;
successCb && successCb(local);
} else {
errorCb && errorCb(new Error('download status ' + status));
}
});
try {
if (task && typeof task.addEventListener === 'function') {
task.addEventListener('statechanged', function(t, status) {
if (t.state === 3) {
var downloaded = t.downloadedSize || t.downloaded || 0;
var total = t.totalSize || t.total || 0;
var prog = 0;
if (total > 0) prog = Math.min(100, Math.floor(downloaded / total * 100));
progressCb && progressCb(prog);
}
});
}
} catch (e) {
// ignore
}
task.start();
} catch (e) {
errorCb && errorCb(e);
}
};
// 确保父目录存在
try {
const parent = savepath.substring(0, savepath.lastIndexOf('/'));
plus.io.resolveLocalFileSystemURL(parent, function(entry) {
startDownload();
}, function() {
// 目录不存在,尝试创建(针对 _doc/<conversationID> 结构)
let rel = parent;
if (rel.indexOf('_doc/') === 0) rel = rel.replace(/^_doc\//, '');
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getDirectory(rel, { create: true }, function(entry) {
startDownload();
}, function(e) {
// 创建失败也尝试下载,可能运行时会自动创建
startDownload();
});
}, function(e) {
startDownload();
});
});
} catch (e) {
startDownload();
}
}
}