import Config from "./config.js" import Vue from 'vue' const Util = { /** * 图片路径转换 * @param {String} img_path 图片地址 * @param {Object} params 参数,针对商品、相册里面的图片区分大中小,size: big、mid、small */ img(img_path, params) { var path = "" if (img_path != undefined && typeof img_path == 'string' && img_path != "") { if (img_path.split(',').length > 1) { img_path = img_path.split(',')[0]; } if (params && img_path != this.$store.getters.defaultGoodsImage) { // 过滤默认图 let arr = img_path.split(".") let suffix = arr[arr.length - 1] arr.pop() arr[arr.length - 1] = arr[arr.length - 1] + "_" + params.size.toUpperCase() arr.push(suffix) img_path = arr.join(".") } if (img_path.indexOf("http://") == -1 && img_path.indexOf("https://") == -1) { path = Config.imgDomain + "/" + img_path } else { path = img_path } } return path }, /** * 时间戳转日期格式 * @param {Object} timeStamp */ timeStampTurnTime(timeStamp) { if (timeStamp != undefined && timeStamp != "" && timeStamp > 0) { var date = new Date() date.setTime(timeStamp * 1000) var y = date.getFullYear() var m = date.getMonth() + 1 m = m < 10 ? "0" + m : m var d = date.getDate() d = d < 10 ? "0" + d : d var h = date.getHours() h = h < 10 ? "0" + h : h var minute = date.getMinutes() var second = date.getSeconds() minute = minute < 10 ? "0" + minute : minute second = second < 10 ? "0" + second : second return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second } else { return "" } }, /** * 倒计时 * @param {Object} seconds 秒 */ countDown(seconds) { let [day, hour, minute, second] = [0, 0, 0, 0] if (seconds > 0) { day = Math.floor(seconds / (60 * 60 * 24)) hour = Math.floor(seconds / (60 * 60)) - day * 24 minute = Math.floor(seconds / 60) - day * 24 * 60 - hour * 60 second = Math.floor(seconds) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60 } if (day < 10) { // day = '0' + day } if (hour < 10) { // hour = '0' + hour } if (minute < 10) { // minute = '0' + minute } if (second < 10) { // second = '0' + second } return { d: day, h: hour, i: minute, s: second } }, /** * 数值去重 * @param {Array} arr 数组 * @param {string} field 字段 */ unique(arr, field) { const res = new Map() return arr.filter(a => !res.has(a[field]) && res.set(a[field], 1)) }, /** * 判断值是否在数组中 * @param {Object} elem * @param {Object} arr * @param {Object} i */ inArray: function(elem, arr) { return arr == null ? -1 : arr.indexOf(elem) }, /** * 获取某天日期 * @param {Object} day */ getDay: function(day) { var today = new Date() var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day today.setTime(targetday_milliseconds) const doHandleMonth = function(month) { var m = month if (month.toString().length == 1) { m = "0" + month } return m } var tYear = today.getFullYear() var tMonth = today.getMonth() var tDate = today.getDate() var tWeek = today.getDay() var time = parseInt(today.getTime() / 1000) tMonth = doHandleMonth(tMonth + 1) tDate = doHandleMonth(tDate) const week = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] return { t: time, y: tYear, m: tMonth, d: tDate, w: week[tWeek] } }, /** * 复制 * @param {Object} message * @param {Object} callback */ copy(value, callback) { var oInput = document.createElement("input") //创建一个隐藏input(重要!) oInput.value = value //赋值 document.body.appendChild(oInput) oInput.select() // 选择对象 document.execCommand("Copy") // 执行浏览器复制命令 oInput.className = "oInput" oInput.style.display = "none" this.$message({ message: "复制成功", type: "success" }) typeof callback == "function" && callback() }, /** * 深度拷贝对象 * @param {Object} obj */ deepClone(obj) { const isObject = function(obj) { return typeof obj == "object" } if (!isObject(obj)) { throw new Error("obj 不是一个对象!") } //判断传进来的是对象还是数组 let isArray = Array.isArray(obj) let cloneObj = isArray ? [] : {} //通过for...in来拷贝 for (let key in obj) { cloneObj[key] = isObject(obj[key]) ? this.deepClone(obj[key]) : obj[key] } return cloneObj }, // 过滤价格 filterPrice(value) { return value.toFixed(2) }, pushToTab(url) { if (process.client) { if (typeof url == 'string') { let routeUrl = ''; if (url.indexOf('http') != -1 || url.indexOf('https') != -1) { routeUrl = url; } else { routeUrl = Config.webDomain + url; } window.open(routeUrl, '_blank'); } else if (typeof url == 'object') { let routeUrl = ''; if (url.path.indexOf('http') != -1 || url.path.indexOf('https') != -1) { routeUrl = url.path; } else { routeUrl = Config.webDomain + url.path; } if (url.qurey) { Object.keys(url.qurey).forEach((value, index) => { url.qurey += (index == 0 ? '?' : '&') + value + '=' + url.qurey[value]; }) } window.open(routeUrl, '_blank'); } } }, /** * 验证手机号 * @param {string} mobile 被验证的mobile * @return {object} 验证后的结果 **/ verifyMobile(mobile) { var parse = /^\d{11}$/.test(mobile); return parse; } } Vue.prototype.$util = Util; Vue.prototype.$img = Util.img Vue.prototype.$timeStampTurnTime = Util.timeStampTurnTime Vue.prototype.$copy = Util.copy