import Taro from '@tarojs/taro'; export const isDev = () => process.env.NODE_ENV === 'development'; // export const isDev = () => true; export const isIPhone = (() => { const info = Taro.getDeviceInfo(); return info.platform === 'ios'; })(); export const isDesktop = (() => { const info = Taro.getDeviceInfo(); return info.platform === 'windows' || info.platform === 'mac'; })(); export const logWithPrefix = isDev() ? (prefix: string) => (...args: BL.Anything[]) => console.log(`[${prefix}]`, ...args) : (_prefix: string) => (..._args: BL.Anything[]) => {}; export const safeJsonParse = (str: string, defaultValue: BL.Anything = {}): T => { try { return JSON.parse(str); } catch (e) { return defaultValue; } }; export const string2Number = (str: string, defaultValue: number = 0) => { if (!str) { return defaultValue; } const num = Number(str); return Number.isNaN(num) ? defaultValue : num; }; export const isUndefined = (v: BL.Anything) => typeof v === 'undefined'; export const sleep = (timeout: number = 3) => new Promise(resolve => setTimeout(resolve, timeout * 1000)); export const last = (list: T[]) => list[list.length - 1]; export function oncePromise( func: AsyncFunction ): AsyncFunction { let task: Promise | null = null; return async (...args: T): Promise => { if (task) { console.log('[once promise]: has task pending'); return task; } try { task = func(...args); const result = await task; return result; } catch (e) { throw e; } finally { task = null; } }; } export const copy = (content: string): Promise => { return new Promise((resolve, reject) => { Taro.setClipboardData({ data: content, success: resolve, fail: reject, }); }); }; export const openCustomerServiceChat = (url: string = 'https://work.weixin.qq.com/kfid/kfc291d0b01ecda3088') => { Taro.openCustomerServiceChat({ extInfo: { url }, corpId: 'ww4f2f2888bf9a4f95', }); }; export const isValidIdCard = (idCard: string) => /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(idCard); export const isValidPhone = (phone: string) => /^1[3-9]\d{9}$/.test(phone); export const getScrollItemId = (id?: string) => (id ? `sid-${id}` : id);