food_wechat/utils/index.js
2024-05-29 22:14:36 +08:00

202 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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
})
}
})
}