/** * Parse the time to string * @param {(Object|string|number)} time * @param {string} cFormat * @returns {string | null} */ export function parseTime(time, cFormat) { if (arguments.length === 0 || !time) { return null } const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' let date if (typeof time === 'object') { date = time } else { if ((typeof time === 'string')) { if ((/^[0-9]+$/.test(time))) { time = parseInt(time) } else { time = time.replace(new RegExp(/-/gm), '/') } } if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } date = new Date(time) } const formatObj = { y: date.getFullYear(), m: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), a: date.getDay() } // eslint-disable-next-line camelcase const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { const value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } return value.toString().padStart(2, '0') }) // eslint-disable-next-line camelcase return time_str } /** * 过滤时间 格式化当天时间 比如把"20:00:00" 格式化成(晚上)8:00 * @param {string} value 时间格式位"20:00:00" */ export function formatTime(value) { if (!value) return '' // 如果时间为空,则返回空字符串 // 将时间字符串转换为 Date 对象 let time = new Date("2000/01/01 " + value) // 获取小时和分钟 let hour = time.getHours() let minute = time.getMinutes() // 根据小时判断是上午还是下午 let period = hour >= 12 ? '下午' : '上午' // 格式化小时,如果是下午,则减去12小时 hour = hour % 12 === 0 ? 12 : hour % 12 // 格式化分钟,补零操作 minute = minute.toString().padStart(2, '0') return `(${period})${hour}:${minute}` } /** * 过滤价格数值 超过小数点两位得 保留两位 * @param {string} value */ export function formatPrice(value) { if (isNaN(value)) return '' // 如果不是数字,则返回空字符串 // 格式化价格为保留两位小数 let formattedPrice = parseFloat(value).toFixed(2) // 如果价格有两位小数以上,则保留两位小数,否则显示整数或者一位小数 let decimalCount = (formattedPrice.split('.')[1] || []).length if (decimalCount > 2) { formattedPrice = parseFloat(formattedPrice).toFixed(2) } return formattedPrice } /** * 计算单spu 的单价 ps: spu可能有单sku组成 也可能 * @param {string} value */ export function calculateTotal(order) { // 检查参数是否有效 if (!order || typeof order !== 'object' || !order.spu_id || !order.skuG || !order.countG || !order .priceG) { return '' } // 计算总价 let total = 0 for (let i = 0; i < order.skuG.length; i++) { let price = parseFloat(order.priceG[i]) if (!isNaN(price)) { total += price } } // 保留两位小数并返回 return total.toFixed(2) } /** * 计算单购物车列表商品的价格总和 * @param {string} cartList 购物车列表 * @returns {string | null} 价格总和 */ export function totalPrice(cartList) { let totalPrice = 0 if (cartList.length !== 0) { cartList.forEach(item => { for (let i = 0; i < item.priceG.length; i++) { totalPrice += item.priceG[i] * item.countG[i] } }) } return Number(totalPrice) // 将 totalPrice 转换为小数点后两位的格式 } /** * 检查用户信息登录 信息 * @param {obj} store vex $store对象 */ export function checkUserInfo(store) { //用户信息 从本地缓存 提取到内存 if (!store.state.userInfo.token) { uni.getStorage({ key: 'userInfo', success: (res) => { store.commit('setUserInfo', res.data) }, fail: (err) => { wxLogin(store) } }); } } /** * 微信登录 ps;无感登录 * @param {obj} store vex $store对象 */ export function wxLogin(store) { uni.login({ provider: 'weixin', success: res => { if (res.code) { uni.$u.http.post('/Api/Login/authLogin', { code: res.code }, { header: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(res => { // 登录接口访问成功后 if (res.data.status === 0) { uni.showToast({ title: res.data.msg, icon: 'none', duration: 2000 }) } else if (res.data.status === 1) { //写入 用户信息缓存 uni.setStorage({ key: 'userInfo', data: res.data.userInfo, success: () => { //登录成功后 把用户信息提取到内存 store.commit('setUserInfo', res.data.userInfo) } }) } }) } else { uni.showToast({ title: '登录态失败', icon: 'none', duration: 2000 }) } }, fail: err => { uni.showToast({ title: '登录态失败', icon: 'none', duration: 2000 }) } }) }