/* * 各种工具方法 * * @Alphaair * 20190519 create. **/ const { refreshMyToken } = require("./serve/user"); function uploadImageToAliyun(filePath) { const fileName = `avatar/${Date.now()}_${Math.random().toString(36).substr(2, 9)}${filePath.match(/\.(\w+)$/)[1]}`; const ossPath = `https://oss.console.aliyun.com/bucket/oss-cn-shanghai/yuedong-wechatapplet/object?path=Upload%2FUser%2Favater%2F/${fileName}`; // 上传文件到阿里云 OSS this.ossClient.put(fileName, filePath).then((result) => { console.log('上传成功:', result); return result; // 可选:将头像 URL 保存到服务器或本地存储 }).catch((err) => { console.error('上传失败:', err); wx.showToast({ title: '上传失败', icon: 'none', duration: 2000 }); }); } async function refreshToken() { let token = wx.getStorageSync('token') const res = await refreshMyToken(token) if(res.data.token){ wx.setStorageSync('token', res.data.token) wx.setStorageSync('roleId', res.data.role_Id) } } /** * 根据年月日获取星期几 * @param {number} year - 年份,例如 2023 * @param {number} month - 月份(1-12) * @param {number} day - 日期(1-31) * @returns {string} 星期几的名称或错误信息 */ function getWeekdayWithValidation(year, month, day) { // 参数验证 if (typeof year !== 'number' || typeof month !== 'number' || typeof day !== 'number') { return '参数必须是数字'; } if (month < 1 || month > 12) { return '月份必须在1到12之间'; } if (day < 1 || day > 31) { return '日期必须在1到31之间'; } try { const date = new Date(year, month - 1, day); const weekday = date.getDay(); const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; return weekdays[weekday]; } catch (error) { return '无效的日期'; } } function formatDate(date, format) { if (!date) return; if (!format) format = "yyyy-MM-dd"; switch (typeof date) { case "string": let reg = /^\/Date\((\-?\d+)\)\/$/; if (reg.test(date)) { let m = reg.exec(date); date = parseInt(m[1]); date = new Date(date); } else if (date.indexOf('T') !== -1) { //无时区时加入GMT+8 if (date.indexOf('+08:00') === -1) date += '+08:00'; date = new Date(date); } else { date = new Date(Date.parse(date.replace(/-/g, "/"))); } break; case "number": date = new Date(date); break; } if (!date instanceof Date) return; let dict = { "yyyy": date.getFullYear(), "M": date.getMonth() + 1, "d": date.getDate(), "H": date.getHours(), "m": date.getMinutes(), "s": date.getSeconds(), "MM": ("" + (date.getMonth() + 101)).substr(1), "dd": ("" + (date.getDate() + 100)).substr(1), "HH": ("" + (date.getHours() + 100)).substr(1), "mm": ("" + (date.getMinutes() + 100)).substr(1), "ss": ("" + (date.getSeconds() + 100)).substr(1) }; return format.replace(/(yyyy|MM?|dd?|HH?|ss?|mm?)/g, function() { return dict[arguments[0]]; }); } /** * 复制数组 * * @param {Array} array 要复制克隆的数组 * @returns {Array} 复制好的数组 */ function cloneArray(array) { if (array instanceof Array === false) return array; let dest = array.map(item => { if (item instanceof Array) return cloneArray(item); else if (item instanceof Date) return item; else if (typeof item === 'object') return clone(item); else return item; }); return dest; } /** * 深拷贝对象 * @param {Object,Array} 要复制的源对象 * @param {Object} 合并的目前对象,为空是新建对象 * */ function clone(source, dest) { if (source instanceof Array) return cloneArray(source); if (!dest) dest = {}; if (!source || typeof source !== 'object') return null; let keys = Object.keys(source); keys.forEach(key => { if (source[key] instanceof Array) dest[key] = cloneArray(source[key]); else if (source[key] instanceof Date) dest[key] = source[key]; else if (typeof source[key] === 'object') dest[key] = clone(source[key]); else dest[key] = source[key]; }); return dest; } /** * 安全方式调用fn * * @param {Function} fn 要调用的方法 * @returns 如果fn存在则返回其引用,否则返回一个空函数 */ function invoke(fn) { if (fn instanceof Function) return fn; return function() {}; } /** * 生成一个GUID * */ function guid() { function S4() { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); } return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); } /** * 判断obj是否为一个null、undefind、''的空对象 * 而不是以!obj形式判断,以增加安全性。 * * @param {Object} obj 接受判断的对象 */ function isNone(obj) { if (obj === null || obj === undefined || obj === '') return true; return false; } /** * 判断arr是否为null或undefind或空数组 * * @param {Object} arr 接受判断的数组 * @return {Boolean} true为空(null、undefind),反之为false */ function isEmptyArray(arr) { if (arr instanceof Array === false) return true; if (arr.length < 1) return true; return false; } /** * 将秒数转换为 "HH:MM:SS" 格式的字符串 * @param {number} totalSeconds - 总秒数 * @returns {string} - 格式化后的时间字符串 */ function formatTimeStr(totalSeconds) { if (typeof totalSeconds !== 'number' || isNaN(totalSeconds)) { throw new Error('请提供一个有效的数字'); } const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = Math.floor(totalSeconds % 60); const formattedHours = String(hours).padStart(2, '0'); const formattedMinutes = String(minutes).padStart(2, '0'); const formattedSeconds = String(seconds).padStart(2, '0'); return `${formattedMinutes}:${formattedSeconds}`; } module.exports = { /** * 深拷贝对象 * * @param {Object} source 拷贝的源对象 * @param {Object} desc 目标对象,为空时完全复制一个source对象 * @returns {Object} 新的对象 */ clone, /** * 格式化日期 * * @param {Object} date 要格式化的日期 * @param {String} format 格式化字符串,yyyy|MM|dd|HH|ss|mm * * @returns {String} 格式化后的字符串 */ formatDate, /** * 获取当前时间戳 * * @returns {Number} 当前时间戳 * */ timestamp() { let stamp = (new Date()).getTime() / 1000; stamp = parseInt(stamp); return stamp; }, /** * 安全方式调用fn * * @param {Function} fn 要调用的方法 * @returns 如果fn存在则返回其引用,否则返回一个空函数 */ invoke, /** * 生成一个GUID */ guid, /** * 判断obj是否为一个null、undefind、''的空对象 * 而不是以!obj形式判断,以增加安全性。 * * @param {Object} obj 接受判断的对象 */ isNone, /** * 判断arr是否为null或undefind或空数组 * * @param {Object} arr 接受判断的数组 * @return {Boolean} true为空(null、undefind),反之为false */ isEmptyArray, formatTimeStr, refreshToken, getWeekdayWithValidation };