daShangDao_miniProgram/utils/clone-tool.js
2025-11-24 10:25:20 +08:00

211 lines
5.2 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.

/**
* 商品克隆工具辅助函数
*/
import CryptoJS from 'crypto-js';
/**
* 生成设备ID
* 基于设备信息生成唯一标识符
*/
export function generateDeviceId() {
try {
// 获取系统信息
const systemInfo = uni.getSystemInfoSync();
// 组合设备信息
const deviceInfo = [
systemInfo.deviceId || '',
systemInfo.deviceBrand || '',
systemInfo.deviceModel || '',
systemInfo.system || '',
systemInfo.platform || '',
systemInfo.SDKVersion || ''
].filter(item => item).join('|');
// 使用MD5生成设备ID
if (deviceInfo) {
return CryptoJS.MD5(deviceInfo).toString().toUpperCase();
} else {
return 'UNKNOWN_DEVICE_' + Math.random().toString(36).substring(2, 10);
}
} catch (e) {
console.error('生成设备ID失败:', e);
return 'ERROR_DEVICE_' + Math.random().toString(36).substring(2, 10);
}
}
/**
* 验证日期格式 (YYYYMMDD)
* @param {string} dateStr - 日期字符串
* @returns {boolean} - 是否有效
*/
export function validateDate(dateStr) {
if (!dateStr || dateStr.length !== 8) {
return false;
}
try {
const year = parseInt(dateStr.substring(0, 4));
const month = parseInt(dateStr.substring(4, 6));
const day = parseInt(dateStr.substring(6, 8));
if (year < 1900 || year > 2100 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
// 检查特定月份的天数
if (month === 2) {
// 闰年检查
const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
if (day > (isLeapYear ? 29 : 28)) {
return false;
}
} else if ([4, 6, 9, 11].includes(month) && day > 30) {
return false;
}
return true;
} catch (e) {
return false;
}
}
/**
* 日期字符串转时间戳
* @param {string} dateStr - 日期字符串 (YYYYMMDD)
* @param {boolean} endOfDay - 是否为当天结束时间
* @returns {number} - 时间戳(秒)
*/
export function dateToTimestamp(dateStr, endOfDay = false) {
if (!dateStr || dateStr.length !== 8) {
throw new Error('日期格式错误必须是8位数字(YYYYMMDD)');
}
const year = parseInt(dateStr.substring(0, 4));
const month = parseInt(dateStr.substring(4, 6)) - 1; // 月份从0开始
const day = parseInt(dateStr.substring(6, 8));
let date;
if (endOfDay) {
date = new Date(year, month, day, 23, 59, 59);
} else {
date = new Date(year, month, day, 0, 0, 0);
}
return Math.floor(date.getTime() / 1000);
}
/**
* 调整价格
* @param {number|string} originalPrice - 原始价格
* @param {number} configType - 调整类型 (1:折扣, 2:加减值, 3:指定金额)
* @param {number} value - 调整值
* @returns {string} - 调整后的价格字符串(保留2位小数)
*/
export function adjustPrice(originalPrice, configType, value) {
try {
let price = parseFloat(originalPrice);
if (isNaN(price)) {
return originalPrice.toString();
}
switch (configType) {
case 1: // 折扣
price *= (value / 100);
break;
case 2: // 加减值
price += value;
break;
case 3: // 指定金额
price = value;
break;
}
// 确保价格为正数
price = Math.max(0.01, price);
return price.toFixed(2);
} catch (e) {
console.error('价格调整失败:', e);
return originalPrice.toString();
}
}
/**
* 格式化日志消息
* @param {string} message - 日志消息
* @returns {string} - 格式化后的日志消息
*/
export function formatLogMessage(message) {
const timestamp = new Date().toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
return `[${timestamp}] ${message}`;
}
/**
* 保存数据到本地存储
* @param {string} key - 存储键名
* @param {any} data - 要存储的数据
* @returns {boolean} - 是否成功
*/
export function saveToStorage(key, data) {
try {
uni.setStorageSync(key, JSON.stringify(data));
return true;
} catch (e) {
console.error(`保存数据失败 (${key}):`, e);
return false;
}
}
/**
* 从本地存储加载数据
* @param {string} key - 存储键名
* @param {any} defaultValue - 默认值
* @returns {any} - 加载的数据或默认值
*/
export function loadFromStorage(key, defaultValue = null) {
try {
const value = uni.getStorageSync(key);
if (value) {
return JSON.parse(value);
}
return defaultValue;
} catch (e) {
console.error(`加载数据失败 (${key}):`, e);
return defaultValue;
}
}
/**
* 获取新商品ID列表
* @returns {Array} - 新商品ID列表
*/
export function getNewItemIds() {
try {
const newIds = uni.getStorageSync('kongfz_new_ids') || [];
return Array.isArray(newIds) ? newIds : [];
} catch (e) {
console.error('获取新商品ID列表失败:', e);
return [];
}
}
/**
* 清空新商品ID列表
* @returns {boolean} - 是否成功
*/
export function clearNewItemIds() {
try {
uni.removeStorageSync('kongfz_new_ids');
return true;
} catch (e) {
console.error('清空新商品ID列表失败:', e);
return false;
}
}