| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525 |
- import store from '@/store'
- import { mobileReg } from './tools/validate'
- import { uploadPic } from '@/api/common'
- import CONSTANT from '@/constant/index'
- import { parse } from '@/utils/util'
- // 判断是mobile 还是pc
- export function isMobile() {
- // 移动端
- if (/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent)) {
- return true
- }
- return false
- }
- // 获取当前连接地址
- export function getUrlHref() {
- // let comProtocolUrl = window.location.protocol // 协议
- // let comHostUrl = window.location.host // 主机
- // let url = comProtocolUrl + '//' + comHostUrl
- // url = 'http://dev.meijiabang.com'
- return CONSTANT.formal
- }
- /** *
- * 跳转到商城
- * @parmas jumpUrl 跳转的页面地址
- * @parmas attrUrl 用户的头像地址
- * @parmas titleName 用户的名字
- * @parmas urlEndStr 跳转的页面url需要补充的参数 例'&aaa=111'
- */
- export function jumpShop(jumpUrl, attrUrl, titleName, urlEndStr) {
- }
- // 获取小程序地址完整路径
- export function getMiniAppUrl(data = {}, isPath = false) {
- let getCurPages = getCurrentPages()
- if (getCurPages.length == 0) return false
- let getCurPagesObj = getCurPages[getCurPages.length - 1]
- console.log(getCurPagesObj)
- // let getRoute = getCurPagesObj.route + queryData(getCurPagesObj.options)
- // let getRoute = getCurPagesObj.route + queryData(data)
- let getRoute = getCurPagesObj.route + parse(data)
- getRoute = isPath ? `${CONSTANT.formal}/#/${getRoute}` : getRoute
- return getRoute
- }
- // 获取当前时间戳
- export function getTimestamp() {
- return Date.parse(new Date())
- }
- // 生成从minNum到maxNum的随机数
- export function getRandomNum(minNum, maxNum) {
- switch (arguments.length) {
- case 1:
- return parseInt(Math.random() * minNum + 1, 10)
- // eslint-disable-next-line no-unreachable
- break
- case 2:
- return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10)
- break
- default:
- return 0
- break
- }
- }
- // 节流
- export function debounce(fn, time) {
- let handle
- return function(e) {
- // 取消之前的延时调用
- clearTimeout(handle)
- handle = setTimeout(() => {
- fn(e)
- }, time || 50)
- }
- }
- // 登录页面公共地址栏参数传递
- export function loginParmas(data) {
- // eslint-disable-next-line one-var
- const query = {},
- ownerUserId = data.owner_user_id,
- shareUserId = data.share_user_id,
- pShareUserId = data.p_share_user_id,
- f = data.f
- // eslint-disable-next-line camelcase
- if (ownerUserId) {
- query['owner_user_id'] = ownerUserId
- }
- if (shareUserId) {
- query['share_user_id'] = shareUserId
- }
- if (pShareUserId) {
- query['p_share_user_id'] = pShareUserId
- }
- if (f) {
- query['f'] = f
- }
- return query
- }
- /** *
- * 根据时间戳获取日期时间
- * fmt格式 例:yyyy-MM-dd hh:mm:ss
- * status 为 true 时是13位时间
- */
- export function getFormatDate(time, fmt, status) {
- try {
- time = status ? time : time * 1000
- const now = new Date(time)
- return now.Format(fmt)
- } catch (e) {
- if (window.console) {
- console.log(e)
- }
- }
- }
- /** *
- * 时间格式化
- */
- // eslint-disable-next-line no-extend-native
- Date.prototype.Format = function(fmt = 'yyyy-MM-dd hh:mm:ss') {
- const o = {
- 'M+': this.getMonth() + 1, // 月份
- 'd+': this.getDate(), // 日
- 'h+': this.getHours(), // 小时
- 'm+': this.getMinutes(), // 分
- 's+': this.getSeconds(), // 秒
- 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
- S: this.getMilliseconds() // 毫秒
- }
- if (/(y+)/.test(fmt)) {
- fmt = fmt.replace(
- RegExp.$1,
- (this.getFullYear() + '').substr(4 - RegExp.$1.length)
- )
- }
- for (const 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
- }
- /** *
- * 根据日期获取时间戳
- * @parmas yyyy-MM-dd hh:mm:ss
- * @params second true的话获取的时间戳是到秒的
- */
- // 获取时间戳方法
- export function getDataTimestamp(time, second) {
- let etime = time || new Date
- if (second) {
- etime = Date.parse(time) / 1000
- } else {
- etime = new Date(etime)
- etime = etime.getTime()
- }
- return etime
- }
- // 判断是否为用户角色类型(个人: true || 企业: false)
- export function isPersonRoleType(roleType) {
- // 装修公司或材料商
- if (roleType === 1 || roleType === 2) {
- return false
- }
- // 其余类型均属于个人
- return true
- }
- /** *
- * 是否是微信浏览器
- */
- export function isWxBrowser() {
- let status = false
- // #ifdef H5
- const ua = window.navigator.userAgent.toLowerCase()
- // 通过正则表达式匹配ua中是否含有MicroMessenger字符串
- if (ua.match(/MicroMessenger/i) == 'micromessenger') {
- status = true
- } else {
- status = false
- }
- // #endif
- // #ifdef MP-WEIXIN
- status = false
- // #endif
- return status
- }
- /** *
- * 是否是微信小程序
- */
- export async function isWxMiniapp() {
- let status = false
- const ua = navigator.userAgent.toLowerCase()
- // ios的ua中无miniProgram,但都有MicroMessenger(表示是微信浏览器)
- // eslint-disable-next-line
- if (ua.match(/MicroMessenger/i) == 'micromessenger') {
- await wx.miniProgram.getEnv(function(res) {
- if (res.miniprogram) {
- status = true
- } else {
- // 走不在小程序的逻辑
- status = false
- }
- })
- } else {
- // 走不在小程序的逻辑
- status = false
- }
- return status
- }
- // 判断是用户角色类型
- export function getRoleTypeText(roleType) {
- if (roleType === 0) {
- return '普通用户'
- }
- // 装修公司或材料商
- if (roleType === 1) {
- return '装修公司'
- }
- if (roleType === 2) {
- return '材料商'
- }
- if (roleType === 3) {
- return '设计师'
- }
- if (roleType === 4) {
- return '项目经理/工长'
- }
- if (roleType === 5) {
- return '装修工人'
- }
- if (roleType === 6) {
- return '家居顾问'
- }
- }
- // 判断是用户角色类型
- export function getRoleTypeId(roleTypeText) {
- if (roleTypeText === '普通用户') {
- return 0
- }
- // 装修公司或材料商
- if (roleTypeText === '装修公司') {
- return 1
- }
- if (roleTypeText === '材料商') {
- return 2
- }
- if (roleTypeText === '设计师') {
- return 3
- }
- if (roleTypeText === '项目经理') {
- return 4
- }
- if (roleTypeText === '装修工人') {
- return 5
- }
- if (roleTypeText === '家居顾问') {
- return 6
- }
- }
- // 验证手机号码格式
- export function verifiPhone(phone) {
- if (phone.length != 11) {
- return false
- }
- return mobileReg.test(phone)
- }
- /** *
- * 获取位置距离
- * form 开始经纬度数据信息
- * to 结束经纬度数据信息
- * rule 运费规则
- * onlyDistance 是否只需要距离值
- */
- export function calcDistance(form = null, to = null, rule = {}, onlyDistance = false) {
- console.log('我开始计算运费了')
- console.log('form', form)
- console.log('to', to)
- console.log('rule', rule)
- if (!form || !to) {
- return
- }
- let lat1 = to.lat || to.latitude,
- lng1 = to.lng || to.longitude,
- lat2 = form.lat || form.latitude,
- lng2 = form.lng || form.longitude
- if (lat1 && lng1 && lat2 && lng2) {
- // eslint-disable-next-line one-var
- lat1 = lat1 * 1
- lng1 = lng1 * 1
- lat2 = parseFloat(lat2)
- lng2 = parseFloat(lng2)
- let distance = parseInt(calcDistanceFn(lat1, lng1, lat2, lng2))
- // 只需要返回距离的时候
- if (onlyDistance) {
- return distance
- }
- // 需要返回具体金额
- let freight = (distance - rule.first) * rule.add
- console.log('freight', freight)
- return freight
- } else {
- return 0
- }
- }
- // 计算距离 公用方法
- export function calcDistanceFn(lat1, lng1, lat2, lng2) {
- const f = (((lat1 + lat2) / 2) * Math.PI) / 180.0
- const g = (((lat1 - lat2) / 2) * Math.PI) / 180.0
- const l = (((lng1 - lng2) / 2) * Math.PI) / 180.0
- let sg = Math.sin(g)
- let sl = Math.sin(l)
- let sf = Math.sin(f)
- let s, c, w, r, d, h1, h2
- const a = 6378.137 // 取WGS84标准参考椭球中的地球长半径 单位M
- const fl = 1 / 298.257
- sg = sg * sg
- sl = sl * sl
- sf = sf * sf
- s = sg * (1 - sl) + (1 - sf) * sl
- c = (1 - sg) * (1 - sl) + sf * sl
- w = Math.atan(Math.sqrt(s / c))
- r = Math.sqrt(s * c) / w
- d = 2 * w * a
- h1 = (3 * r - 1) / 2 / c
- h2 = (3 * r + 1) / 2 / s
- return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg))
- }
- // 对象参数转为url参数
- // export function queryData(data, getArr) {
- // let queryStr = ''
- // let num = 0
- // for (const i in data) {
- // if (!util.isEmpty(data[i])) {
- // if (num === 0) {
- // let arr = data[i]
- // if (getArr && Array.isArray(arr)) {
- // let str = ''
- // for (let j = 0; j < arr.length; j++) {
- // if (j == 0) {
- // str += `${i}[${j}]=${arr[j]}`
- // } else {
- // str += `&${i}[${j}]=${arr[j]}`
- // }
- // }
- // queryStr += `?${str}`
- // } else {
- // queryStr += `?${i}=${data[i]}`
- // }
- // } else {
- // let arr = data[i]
- // if (getArr && Array.isArray(arr)) {
- // let str = ''
- // for (let j = 0; j < arr.length; j++) {
- // str += `&${i}[${j}]=${arr[j]}`
- // }
- // queryStr += `${str}`
- // } else {
- // queryStr += `&${i}=${data[i]}`
- // }
- // }
- // num++
- // }
- // }
- // return queryStr
- // }
- // 上传图片到服务器
- export function upLoadImg(arr) {
- let params = {}
- if (arr.length === 1) {
- params['file[content]'] = arr[0]
- } else {
- arr.forEach((item, index) => {
- params[`file[${index}][content]`] = item
- })
- }
- return new Promise((resolve, reject) => {
- if (arr.length) {
- uploadPic({
- ...params,
- relative_path: 1
- }).then(res => {
- if (res.status === 'success') {
- const list = res.data.image_url.reverse()
- resolve(list)
- } else {
- reject(res)
- }
- })
- } else {
- resolve(arr)
- }
- })
- }
- // weixin base64转图片
- export function weixinBase64src(base64data) {
- return new Promise((resolve, reject) => {
- const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []
- if (!format) {
- return (new Error('ERROR_BASE64SRC_PARSE'))
- }
- const filePath = `${wx.env.USER_DATA_PATH}/temporary_files1111aaccdd996633acv.${format}`
- const buffer = wx.base64ToArrayBuffer(bodyData)
- uni.getFileSystemManager().writeFile({
- filePath,
- data: buffer,
- encoding: 'binary',
- success: function(res) {
- resolve(filePath)
- },
- fail: function(err) {
- reject()
- console.log(err)
- }
- })
- })
- }
- // 深拷贝
- export function deepCopy(obj) {
- if (typeof obj !== 'object') { return }
- var str = JSON.stringify(obj)
- return JSON.parse(str)
- }
- // 复制到粘贴板
- export function copyText(str) {
- let that = this
- // #ifdef H5
- // 动态创建 textarea 标签
- const textarea = document.createElement('textarea')
- // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域
- textarea.readOnly = 'readonly'
- textarea.style.position = 'absolute'
- textarea.style.left = '-9999upx'
- // 将要 copy 的值赋给 textarea 标签的 value 属性
- textarea.value = str
- // 将 textarea 插入到 body 中
- document.body.appendChild(textarea)
- // 选中值并复制
- textarea.select()
- textarea.setSelectionRange(0, textarea.value.length)
- const result = document.execCommand('Copy')
- if (result) {
- that.$msg('复制成功')
- }
- document.body.removeChild(textarea)
- // #endif
- // #ifndef H5
- uni.setClipboardData({
- data: str,
- success: function() {
- that.$msg('复制成功')
- }
- })
- // #endif
- }
- // 冒泡排序
- export function bubbleSort(array) {
- if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
- var len = array.length,
- temp
- for (var i = 0; i < len - 1; i++) {
- for (var j = len - 1; j >= i; j--) {
- if (array[j - 1] && array[j].level < array[j - 1].level) {
- temp = array[j]
- array[j] = array[j - 1]
- array[j - 1] = temp
- }
- }
- }
- return array
- } else {
- return 'array is not an Array!'
- }
- }
- export default {
- copyText,
- deepCopy,
- debounce,
- getUrlHref,
- jumpShop,
- getMiniAppUrl,
- getTimestamp,
- getRandomNum,
- loginParmas,
- getFormatDate,
- isMobile,
- getDataTimestamp,
- isPersonRoleType,
- isWxBrowser,
- isWxMiniapp,
- getRoleTypeText,
- getRoleTypeId,
- verifiPhone,
- calcDistance,
- upLoadImg,
- bubbleSort
- }
|