UNPKG

@likg/tools

Version:
3 lines (2 loc) 12 kB
/* eslint-disable */ class e{static instance;constructor(){}static defaultUtils(){return this.instance||(this.instance=new e),this.instance}static query(e,t){let n="";if(n=t?/^http/.test(t)?t.split("?")[1]:t:window.location.search,n){n=/\?/.test(n)?n.slice(1):n;const t={};return n.split("&").forEach((e=>{if(/=/.test(e)){const n=e.split("="),a=n[0],o=n[1];t[a]=o?decodeURIComponent(o):void 0}})),e&&e?t[e]?t[e]:"":t}return e?"":{}}static convertToQueryWith(t,n=!0){if(!t||"object"!==e.toRawType(t))return"";let a=n?"?":"";return Object.keys(t).forEach((e=>{const n=t[e];a+=`${e}=${void 0!==n?encodeURIComponent(n):""}&`})),a?a.slice(0,a.length-1):a}static convertToFormDataWith(e){const t=new FormData;for(const n of Object.keys(e))t.append(n,e[n]);return t}static dateFormat(e,t="YYYY-MM-DD HH:mm:ss"){const n=e=>e.toString().padStart(2,"0");"string"==typeof e&&/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(e)&&(e=e.replace(/-/g,"/"));const a=new Date(e);if(isNaN(a.getTime()))return"-";const o=a.getFullYear().toString(),r=n(a.getMonth()+1),s=n(a.getDate()),i=n(a.getHours()),c=n(a.getMinutes()),l=n(a.getSeconds()),d=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"][a.getDay()];return t.replace(/YYYY/gi,o).replace(/MM/,r).replace(/DD/,s).replace(/HH/,i).replace(/mm/,c).replace(/ss/,l).replace(/dddd/,d)}static del(e,t,n){const a=[...e],o=a.findIndex((e=>e[t]===n));return a.splice(o,1),a}static unique(e,t){const n={};return e.reduce(((e,a)=>{const o=a[t]+"";return!n[o]&&(n[o]=e.push(a)),e}),[])}static phoneFormatter(e,t="$1 **** $2"){return e&&"string"==typeof e&&11===e.length?e.replace(/(\d{3})(\d{4})(\d{4})/,((e,n,a,o)=>t.replace("$1",n).replace("$2",a).replace("$3",o))):""}static px2vw(e){return e/375*100+"vw"}static clipboard(e){return new Promise(((t,n)=>{const a=document.createElement("input");a.setAttribute("value",e),document.body.appendChild(a),a.select();const o=document.execCommand("copy");document.body.removeChild(a),o?t(null):n()}))}static timeDown(e){const{timeStamp:t,format:n,mode:a="default",type:o="default",showDay:r=!0,pending:s,complete:i}=e;let c=t;const l="default"===o?1e3:100;let d,p=performance.now();const u=e=>"seconds"===a?String(e):String(e).padStart(2,"0"),m=()=>{const e=r?u(Math.floor(c/1e3/60/60/24)):"",t=u(r?Math.floor(c/1e3/60/60%24):Math.floor(c/1e3/60/60)),a=u(Math.floor(c/1e3/60%60)),i=u(Math.floor(c/1e3%60)),l=u(Math.floor(c%1e3/100));let d="";n?d=n.replace(/dd/gi,e).replace(/hh/gi,t).replace(/mm/gi,a).replace(/ss/gi,i).replace(/ms/gi,l):("default"===o&&(d=[e,t,a,i]),"ms"===o&&(d=[e,t,a,i,l])),s(d)},f=()=>{const e=u(Math.floor(c/1e3)),t=u(Math.floor(c%1e3/100));let a="";n?a=n.replace(/ss/gi,e).replace(/ms/gi,t):("default"===o&&(a=[e]),"ms"===o&&(a=[e,t])),s(a)},g=()=>{const e=performance.now();e-p>=l&&(c-=l,p=e,c>0&&("default"===a&&m(),"seconds"===a&&f())),c>0?d=requestAnimationFrame(g):i()};return c<=0?i():("default"===a&&m(),"seconds"===a&&f(),d=requestAnimationFrame(g)),()=>{d&&cancelAnimationFrame(d)}}static toRawType(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}static track(e){if(window._hmt)switch(e.type){case"pv":window._hmt.push(["_trackPageview",e.pageURL||location.pathname]);break;case"es":window._hmt.push(["_trackEvent",e.category,e.action||"click",e.opt_label,e.opt_value])}}static randomCharacters(e,t){let n="";switch(t=t||"default"){case"digital":n+="0123456789";break;case"uppercase":n+="ABCDEFGHIJKLMNOPQRSTUVWXYZ";break;case"lowercase":n+="abcdefghijklmnopqrstuvwxyz";break;default:n+="0123456789",n+="ABCDEFGHIJKLMNOPQRSTUVWXYZ",n+="abcdefghijklmnopqrstuvwxyz"}let a="";for(let t=0;t<e;++t){const e=Math.floor(Math.random()*n.length);a+=n.slice(e,e+1)}return a}static randomDecimals(e,t){return void 0===e||void 0===t||isNaN(e)||isNaN(t)?-1:Math.random()*(t-e)+e}static randomInteger(e,t){return void 0===e||void 0===t||isNaN(e)||isNaN(t)?-1:Math.floor(Math.random()*(t-e+1))+e}static launchFullscreen(){const e=document.documentElement,t=e.requestFullScreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen;void 0!==t&&t&&t.call(e)}static exitFullscreen(){if(document.fullscreenElement){const e=document,t=e.exitFullscreen||e.mozCancelFullScreen||e.webkitCancelFullScreen||e.msExitFullscreen;void 0!==t&&t&&t.call(e)}}static getYears(e=1970,t=(new Date).getFullYear()){const n=[];for(let a=e;a<=t;a++)n.push(`${a.toString()}年`);return n}static getMonths(){const e=[];for(let t=1;t<=12;t++)e.push((t<10?`0${t}`:t.toString())+"月");return e}static getDays(e){const t=[];let n=31;if(e){const{year:t,month:a}=e;-1!==[4,6,9,11].indexOf(a)?n=30:2===a&&(n=t%4==0&&t%100!=0||t%400==0?29:28)}for(let e=1;e<=n;e++)t.push((e<10?`0${e}`:e.toString())+"日");return t}static async downloadFiles(e,t="blob"){if(!e||0===e.length)throw new Error("[downloadFiles]:未传入下载源");const n=(e,n)=>{const a=document.createElement("a");a.style.display="none",a.href=e,a.download=n,document.body.appendChild(a),a.click(),document.body.removeChild(a),"blob"===t&&setTimeout((()=>URL.revokeObjectURL(e)),1e3)},a={"application/pdf":".pdf","application/msword":".doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":".docx","application/vnd.ms-excel":".xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":".xlsx","application/vnd.ms-powerpoint":".ppt","application/vnd.openxmlformats-officedocument.presentationml.presentation":".pptx","text/plain":".txt","text/csv":".csv","application/json":".json","application/xml":".xml","application/zip":".zip","application/x-rar-compressed":".rar","application/x-tar":".tar","application/x-7z-compressed":".7z","image/jpeg":".jpg","image/png":".png","image/gif":".gif","image/svg+xml":".svg","image/webp":".webp","image/bmp":".bmp","image/tiff":".tiff","audio/mpeg":".mp3","audio/wav":".wav","audio/ogg":".ogg","audio/aac":".aac","audio/webm":".webm","video/mp4":".mp4","video/mpeg":".mpeg","video/ogg":".ogv","video/webm":".webm","video/x-msvideo":".avi","video/quicktime":".mov","video/x-matroska":".mkv","application/octet-stream":".bin","application/x-binary":".bin","application/x-download":".bin"},o=(e,t)=>{let n=t??"file",o=".bin";if("string"==typeof e){const a=new URL(e).pathname;if(!t){const e=a.lastIndexOf("/")+1,t=-1!==a.lastIndexOf(".")?a.lastIndexOf("."):a.length;n=a.slice(e,t)}const r=a.lastIndexOf(".");-1!==r&&r<a.length-1&&(o=a.slice(r))}else r=e.type,o=a[r]||".bin";var r;return n.endsWith(o)?n:n+o},r=e.map((e=>{const{source:a,filename:r}=e,s=o(a,r);return"string"==typeof a?"blob"===t?(async(e,t)=>{try{const a=await fetch(e,{mode:"cors"});if(!a.ok)throw new Error(`[downloadFiles]:下载失败,HTTP ${a.status} ${a.statusText}`);const o=await a.blob();n(URL.createObjectURL(o),t)}catch(e){throw new Error(`[downloadFiles]:下载失败,${e.message}`)}})(a,s):(n(a,s),Promise.resolve()):(n(URL.createObjectURL(a),s),Promise.resolve())}));await Promise.allSettled(r).then((t=>{t.forEach(((t,n)=>{"rejected"===t.status&&console.warn(`[downloadFiles]:下载失败,${e[n].source}`,t.reason)}))}))}static numFormat(e){return e<10?`0${e}`:e.toString()}static getEnv(){const e=window.navigator.userAgent;return/MicroMessenger/i.test(e)?"weixin":/AlipayClient/i.test(e)?"alipay":/Linux|Android/i.test(e)?"android":/iPhone/i.test(e)?"ios":"unknown"}static getFilePath(t,n){const a=e=>e<10?`0${e}`:e,o=new Date,r=o.getFullYear(),s=o.getMonth()+1,i=o.getDate(),c=`${r}${a(s)}${a(i)}`,l=t.name.split(".").slice(-1).toString();return`${n}/${c}/${e.randomCharacters(3,"uppercase")}${o.getTime()}.${l}`}static base64ToUint8Array(e){const t=e.includes(",")?e.split(",")[1]:e,n=(t+"=".repeat((4-t.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/");try{const e=window.atob(n),t=new Uint8Array(e.length);for(let n=0;n<e.length;++n)t[n]=e.charCodeAt(n);return t}catch(e){throw console.error("Failed to decode Base64 string:",e),new Error("Invalid Base64 string")}}static base64(e){return new Promise(((t,n)=>{const a=new FileReader,o=e=>{a.readAsDataURL(e),a.onload=()=>{t(a.result)},a.onerror=()=>{n(new Error("读取文件或Blob对象失败"))}};if(e instanceof File||e instanceof Blob)o(e);else if("string"==typeof e&&/http/.test(e)){const t=new XMLHttpRequest;t.open("GET",e,!0),t.responseType="blob",t.onload=function(){200===this.status?o(this.response):n(new Error("请求图片失败,状态码: "+this.status))},t.onerror=()=>{n(new Error("请求图片失败"))},t.send()}else n(new Error("文件格式有误或目标类型不支持"))}))}static loadScript(e,t="text/javascript"){const n=e=>new Promise((n=>{const a=document.createElement("script");a.type=t,a.src=e,a.onload=()=>n(!0),a.onerror=()=>n(!1),document.body.appendChild(a)}));return new Promise((async t=>{if(!e||Array.isArray(e)&&0===e.length)return console.log("@likg/tools: loading script error. [no params]"),t(!1);const a=Array.isArray(e)?e:[e];for(let e=0;e<a.length;e++){if(!await n(a[e]))return console.log(`🔴 脚本「${e}」加载失败,地址:${a[e]}`),t(!1);console.log(`🟢 脚本「${e}」加载成功,地址:${a[e]}`)}t(!0)}))}static deepClone(t){const n=Array.isArray(t)?[]:{};if(t&&"object"==typeof t)for(const a in t)Object.prototype.hasOwnProperty.call(t,a)&&(!t[a]||"object"!=typeof t[a]||t[a]instanceof HTMLElement?n[a]=t[a]:n[a]=e.deepClone(t[a]));return n}static update(e,t,n){if(/\./.test(t)){let a=e,o=0;const r=t.split(".");for(;o<r.length-1;){const e=r[o++];e in a||(a[e]={}),a=a[e]}a[r[r.length-1]]=n}else e[t]=n;return e}static deepUpdate(t,n,a){const o=e.deepClone(t);return e.update(o,n,a)}static getLastDay(){return new Date((new Date).getTime()-864e5)}static getLastMonth(){const e=new Date;let t=e.getFullYear(),n=e.getMonth();return 0===n&&(t-=1,n=12),new Date(`${t}-${n}`)}static debounce(e,t=500){let n=null;return(...a)=>{n&&clearTimeout(n),n=setTimeout((()=>{e.apply(this,a)}),t)}}static getConstellation(t,n){if(!t)return"";let a,o;if("date"===e.toRawType(t))a=t.getMonth()+1,o=t.getDate();else{if("number"!=typeof t||"number"!=typeof n)return"";if(t<1||t>12||n<1||n>31)return"";a=t,o=n}let r="";switch(a){case 1:r=o>19?"水瓶座":"摩羯座";break;case 2:r=o>18?"双鱼座":"水瓶座";break;case 3:r=o>20?"白羊座":"双鱼座";break;case 4:r=o>19?"金牛座":"白羊座";break;case 5:r=o>20?"双子座":"金牛座";break;case 6:r=o>21?"巨蟹座":"双子座";break;case 7:r=o>22?"狮子座":"巨蟹座";break;case 8:r=o>22?"处女座":"狮子座";break;case 9:r=o>22?"天秤座":"处女座";break;case 10:r=o>23?"天蝎座":"天秤座";break;case 11:r=o>22?"射手座":"天蝎座";break;case 12:r=o>21?"摩羯座":"射手座"}return r}static canvasFillText(e,t,n,a,o,r,s=5){if(!e||"string"!=typeof t||"number"!=typeof n||"number"!=typeof a||"number"!=typeof o||"number"!=typeof r)return 0;e.textBaseline="top";const i=e.canvas,c=void 0===r?i&&i.width||200:r;let l=0,d=1,p=0;const u=t.split("");for(let r=0;r<u.length;r++){if(l+=e.measureText(u[r]).width,l>c){d++;let i=t.slice(p,r);if(d>s&&t.length>r&&(i=t.substring(p,r-2)+" ..."),e.fillText(i,n,a),l=0,a+=o,p=r,d>s)break}r===t.length-1&&(e.fillText(t.slice(p,r+1),n,a),d++)}return(d-1)*o}static ellipsis(e,t=6,n="middle"){if("string"!=typeof e||!e||e&&e.length<=t)return e;e.length<2*t&&(t=Math.ceil(e.length/2));const a=e.slice(0,t),o=e.slice(-t);switch(n){case"head":return`··· ${o}`;case"middle":return`${a} ··· ${o}`;case"tail":return`${a} ···`;default:return e}}static analysisDateString(e){if("string"!=typeof e)return{start:void 0,end:void 0};const[t,n]=e.split("-");if(isNaN(Number(t))||isNaN(Number(n)))return{start:void 0,end:void 0};let a=!1;(+t%4==0&&+t%100!=0||+t%400==0)&&(a=!0);const o=[31,a?29:28,31,30,31,30,31,31,30,31,30,31][+n-1];return{start:`${e}-01 00:00:00`,end:`${e}-${o<10?"0"+o:o} 23:59:59`}}static shuffleArray(e){const t=[...e];for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}static sleep(e=500){return new Promise((t=>setTimeout(t,e)))}}export{e as default};