import { ref } from "vue" import { get, post } from '../api/request.js' import api from "../api/index.js" import { Style } from '../utils/list.js' import { areaList } from './areaList.js' // 登录 export function login() { return new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: res => { let { code } = res uni.request({ method: 'POST', url: api.url + '/api/v1/auth/login', data: {code, from: uni.getStorageSync('fromId') || 0}, header: { Authorization: uni.getStorageSync('token') || '', accept: "application/json", appid: api.appId }, success: (val) => { if(!Array.isArray(val.data)) { let token = val.data.token_type + ' ' + val.data.access_token uni.setStorageSync('token', token) uni.setStorageSync('subscribe', val.data.is_subscribe) uni.setStorageSync('avatar', val.data.avatar) uni.setStorageSync('nickname', val.data.nickname) uni.setStorageSync('role', 0) uni.setStorageSync('login_type', 'mini-app') uni.setStorageSync('is_vip', val.data.is_vip) uni.setStorageSync('is_new', val.data.is_new) uni.setStorageSync('is_authorized', val.data.is_authorized) uni.setStorageSync('is_default_avatar', val.data.is_default_avatar) uni.setStorageSync('sessionKey', val.data.session_key) uni.setStorageSync('saveTime', Date.now()) // 存储时间 uni.setStorageSync('expires_in', val.data.expires_in * 1000) // 失效时间 } resolve(val.data) } }) }, fail(err) { reject(err) } }) }) } // 获取用户信息 export function getUserInfo() { return new Promise((resolve, reject) => { uni.hideLoading(); uni.getUserProfile ({ desc: '展示用户信息', success: user=> { post('/api/v1/user', { nickname: user.userInfo.nickName, avatar: user.userInfo.avatarUrl, }, 'PUT').then( res => { uni.setStorageSync('nickname', user.userInfo.nickName) uni.setStorageSync('avatar', user.userInfo.avatarUrl) uni.setStorageSync('is_authorized', 1) uni.setStorageSync('is_default_avatar', false) resolve(res) }) }, fail(err) { reject(err) }, complete() { } }) }) } export function getUserPhone(detail) { return new Promise((resolve, reject) => { uni.showLoading({ title: '获取中...', mask: true }) // 如果有code直接调接口 if(detail.code) { post('/api/v1/user/phone', { code: detail.code }).then((res) => { uni.setStorageSync('is_authorized', 1) uni.hideLoading() resolve(res) }).catch((err) => { reject(err) }) } else { // detail.encryptedData,detail.iv;根据code获取sessionkey,再根据sessionkey、encryptedData、iv获取手机号 uni.checkSession({ success: function (req) { post('/api/v1/user/phoneByEncrypted', { session_key: uni.getStorageSync('sessionKey'), encrypted_data: detail.encryptedData, iv: detail.iv }).then((res) => { uni.setStorageSync('is_authorized', 1) uni.hideLoading() resolve(res) }).catch((err) => { reject(err) }) }, fail: async function (error) { uni.hideLoading() await login() getUserPhone(detail) } }) } }) } // 绑定分享信息 export async function userBind(params) { let from = params.from || 0, s = params.s || 0, u = params.u || 0, group_id = params.group_id || 0, company_id = params.company_id || '', scene = params.scene let has_sale = uni.getStorageSync('has_sale') let index = getCurrentPages().length - 1 let link = getCurrentPages()[index].route if (from > 0 || company_id || !has_sale) { await post('/api/v1/user/bind', {from, s, u, group_id, scene, company_id, link}).then((res) => { uni.setStorageSync('has_sale', true) }) } } export async function judgePrivacy() { return new Promise((resolve, reject) => { if(uni.getPrivacySetting) { uni.getPrivacySetting({ success: res => { console.log("是否需要授权:", res.needAuthorization) if (res.needAuthorization) { resolve(true) } else{ resolve(false) } } }) } else { // 低版本基础库不支持 wx.getPrivacySetting 接口,隐私接口可以直接调用 resolve(false) } }) } export async function uvRecord(id) { await get('/api/v1/banner/' + id + '/uv/record').then((res) => { }) } // 消息提示框 export function showToast(title = '', icon = 'none') { uni.showToast({ title, icon }) } export function goodsItem () { function toGoods (id) { uni.navigateTo({ url: '/pages/groups/index?id=' + id }) } // 商品规格 const showSku = ref(false) const groupId = ref(0) const sourceId = ref(0) const sourceType = ref('normal') const skuInfo = ref([]) const skuId = ref(0) const sku = ref({}) const showBtn = ref(true) async function getGoodsSku (item) { groupId.value = item.shop_group_goods_id // 判断用户授权状态 await getgoodsgku(item) } // 获取商品规格 async function getgoodsgku (item) { if (item.specs_type === 1) { skuInfo.value = await getGoodsSpecs(item.id) skuInfo.value.shop_group_goods_id = item.pivot.shop_group_goods_id showSku.value = true } else if (item.shop_goods_id){ skuInfo.value = await getGoodsSpecs(item.shop_goods_id) skuId.value = item.shop_goods_sku_id || 0 if (item.goods && item.goods.sku) { sku.value = {...item.goods.sku, num: item.num, cart_id: item.id || ''} } if(item.shop_group_goods_id !=0) { skuInfo.value.shop_group_goods_id = item.shop_group_goods_id || item.pivot.shop_group_goods_id } else { skuInfo.value.shop_group_goods_id = 0 } showSku.value = true } else if (item.specs_type === 0) { if (item.stock > 0 || item.goods.stock > 0) { await addCart(item) } else { showToast('商品库存不足') return } } } const skus_1 = ref(false) async function getGoodsSpecs (id) { let res = await get(`/api/v1/goods/spec/${id}`) if(res.data.skus.length == 1) { skus_1.value = true } else { skus_1.value = false } return res.data } // 添加到购物车 async function addCart (item) { let res = await post('/api/v1/carts', { shop_goods_id: item.id, shop_goods_sku_id: 0, num:item.goods.limit_type==1 ? item.goods.start_sale_num : 1, shop_group_goods_id: item.pivot.shop_group_goods_id, source_id: sourceId.value, source_type: sourceType.value, }) if (res.code === 0) { showToast('已加入购物车') getNum() showBtn.value = true } } let num = ref(uni.getStorageSync('cartNum') * 1) // 获取购物车数量 async function getNum () { let res = await get('/api/v1/carts/num') num.value = Number(res.data.num) uni.setStorageSync('cartNum', num.value) } return { sourceId, sourceType, toGoods, showSku, getGoodsSku, skuInfo, skuId, sku,skus_1, addCart, getNum, num, showBtn, getGoodsSpecs } } let isclick = true // 重新支付 export function payAgain (id, link_id = 0) { if(isclick){ uni.showLoading({ mask: true, title: '加载中' }) isclick = false get(`/api/v1/pay/${id}`, { pay_style: 'app_pay' }).then((res) => { uni.hideLoading() setTimeout(() => { isclick = true }, 1000) wxPay(res.data, id, 0, false, 0, link_id) }).catch(() => { isclick = true }) } } // 微信支付 export function wxPay(paymentData, id, type, flag = false, from = 0, link_id = 0) { console.log('paymentData', paymentData) if(paymentData.pay_style == 'normal') { // 普通微信支付 uni.requestPayment({ provider: 'wxpay', timeStamp: paymentData.timeStamp, nonceStr: paymentData.nonceStr, package: paymentData.package, signType: 'MD5', paySign: paymentData.paySign, success: (val) => { if (id) { if(link_id) { uni.redirectTo({ url: '/pages/success/two?id=' + id + '&type=' + type + '&pay_id=' + paymentData.pay_id + '&from=' + from + '&link_id=' + link_id }) } else { uni.redirectTo({ url: '/pages/success/index?id=' + id + '&type=' + type + '&pay_id=' + paymentData.pay_id + '&from=' + from }) } } else { showToast('支付成功') uni.navigateBack({delta:1}) } }, async fail(err) { showToast('支付失败') if(flag){ await get(`/api/v1/order/close/${id}`).then((res) => { }) } if (type) { uni.redirectTo({ url: '/pages/order/list/index' }) } } }) } else if(paymentData.pay_style == 'jump_mini_half') { // 半屏支付 uni.openEmbeddedMiniProgram({ appId: paymentData.jump_mini_appid, path: paymentData.jump_mini_path, extraData: { 'id': id, 'type': type, 'flag': flag }, success(rea) { console.log('success', rea) let showNum = 0 uni.onAppShow((res) => { showNum += 1 if(showNum > 1) { return false } if(res.referrerInfo && res.referrerInfo.appId == paymentData.jump_mini_appid) { uni.offAppShow() uni.showLoading({ title: '加载中...', mask: true }) let i = 0 let interval = setInterval(async() => { let ress = await get(`/api/v1/pay/check/${paymentData.pay_id}`) console.log('pay_id:', paymentData.pay_id, 'status:', ress.data.status) i += 1 if(i == 5 || ress.data.status) { uni.hideLoading() console.log('status', ress.data.status) clearInterval(interval) if(ress.data.status) { if (id) { uni.redirectTo({ url: '/pages/success/index?id=' + id + '&type=' + type + '&pay_id=' + paymentData.pay_id + '&from=' + from }) } else { showToast('支付成功') uni.navigateBack({delta:1}) } } else { showToast('支付失败') if(flag){ await get(`/api/v1/order/close/${id}`).then((req) => { }) } if (type) { uni.redirectTo({ url: '/pages/order/list/index' }) } } } }, 300) } }) }, fail(err) { console.log('err', err) } }) } else if(paymentData.pay_style == 'plugin_pay') { // 易宝插件支付-plugin_pay const plugin = requirePlugin('yeepay-plugin') plugin.yeepayPlugin({ fee: paymentData.orderAmount * 100, // 金额(单位:分)传1就是1分钱 paymentArgs: paymentData, currencyType: 'CNY' // 货币符号的代码,默认为 CNY }).then(res => { if (id) { uni.redirectTo({ url: '/pages/success/index?id=' + id + '&type=' + type + '&pay_id=' + paymentData.pay_id + '&from=' + from }) } else { showToast('支付成功') uni.navigateBack({delta:1}) } }).catch(err => { console.log('支付失败', err) showToast('支付失败') if(flag){ get(`/api/v1/order/close/${id}`).then((ress) => { }) } if (type) { uni.redirectTo({ url: '/pages/order/list/index' }) } }) } } /** * 获取本周、本季度、本月 */ var now = new Date() //当前日期 var nowDayOfWeek = now.getDay() //今天本周的第几天 var nowDay = now.getDate() //当前日 var nowMonth = now.getMonth() //当前月 var nowYear = now.getYear() //当前年 nowYear += (nowYear < 2000) ? 1900 : 0 // 获取当前日期前几天的日期 export function getOldDay(str = 'y-m-d h:i:s', day = 0) { var dd = new Date() dd.setDate(dd.getDate() - day) //获取AddDayCount天后的日期 return dateTimeStr(str, new Date(dd)) } // 获取某个时间后几天的时间 export function getRangeTime(date, day) { let odate = new Date(date.replace(/-/g, '/')).getTime() odate = odate + (day * 24 * 60 * 60 * 1000) odate = new Date(odate) // 当前时间年月日 let month1 = (nowMonth + 1) >= 1 && (nowMonth + 1) <= 9 ? '0' + (nowMonth + 1) : (nowMonth + 1) let day1 = nowDay >= 1 && nowDay <= 9 ? '0' + nowDay : nowDay let nowTime = nowYear + '-' + month1 + '-' + day1 // 计算的日期 let month2 = (odate.getMonth() + 1) >= 1 && (odate.getMonth() + 1) <= 9 ? '0' + (odate.getMonth() + 1) : (odate.getMonth() + 1) let day2 = odate.getDate() >= 1 && odate.getDate() <= 9 ? '0' + odate.getDate() : odate.getDate() let time = odate.getFullYear() + '-' + month2 + '-' + day2 console.log(nowTime, time) let timeStr = (odate.getMonth() + 1) + '月' + odate.getDate() + '日' if(nowTime == time) { timeStr = '今天' } else if(getOldDay('y-m-d', -1) == time){ timeStr = '明天' } return timeStr } // 获取某个时间后几天的时间 // (2023-11-10 12:12:11, 3) => 2023-11-13 12:12:11 export function getNextTime(date, day) { let odate = new Date(date.replace(/-/g, "/")).getTime() odate = odate + (day * 24 * 60 * 60 * 1000) odate = new Date(odate) // 计算的日期 let year2 = odate.getFullYear() let month2 = (odate.getMonth()+1) >= 1 && (odate.getMonth()+1) <= 9 ? '0' + (odate.getMonth()+1) : (odate.getMonth()+1) let day2 = odate.getDate() >= 1 && odate.getDate() <= 9 ? '0' + odate.getDate() : odate.getDate() let hour = odate.getHours() < 10 ? '0' + odate.getHours() : odate.getHours() let minute = odate.getMinutes() < 10 ? '0' + odate.getMinutes() : odate.getMinutes() //分 let second = odate.getSeconds() < 10 ? '0' + odate.getSeconds() : odate.getSeconds() //秒 let time = year2 + '-' + month2 + '-' + day2 + ' ' + hour + ':' + minute + ':' + second return time } export function compareDate(date1, date2) { let str1 = new Date(date1.replace(/-/g, "/")).getTime() let str2 = new Date(date2.replace(/-/g, "/")).getTime() return str2 - str1 >= 0 } // 时间戳转日期 export function dateTimeStr(str = "y-m-d h:i:s", day){ var date = new Date(day), year = date.getFullYear(), //年 month = date.getMonth() + 1, //月 day = date.getDate(), //日 hour = date.getHours(), //时 minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(), //分 second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); //秒 month >= 1 && month <= 9 ? (month = "0" + month) : ""; day >= 0 && day <= 9 ? (day = "0" + day) : ""; hour >= 0 && hour <= 9 ? (hour = "0" + hour) : ""; if(str.indexOf('y') != -1){ str = str.replace('y', year) } if(str.indexOf('m') != -1){ str = str.replace('m', month) } if(str.indexOf('d') != -1){ str = str.replace('d', day) } if(str.indexOf('h') != -1){ str = str.replace('h', hour) } if(str.indexOf('i') != -1){ str = str.replace('i', minute) } if(str.indexOf('s') != -1){ str = str.replace('s', second) } return str } // 获得本周的开始日期 export function getWeekStartDate() { var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1) return dateTimeStr("y-m-d", weekStartDate) } // 获得本月的开始日期 export function getMonthStartDate(){ var monthStartDate = new Date(nowYear, nowMonth, 1) return dateTimeStr("y-m-d", monthStartDate) } // 保存图片到相册 export function saveImg (url, text) { uni.saveImageToPhotosAlbum({ filePath: url, success(res) { showToast(text || '保存成功', 'success') }, fail(err){ if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") { uni.showModal({ title: '提示', content: '需要您授权保存相册', showCancel: false, success() { // 拉起授权 uni.openSetting({ success(settingdata) { if (settingdata.authSetting['scope.writePhotosAlbum']) { uni.showModal({ title: '提示', content: '获取权限成功, 请重新保存图片', showCancel: false }) } else { uni.showModal({ title: '提示', content: '获取权限失败,将无法保存到相册哦~', showCancel: false }) } }, fail(failData) { }, complete(finishData) { } }) } }) } } }) } // 图片预览 export async function getImg () { let imgsArray = []; let res = await get('/api/v1/user/qrCode') if (res.code === 0) { imgsArray.push(res.data.qr_code) } uni.previewImage({ urls: imgsArray, current: 0 }) } // 批量加购物车 export function adddCartBatch (items) { const goods = items.map(item => { return { shop_goods_id: item.shop_goods_id, shop_goods_sku_id: item.shop_sku_id, num: item.number, shop_group_goods_id: item.shop_group_goods_id, source_id: 0, source_type: 'normal' } }) post('/api/v1/carts/batch', {goods}).then(res => { showToast('已添加到购物车') setTimeout(function() { uni.switchTab({ url: '/pages/cart/index' }) }, 1000) }) } // 去评论 export function toWrite (id) { uni.navigateTo({ url: `/pages/order/comment/write?id=${id}` }) } // 获取店铺信息 export async function getShopInfo () { let res = await get('/api/app/shop') uni.setStorageSync('page_rule', res.data.home_page_rule) uni.setStorageSync('vip_on', res.data.vip_on) uni.setStorageSync('shop_id', res.data.id) uni.setStorageSync('official_link', res.data.official_link) uni.setStorageSync('vip_price_show', res.data.vip_price_show === 1) uni.setStorageSync('refund_mode', res.data.refund_mode) uni.setStorageSync('show_identity', res.data.show_identity) uni.setStorageSync('vip_detail_on', res.data.vip_detail_on) uni.setStorageSync('score_on', res.data.score_on) uni.setStorageSync('score_trade_share', res.data.score_trade_share) uni.setStorageSync('score_comment', res.data.score_comment) uni.setStorageSync('score_trade', res.data.score_trade) uni.setStorageSync('deduct_overtime_ship_on', res.data.deduct_overtime_ship_on) uni.setStorageSync('img_preview_suffix', res.data.img_preview_suffix) uni.setStorageSync('rule', res.data.home_special_rule) uni.setStorageSync('logo', res.data.logo) uni.setStorageSync('theme_index', res.data.show_style_type || 0) uni.setStorageSync('theme_color', Style[res.data.show_style_type || 0].color) uni.setStorageSync('show_explain_video', res.data.show_explain_video) uni.setStorageSync('user_bg', res.data.user_background_img) uni.setStorageSync('has_multi_group', res.data.has_multi_group) uni.setStorageSync('technical_support', res.data.extendInfo ? res.data.extendInfo.technical_support : 0) uni.setStorageSync('technical_support_title', res.data.extendInfo ? res.data.extendInfo.technical_support_title : '') return res.data } /** * @desc 格式化日期字符串 * @param { Nubmer} - 时间戳 * @returns { String } 格式化后的日期字符串 */ export function formatDate(timestamp) { // 补全为13位 let arrTimestamp = (timestamp + '').split(''); for (let start = 0; start < 13; start++) { if (!arrTimestamp[start]) { arrTimestamp[start] = '0'; } } timestamp = arrTimestamp.join('') * 1; let minute = 1000 * 60; let hour = minute * 60; let day = hour * 24; let month = day * 30; let now = new Date().getTime(); let diffValue = now - timestamp; // 如果本地时间反而小于变量时间 if (diffValue < 0) { return '不久前'; } // 计算差异时间的量级 let monthC = diffValue / month; let weekC = diffValue / (7 * day); let dayC = diffValue / day; let hourC = diffValue / hour; let minC = diffValue / minute; // 数值补0方法 let zero = function (value) { if (value < 10) { return '0' + value; } return value; }; // 使用 if (monthC > 4) { // 超过1年,直接显示年月日 return (function () { let date = new Date(timestamp); return date.getFullYear() + '年' + zero(date.getMonth() + 1) + '月' + zero(date.getDate()) + '日'; })(); } else if (monthC >= 1) { return parseInt(monthC) + '月前'; } else if (weekC >= 1) { return parseInt(weekC) + '周前'; } else if (dayC >= 1) { return parseInt(dayC) + '天前'; } else if (hourC >= 1) { return parseInt(hourC) + '小时前'; } else if (minC >= 1) { return parseInt(minC) + '分钟前'; } return '刚刚'; } // 监听网络变化 export function NetWork() { uni.getNetworkType({ success: (res) => { if (res.networkType == 'none') { uni.showToast({ icon: "none", title: '网络错误,请重试!' }) } } }) // 监听网络状态变化 uni.onNetworkStatusChange((res) => { if (!res.isConnected) { uni.showToast({ icon: "none", title: '网络错误,请重试!' }) } }) } /** * @desc 封装倒计时组件 * @param endTime 结束时间 * @param type 返回的类型 * @return {*} */ export function DownTime( endTime, type) { let thisEndTime = new Date(endTime) // 获取截 if(type == 3){ var downFn = setInterval(() => { let newTime = new Date().getTime()//获取当前时间 let backTime = thisEndTime - newTime//计算剩余时间 var d = Math.floor(backTime / (1000 * 60 * 60 * 24)); //计算天数 var h = Math.floor(backTime / (1000 * 60 * 60) % 24); //计算小时数 var m = Math.floor(backTime / (1000 * 60) % 60); //计算分钟数 var s = Math.floor(backTime / 1000 % 60); //计算秒数 return {d: d, h: h, m: m, s: s} }, 1000) }else if(type == 1 || type == 2) { var to = new Date(endTime.replace(/-/g, "/")) var now = new Date() var backTime = to.getTime() - now.getTime() var d = Math.floor(backTime / (1000 * 60 * 60 * 24)) //计算天数 var h = Math.floor(backTime / (1000 * 60 * 60) % 24) //计算小时数 var m = Math.floor(backTime / (1000 * 60) % 60) //计算分钟数 var s = Math.floor(backTime / 1000 % 60); //计算秒数 if( type == 1){ if(d > 0){ return '距结束'+ d + '天' }else if(h||m||s){ let time1='距结束' + h + '' + m + '' + s + '秒' let time2='已结束' return backTime > 0 ? time1 : time2 }else{ return '' } }else if(type == 2) { d = d > 9 ? d : '0' + d h = h > 9 ? h : '0' + h m = m > 9 ? m : '0' + m let time1='距结束' + d + '' + h + '' + m + '分' if(d == 0) { time1='距结束' + h + '' + m + '分' } let time2='已结束' return backTime > 0 ? time1 : time2 } } } export function UpTime( startTime, type) { let stTime = new Date(startTime.replace(/-/g, "/")) if(new Date().getTime() - stTime < 0) { if(type == 3){ setInterval(() => { let newTime = new Date().getTime()//获取当前时间 let backTime = stTime - newTime//计算剩余时间 var d = Math.floor(backTime / (1000 * 60 * 60 * 24)); //计算天数 var h = Math.floor(backTime / (1000 * 60 * 60) % 24); //计算小时数 var m = Math.floor(backTime / (1000 * 60) % 60); //计算分钟数 var s = Math.floor(backTime / 1000 % 60); //计算秒数 return {d: d, h: h, m: m, s: s} }, 1000) } if(type == 1 || type == 2) { var to = new Date(startTime.replace(/-/g, "/")) var now = new Date() var backTime = to.getTime() - now.getTime() var d = Math.floor(backTime / (1000 * 60 * 60 * 24)) //计算天数 var h = Math.floor(backTime / (1000 * 60 * 60) % 24) //计算小时数 var m = Math.floor(backTime / (1000 * 60) % 60) //计算分钟数 var s = Math.floor(backTime / 1000 % 60); //计算秒数 if(type == 1){ if(d > 0){ return '距开始'+ d + '天' }else if(h || m || s){ let time1 = '距开始' + h + '' + m + '' + s + '秒' return time1 } } else if(type == 2) { d = d > 9 ? d : '0' + d h = h > 9 ? h : '0' + h m = m > 9 ? m : '0' + m let time1='距开始' + d + '' + h + '' + m + '分' if(d == 0) { time1='距开始' + h + '' + m + '分' } let time2='已结束' return time1 } } } else { return '' } } export function gapTime(startTime) { let stTime = new Date(startTime.replace(/-/g, "/")) var to = new Date(startTime.replace(/-/g, "/")) var now = new Date() var backTime = to.getTime() - now.getTime() var d = Math.floor(backTime / (1000 * 60 * 60 * 24)) //计算天数 var h = Math.floor(backTime / (1000 * 60 * 60) % 24) //计算小时数 var m = Math.floor(backTime / (1000 * 60) % 60) //计算分钟数 var s = Math.floor(backTime / 1000 % 60); //计算秒数 if(d > 0){ return d + '天' } else if(h > 0){ return h + '小时' } else if(m > 0) { return m + '分钟' } else { return s + '秒' } } export function parseTime(Time) { let date = Time.split(' ')[0] let start = Time.split(' ')[1].substr(0, 5) let today = new Date().setHours(0, 0, 0, 0) let dayStr = new Date(date.replace(/-/g, "/")).setHours(0, 0, 0, 0) let dateObj = { 0: '今天', 86400000: '明天', 172800000: '后天' } return (dateObj[dayStr - today] || date) + ' ' + start } export const writePhotosAlbum = (successFun, failFun) => { uni.getSetting({ success(res) { if (!res.authSetting['scope.writePhotosAlbum']) { uni.authorize({ scope: 'scope.writePhotosAlbum', success: function () { successFun && successFun() }, fail: function (res) { uni.hideLoading() uni.showModal({ title: '提示', content: "微信授权保存图片,是否重新授权?", showCancel: true, cancelText: "否", confirmText: "是", success: function (res2) { if (res2.confirm) { uni.openSetting({ success: (res3) => { if (res3.authSetting['scope.writePhotosAlbum']) { successFun && successFun() } else { failFun && failFun() } } }) } else { failFun && failFun() } } }) } }) } else { successFun && successFun() } } }) } export const getDayDiff = (date1, date2) => { const oneDay = 1000 * 60 * 60 * 24 const timeDiff = Math.abs(new Date(date1.replace(/-/g, '/')).getTime() - new Date(date2.replace(/-/g, '/')).getTime()) const dayDiff = Math.ceil(timeDiff / oneDay) let str = dayDiff == 0 ? '当天' : dayDiff + '天后' return str } export const getIntervalDay = (date1, date2) => { const oneDay = 1000 * 60 * 60 * 24 const timeDiff = Math.abs(new Date(date1.replace(/-/g, '/')).getTime() - new Date(date2.replace(/-/g, '/')).getTime()) const dayDiff = Math.ceil(timeDiff / oneDay) let flag = dayDiff < 180 ? true : false return flag } export const getAreaCode = (prov_name, city_name, area_name) => { return new Promise((resolve, reject) => { let list = [] for(let a = 0; a < areaList.length; a++){ let prov = areaList[a] if (prov.name == prov_name) { list.push({ code: prov.id, name: prov_name }) for(let b = 0; b < prov.children.length; b++){ let city = prov.children[b] if (city.name == city_name) { list.push({ code: city.id, name: city_name }) for(let c = 0; c < city.children.length; c++){ let area = city.children[c] if (area.name == area_name) { list.push({ code: area.id, name: area_name }) break } } break } } break } } resolve(list) }) } export const downloadVideo = (url) => { uni.showLoading({ mask: true, title: '加载中' }) uni.downloadFile({ url: url, success: (res) => { if (res.statusCode === 200) { uni.hideLoading() uni.saveVideoToPhotosAlbum({ filePath: res.tempFilePath, success: () => { showToast('保存成功') }, fail: (err) => { if (err.errMsg === 'saveVideoToPhotosAlbum:fail auth deny') { uni.showModal({ title: '提示', content: '需要您授权保存相册', showCancel: false, success() { uni.openSetting({ success(settingdata) { if (settingdata.authSetting['scope.writePhotosAlbum']) { uni.showModal({ title: '提示', content: '获取权限成功, 请重新保存图片', showCancel: false }) } else { uni.showModal({ title: '提示', content: '获取权限失败,将无法保存到相册哦~', showCancel: false }) } }, fail(failData) { }, complete(finishData) { } }) } }) } } }) } }, fail: (err) => { uni.hideLoading() uni.showToast({ title: err.errMsg, icon: 'none' }) } }) } export const uniShare = (title, face_img, path) => { uni.share({ provider: 'weixin', scene: "WXSceneSession", type: 5, title: title, imageUrl: face_img, miniProgram: { id: api.protoId, path: path, type: 0, webUrl: api.webUrl }, success(res) { }, fail(err) { } }) } export const toMiniProgram = (path) => { uni.showModal({ title: '提示', content: '需要离开商城APP,跳转至妙选商城小程序,进行后续操作,确认跳转吗?', success(res) { if (res.confirm) { var pages = getCurrentPages() var page = pages[pages.length - 1] var shares = null, sweixin = null plus.share.getServices(function(s){ shares = {} for(var i in s){ var t = s[i] shares[t.id] = t } sweixin = shares['weixin'] sweixin.launchMiniProgram({ id: 'gh_ca74730c9f77', path: path }) }, function(e) { console.log("获取分享服务列表失败:" + e.message) }) } } }) } export const whetherLogin = () => { let flag = true let saveTime = uni.getStorageSync('saveTime') let expires_in = uni.getStorageSync('expires_in') let token = uni.getStorageSync('token') if((saveTime && expires_in && Date.now() > saveTime + expires_in) || !expires_in || !saveTime || !token) { flag = false } return flag }