/** * @param {string} path * @returns {Boolean} */ export function isExternal(path: string): boolean { return /^(https?:|mailto:|tel:)/.test(path); } /** * @param {string} str * @returns {Boolean} */ export function validUsername(str: string): boolean { const valid_map = ["admin", "editor"]; return valid_map.indexOf(str.trim()) >= 0; } /** * @param {string} url * @returns {Boolean} */ export function validURL(url: string): boolean { const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; return reg.test(url); } /** * @param {string} str * @returns {Boolean} */ export function validLowerCase(str: string): boolean { const reg = /^[a-z]+$/; return reg.test(str); } /** * @param {string} str * @returns {Boolean} */ export function validUpperCase(str: string): boolean { const reg = /^[A-Z]+$/; return reg.test(str); } /** * @param {string} str * @returns {Boolean} */ export function validAlphabets(str: string): boolean { const reg = /^[A-Za-z]+$/; return reg.test(str); } /** * @param {string} email * @returns {Boolean} */ // export function validEmail(email: string): boolean { // const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ // return reg.test(email) // } /** * @param {string} str * @returns {Boolean} */ export function isString(str: any): boolean { return typeof str === "string" || str instanceof String; } /** * @param {Array} arg * @returns {Boolean} */ export function isArray(arg: string) { if (typeof Array.isArray === "undefined") { return Object.prototype.toString.call(arg) === "[object Array]"; } return Array.isArray(arg); } /** * 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 // https://stackoverflow.com/questions/4310953/invalid-date-in-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]; // Note: getDay() returns 0 on Sunday if (key === "a") { return ["日", "一", "二", "三", "四", "五", "六"][value]; } return value.toString().padStart(2, "0"); }); return time_str; } export function translateDataToTreeAll(arr, parentKey, key) { const map = {}; const result = []; arr.forEach((element) => { const id = element[key]; const pid = element[parentKey]; if (map[id]) { map[id] = { ...element, children: map[id].children, }; } else { map[id] = { ...element, children: [], }; } const item = map[id]; if (pid <= 0) { result.push(item); } else { if (map[pid]) { map[pid].children.push(item); } else { map[pid] = { children: [item], }; } } }); return result; }