mall_client/zyhs3_uniapp/common/utils/public.js

573 lines
15 KiB
JavaScript
Raw Normal View History

2026-03-13 07:50:35 +00:00
import url from "../http/url.js"
import { inviteUrl } from "@/common/http/index.js"
import { sendRequest } from "@/common/http/api.js"
import JSEncrypt from "@/libs/jsencrypt-Rsa/jsencrypt.min.js"
let QQMapWX = require('@/libs/qqmap-wx-jssdk.min.js')
let qqmapsdk = new QQMapWX({
key: 'BJVBZ-UWBR6-DCZSL-E6DJE-AXQGZ-O5BMI'
})
let sysAddress = []
let publics = {
shareFriend(id, nickname, icon) {
//分享到微信朋友
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 0,
href: inviteUrl + nickname, //这地址太长了,就省略了
title: "中亿华商",
summary: "",
imageUrl: icon,
success: function(res) {
console.log(inviteUrl)
},
fail: function(err) {
console.log('err', err)
console.log(inviteUrl)
}
});
},
//分享到微信朋友圈
shareFriendcricle(id, nickname, icon) {
uni.share({
provider: "weixin",
scene: "WXSenceTimeline",
type: 0,
href: inviteUrl + id, //这地址太长了,就省略了
title: "中亿华商",
summary: nickname + " 邀请您加入中亿华商,各种福利等您来拿~~~",
imageUrl: icon,
success: function(res) {
},
fail: function(err) {
}
});
},
setMyaddressLngLat(res) {
uni.setStorageSync("MyAddressDataLngLat", res);
},
getMyaddressLngLat() {
return uni.getStorageSync("MyAddressDataLngLat");
},
// 把当前用户会话的未读消息数量存本地缓存一份因为websocket是多线程存在消息处理时多次同时进行修改导致数据只改变了一次应该为多次
setConversationUnReadNum(id, num){
let conversationUnReadData = publics.getConversationUnReadNum()
conversationUnReadData["c_"+id] = num
uni.setStorageSync("conversationUnReadData", conversationUnReadData)
},
getConversationUnReadNum(id){
let conversationUnReadData = uni.getStorageSync("conversationUnReadData") || {}
if (id) {
return conversationUnReadData["c_"+id] || 0
} else {
return conversationUnReadData
}
},
getCUnReadTotal(){
let conversationUnReadData = uni.getStorageSync("conversationUnReadData")
let total = 0
if (conversationUnReadData) {
for(let i in conversationUnReadData) {
total = total + conversationUnReadData[i]
}
}
return total
},
setUnsendMsg(id, txt){
let unSendMsgData = publics.getUnsendMsg()
unSendMsgData["c_"+id] = txt
uni.setStorageSync("unSendMsgData", unSendMsgData)
},
// 获取会话草稿消息
getUnsendMsg(id){
let unSendMsgData = uni.getStorageSync("unSendMsgData") || {}
let value = ""
if (id){
value = unSendMsgData["c_"+id] || ""
} else {
value = unSendMsgData
}
return value
},
/**
* 保存接单地址
* @param {Object} res
*/
setOrderAddress(res){
uni.setStorageSync("OrdedrAddress",JSON.stringify(res));
},
/**
*获取接单地址
* @param {Object} callback
*/
getOrderAddress(){
let ordedrAddress = uni.getStorageSync("OrdedrAddress");
if(ordedrAddress){
return JSON.parse(ordedrAddress);
}
},
/**
* 保存已接单信息
* @param {Object} res
*/
setReceivedOrdersData(res){
uni.setStorageSync("ReceivedOrdersData",JSON.stringify(res));
},
/**
* 获取已接单信息
* @param {Object} callback
*/
getReceivedOrdersData(){
let ordedrAddress = uni.getStorageSync("ReceivedOrdersData");
if(ordedrAddress){
return JSON.parse(ordedrAddress);
}
},
async findByOrderIdPayStatus(orderId) {
let resAli = await this.$http('post', url.order.tradeQuery, {
orderId: orderId
});
if (resAli) {
return true;
}
let resWechat = await this.$http('post', url.order.tradeQueryWechat, {
orderId: orderId
});
if (resWechat) {
return true;
}
this.$msg("订单未支付");
return false;
},
/**
* 数据 按照 拼音首字母 排序 并分组
*
* @param {Json} data ; 需要 排序的 数据
* @param {String} field 必须排序所依据的 字段
*
* @return {Json} ; 例如{A:[{},{}],B:[{},{}],C:[{}],#:[]}
*/
data_letter_sort(data, field) {
var letter_reg = /^[A-Z]$/;
var list = new Array();
var letter;
for (var i = 0; i < data.length; i++) {
// 添加 # 分组,用来 存放 首字母不能 转为 大写英文的 数据
list['#'] = new Array();
//获取字符串第一个
var oneReg = (data[i][field]).substr(0, 1);
// 首字母 转 大写英文
letter = oneReg.toUpperCase();
// 是否 大写 英文 字母
if (!letter_reg.test(letter)) {
//判断是否为中文
if (escape(oneReg).indexOf( "%u" ) < 0){
letter = '#';
} else {
letter = pinyin.getCamelChars(oneReg);
}
}
// 创建 字母 分组
if (!(letter in list)) {
list[letter] = new Array();
}
data[i]['name'] = letter;
// 字母 分组 添加 数据
list[letter].push(data[i]);
}
// 转换 格式 进行 排序;
var resault = new Array();
for (var key in list) {
resault.push({
letter: key,
list: list[key]
});
}
resault.sort(function(x, y) {
return x.letter.charCodeAt(0) - y.letter.charCodeAt(0);
});
// # 号分组 放最后
var last_arr = resault[0];
resault.splice(0, 1);
resault.push(last_arr);
// 转换 数据 格式
var json_sort = {}
for (var i = 0; i < resault.length; i++) {
json_sort[resault[i].letter] = resault[i].list;
}
return json_sort;
},
/**
* @param {Object} id
* @param {Object} flag true=关注,false=取消关注
*/
setGuanZhuDatasJiLu(id, flag) {
return;
let strId = ',' + id + ',';
let data = uni.getStorageSync("GuanZhuVideoDataS") || '';
data = data.replace(strId, '');
if (flag == 0) { //添加
data = data + strId;
}
uni.setStorageSync("GuanZhuVideoDataS", data);
},
/**
* @param {Object} id
* @param {Object} flag true=点赞,false=取消点赞
*/
setDianZanTrueDatasJiLu(id, flag) {
return;
let strId = ',' + id + ',';
let data = uni.getStorageSync("DianZanVideoDataS") || '';
data = data.replace(strId, '');
if (flag == 0) { //添加
data = data + strId;
}
uni.setStorageSync("DianZanVideoDataS", data);
},
myGetByTokenData(data) {
let token = uni.getStorageSync('token') || '';
data.authorization = token;
return data;
},
/**
* 视频编辑压缩和裁剪封面
*/
jiuYinVideoCrop(data,callback) {
const crop = uni.requireNativePlugin("Html5app-VideoCrop");
uni.showModal({
title: '视频裁剪模式',
content: '如果视频是手机竖屏拍摄模式,请选择竖屏裁剪。如果是横屏拍摄模式,请选择横屏裁剪。',
confirmText:'竖屏裁剪',
cancelText:'横屏裁剪',
success: function (res) {
let ratio = "9/16";
if (res.confirm) {//竖屏
ratio = "9/16";
} else {//横屏
if (parseInt(data.width) > parseInt(data.height)) { // 如果上传了一个横屏的视频,留空则为原视频大小(针对华为)
ratio = ""
} else { // 如果上传了一个竖屏的视频则为16/9需注意华为手机这时候会为3/4
ratio = "16/9";
}
}
crop.openCrop({
"url": data.tempFilePath,
"resolution":"720p", //分辨率
"mode":"scale", //视频模式,填充、裁剪
"quality":"sd", // 视频质量
"ratio":ratio, //视频比例
"mintime":2000, //限制最小裁剪时间
"codecs":2,//编码方式
"gop":"10", // 关键帧
"fps":"25" // 帧率
}, ret=>{
callback(ret);
});
}
});
},
/**
* 上传视频
*/
uploadJiuYinVideo(sizeConfig,type,callback){
uni.chooseVideo({
sourceType:[type],
maxDuration:60,
count: 1,
camera: 'front',
success: (res) => {
if(!res.tempFilePath || res.tempFilePath.trim() == ''){
uni.showToast({
title: "获取视频文件失败,请您重新选择视频"
})
return;
}
let viedoSize = (res.size/1024)/1024;//单位M
if(viedoSize > parseInt(sizeConfig)){
uni.showToast({
title: "视频解析失败,视频最大为 "+sizeConfig+"M"
})
return;
}
if(type === 'camera'){//相机拍摄的文件的路径需要做处理
res.tempFilePath = plus.io.convertLocalFileSystemURL(res.tempFilePath);
}
publics.jiuYinVideoCrop(res,resCrop => {
if(resCrop.code == 0){
callback(resCrop);
}else{
uni.showToast({
title: "视频裁剪失败"
})
return;
}
});
}
});
},
// 打开百度地图
openBMap(lon, lat, title, address) {
var url = null,
id = null,
f = null;
address = address == '' ? title : address;
switch (plus.os.name) {
case "Android":
// 规范参考官方网站http://developer.baidu.com/map/index.php?title=uri/api/android
url = "baidumap://map/marker?location=" + lat + "," + lon + "&title=" + title + "&content=" + address + "&src=wz";
f = "androidMarket";
id = "com.baidu.BaiduMap";
break;
case "iOS":
// 规范参考官方网站http://developer.baidu.com/map/index.php?title=uri/api/ios
url = "baidumap://map/marker?location=" + lat.toFixed(6) + "," + lon.toFixed(6) + "&title=" + title + "&content=" +
address + "&src=wz";
// url = "baidumap://map/marker?location=39.968789,116.347247&title=DCloud&content=%e6%89%93%e9%80%a0HTML5%e6%9c%80%e5%a5%bd%e7%9a%84%e7%a7%bb%e5%8a%a8%e5%bc%80%e5%8f%91%e5%b7%a5%e5%85%b7&src=HelloH5";
f = "iosAppstore";
id = "itunes.apple.com/cn/app/bai-du-de-tu-yu-yin-dao-hang/id452186370?mt=8";
break;
default:
return;
break;
}
url = encodeURI(url); //重点在这一句如果不加android没问题但是ios打不开每次提示未安装
console.log(url);
plus.runtime.openURL(url, function(e) {
uni.showToast({
title: "检查到您未安装百度地图,请先安装百度地图后再进行导航",
icon: 'none'
});
});
},
// 根据经纬度获取当前位置信息
getPositionToLngAndLat(lng, lat){
return new Promise((resolve, reject)=>{
qqmapsdk.reverseGeocoder({
location: {
latitude: lat,
longitude: lng
},
success: function(e){
resolve(e)
},
fail: function(err){
reject(err)
}
})
})
},
async passwordEncryption(rsaKey, password) {
if (!rsaKey || !password) return
let publicKey = rsaKey // 从后台获取公钥
let encryptor = new JSEncrypt() // 新建JSEncrypt对象
encryptor.setPublicKey(publicKey) // 设置公钥
let passwordEncryp = encryptor.encrypt(password) // 对密码进行加密
return passwordEncryp
},
getExternalSources(){
let key = 'SYSADDRESS_SOURCES';
//先从缓存获取,如果缓存不存在,则请求数据后存入缓存中
let externalSources = uni.getStorageSync(key);
if(externalSources){
externalSources = JSON.parse(externalSources)
return Promise.resolve(externalSources)
}else{
uni.request({
url: url.externalSources.sysAddressJson,
method: 'GET',
header:{
'Content-Type' : 'application/json',
'Access-Control-Allow-Origin': '*'
},
success: res => {
uni.setStorageSync(key, JSON.stringify(res.data))
sysAddress = res.data
return Promise.resolve(res.data)
},
fail: () => {
return Promise.resolve([])
}
});
}
},
/**
* 根据code获取当前城市数据
* 数据格式
* {"id":1,"adcode":110000,"name":"北京市","level":1,"centerLng":116.405285000000000,"centerLat":39.904989000000000,"padcode":0}
* */
getLngAndLatByCode(code){
if (!code) return
if (typeof code === "string") {
code = parseInt(code)
}
let sysAddress = uni.getStorageSync('SYSADDRESS_SOURCES');
console.log()
if (sysAddress) {
sysAddress = JSON.parse(sysAddress)
} else {
let sysAddress = uni.getStorageSync('SYSADDRESS_SOURCES');
}
let arrRes = []
let rev = (array, nodeCode) => {
array.map(v =>{
if (v.adcode === nodeCode) {
arrRes.unshift(v)
rev(array, v.padcode)
return false
}
})
return arrRes
}
arrRes = rev(sysAddress, code)
return arrRes;
},
// 根据三级地区code获取省市区
getAddressByThreeCode(code,callback){
if (!code) return
let addrObj = publics.getLngAndLatByCode(code);
let addressName = ""
if (addrObj) {
addrObj.map(v =>{
addressName = addressName+v.name
})
}
return addressName
},
/**
* 解析资源路径
* @param {String} rspPath 资源路径
* */
analysisResourcePath(rspPath){
let path = rspPath
// #ifdef APP-PLUS
path=plus.io.convertLocalFileSystemURL(path);
//去除后面时间戳
if(path.indexOf("?t=") != -1){
path = path.split("?t=")[0];
}
//判断第一个字符是否存在file://
if(path.indexOf("file://") == -1){
path = 'file://'+path;
}
let urls = path.split(".");
let fileType = urls[urls.length-1];
// #endif
// #ifdef H5
let fileType = "png"
// #endif
return {url: path, type: fileType}
},
/**
* 格式化oss链接
* @param {String} imgUrl 图片链接
* @param {Number} type 类型1-互动头像消息列表个人主页2-互动中动态的图片列表3-商品, 4-动态列表图片单张, 5-评论列表图片
* */
filterImgUrl(imgUrl, type){
let ossResizeData = uni.getStorageSync("ossResizeData")
if (!ossResizeData || !imgUrl) return imgUrl
let keyValue = ""
ossResizeData.forEach(v => {
if (type === 1 && v.keyCode === "resize_user_head_portrait") {
keyValue = v.keyValue
return false
}
if (type === 2 && v.keyCode === "resize_dynamic_images") {
keyValue = v.keyValue
return false
}
if (type === 3 && v.keyCode === "resize_goods_main_image") {
keyValue = v.keyValue
return false
}
if (type === 4 && v.keyCode === "resize_dynamic_one_images") {
keyValue = v.keyValue
return false
}
if (type === 5 && v.keyCode === "resize_goods_comment_image") {
keyValue = v.keyValue
return false
}
})
try{
if (imgUrl.indexOf("?") > -1) {
let splitImg = imgUrl.split("?")
// console.log("//////////////有问好需切割/////////", splitImg[0] + keyValue)
return splitImg[0] + keyValue
} else {
// console.log("//////////////无问好直接拼接/////////", imgUrl + keyValue)
return imgUrl + keyValue
}
}catch(err){
return imgUrl
}
},
// 公告操作
advertOption(code, value){
switch(code){
case "visit_external_website": // 访问外部网址
uni.navigateTo({
url: "/pages/home/webview?url="+value
})
return
case "visit_product_home_page": // 访问商铺主页
uni.navigateTo({
url: "/pages/home/store?id="+value
})
return
case "visit_product_details": //访问商品详情
uni.navigateTo({
url: "/pages/home/details?id="+value
})
return
case "visit_user_home_page": //访问用户主页
uni.navigateTo({
url: "/pages/interaction/user?id="+value
})
return
case "visit_alcohol_sound": //访问视频
uni.navigateTo({
url: "/pages/video/indexByUser?id="+value
})
return
case "visit_dynamic_details": //访问动态详情
uni.navigateTo({
url: "/pages/interaction/details?id="+value
})
return
case "visit_notice_details": //访问公告详情
uni.navigateTo({
url: "/pages/notice/details?id="+value
})
return
default:
return
}
},
// 根据缓存判断公告是否已经显示过了
advertShowToStorage(id) {
let advertList = uni.getStorageSync("advertList")
if (!advertList) {
let list = [id]
uni.setStorageSync("advertList", list)
return false
} else {
if (advertList.includes(id)){ // 判断ID是否存在缓存中
return true
} else {
return false
}
}
}
}
export default publics;