132 lines
3.4 KiB
TypeScript
132 lines
3.4 KiB
TypeScript
import { t } from '@/utils/i18n'
|
|
/**
|
|
* 页面跳转
|
|
* @param {string} path - 要跳转的页面路径
|
|
*/
|
|
export const onPageJump = (path: string) => {
|
|
uni.navigateTo({
|
|
url: path
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 页面返回
|
|
*/
|
|
export const onPageBack = () => {
|
|
uni.navigateBack()
|
|
}
|
|
|
|
/**
|
|
* 拨打电话
|
|
* @param {string} phoneNumber - 要拨打的电话号码
|
|
* @param {string} title - 拨打电话提示的标题,默认值为空字符串
|
|
*/
|
|
export const makePhoneCall = (phoneNumber: string, title: string = t('global.call')) => {
|
|
uni.showModal({
|
|
title: title,
|
|
content: phoneNumber,
|
|
confirmText: t('common.confirm'),
|
|
cancelText: t('common.cancel'),
|
|
success: (res: any) => {
|
|
if (res.confirm) {
|
|
uni.makePhoneCall({
|
|
phoneNumber: phoneNumber,
|
|
success: () => {
|
|
console.log('拨打电话成功')
|
|
},
|
|
fail: (error: any) => {
|
|
console.error('拨打电话失败:', error)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 复制到剪贴板
|
|
* @param {string} content - 要复制的内容
|
|
* @param {string} title - 复制成功提示的标题,默认值为空字符串
|
|
*/
|
|
export const copyToClipboard = (content: string, title: string = '') => {
|
|
uni.setClipboardData({
|
|
data: content,
|
|
success: () => {
|
|
uni.showToast({
|
|
title: title + t('user.copySuccess'),
|
|
icon: 'none'
|
|
})
|
|
},
|
|
fail: (error: any) => {
|
|
console.error('复制失败:', error)
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 计算最低价格
|
|
* @param {object} priceData - 价格数据对象,键为价格类型,值为价格
|
|
* @returns {object} - 包含最低价格的键值对,{ key: 价格类型, value: 最低价格 }
|
|
*/
|
|
export const calculateLowestPrice = (priceData: object): { key: string, value: number } => {
|
|
const validEntries = Object.entries(priceData)
|
|
.filter(([, value]) => typeof value === 'number' && value !== 0);
|
|
|
|
if (validEntries.length === 0) {
|
|
throw new Error('No valid non-zero price found in the data');
|
|
}
|
|
|
|
const [minKey, minValue] = validEntries.reduce((min, curr) =>
|
|
curr[1] < min[1] ? curr : min
|
|
);
|
|
|
|
return { key: minKey, value: minValue };
|
|
}
|
|
|
|
/**
|
|
* Parse the time to string
|
|
* @param {(Object|string|number)} time
|
|
* @param {string} cFormat
|
|
* @returns {string | null}
|
|
*/
|
|
export function parseTime(time: any, cFormat: string) {
|
|
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))) {
|
|
// support "1548221490638"
|
|
time = parseInt(time)
|
|
} else {
|
|
// support safari
|
|
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()
|
|
}
|
|
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
|
const value = formatObj[key as keyof typeof formatObj]
|
|
// Note: getDay() returns 0 on Sunday
|
|
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value as number] }
|
|
return value.toString().padStart(2, '0')
|
|
})
|
|
return time_str
|
|
} |