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;