import JsonRpcClient from '../plugins/jsonrpc/jquery.jsonrpc.js'; import axios from '../plugins/axios/axios.esm.js'; import Lobibox from '../plugins/notifications/js/lobibox.min.js' import JqueryConfirm from '../plugins/confirm/js/jquery-confirm.esm.js' export const getUrlParam = (key) => { let param = ""; let query = window.location.search.substring(1); let vars = query.split("&"); for (let i=0;i { if(param) { func("/conf/updateLangConf", param).then(result => { if(result.status === "success") { const html = document.querySelector('html'); html.setAttribute('data-bs-language', param); } }) } } //size mini normal large export const alertMsg = (message, type = "success",delay = 5000,size = "mini") => { let icon = "fa-solid fa-circle-check"; if(type === "error") icon = "fa-solid fa-circle-xmark"; if(type === "info") icon = "fa-solid fa-circle-info "; if(type === "warning") icon = "fa-solid fa-triangle-exclamation"; return Lobibox.notify(type, { pauseDelayOnHover: true, continueDelayOnInactiveTab: false, size: size, sound: false, position: 'top right', icon: icon, msg: message, delay: delay, }); } export const confirm = (options) => { const jc = new JqueryConfirm(); return jc.confirm(options); } export const request = (url) => { const xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.send(); if (xhr.status === 200) { return JSON.parse(xhr.responseText); } else { throw new Error(xhr.statusText); } } export const queryData = (url,options= {}) => { return new Promise((resolve,reject)=>{ axios.get(url,options) .then(response => { resolve(response.data); }) .catch(error => { console.error('请求出错:', error); reject(error); }); }) } export const func = (url,data = []) => { return new Promise((resolve,reject)=>{ axios.post('/link/relay.php', {url:url,data:data}) .then(response => { resolve(response.data); }) .catch(error => { console.error('请求出错:', error); reject(error); }); }) } export const axios_post = (url,data = []) => { return new Promise((resolve,reject)=>{ axios.post(url, data) .then(response => { resolve(response.data); }) .catch(error => { console.error('请求出错:', error); reject(error); }); }) } //encoder export const rpc = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } //netManager export const rpc2 = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC2' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } //port export const rpc3 = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC3' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } //mqtt export const rpc4 = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC4' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } //onvif export const rpc5 = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC5' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } // monitor export const rpc6 = (func, params = []) => { return new Promise((resolve,reject)=>{ let jsonrpc = new JsonRpcClient({ ajaxUrl: '/RPC6' }); jsonrpc.call(func, params, data => { resolve(data); }, error =>{ console.log(error);reject(error); }); }) } export const checkFileExists = (url) => { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('HEAD', url); xhr.onload = () => { if (xhr.status === 200) { resolve(true); } else { resolve(false); } }; xhr.onerror = () => { reject(new Error('请求出错')); }; xhr.send(); }); } export const extend = (target, ...sources) => { if (!target) return {}; sources.forEach(source => { if (source) { Object.assign(target, source); } }); return target; } export const clearReactiveObject = (reactiveObj) => { const keys = Object.keys(reactiveObj); keys.forEach((key) => { delete reactiveObj[key]; }); }; export const clearReactiveArray = (reactiveArray) => { reactiveArray.splice(0); }; export const deepCopy = (obj) => JSON.parse(JSON.stringify(obj)); export const popover = (ele,param) => { if(ele === null || ele === undefined) return {}; if(param.content.includes("")) { const html = document.querySelector('html'); let lang = html.getAttribute('data-bs-language'); if(lang === null) lang = "cn"; const regex = new RegExp(`<${lang}>(.*?)<\/${lang}>`); param.content = param.content.match(regex)[1]; } return new bootstrap.Popover(ele, param) } export const formatDate = (fmt,date = new Date()) => { let o = { "M+": date.getMonth() + 1, "d+": date.getDate(), "h+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor( ( date.getMonth() + 3 ) / 3 ), "S": date.getMilliseconds() }; if ( /(y+)/.test( fmt ) ) fmt = fmt.replace( RegExp.$1, ( date.getFullYear() + "" ).substr( 4 - RegExp.$1.length ) ); for ( let k in o ) if ( new RegExp( "(" + k + ")" ).test( fmt ) ) fmt = fmt.replace( RegExp.$1, ( RegExp.$1.length == 1 ) ? ( o[ k ] ) : ( ( "00" + o[ k ] ).substr( ( "" + o[ k ] ).length ) ) ); return fmt; } export const deepEqualIgnoreProps = (obj1, obj2, ignoreProps) => { if (obj1 === obj2) { return true; } if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) { return false; } const keys1 = Object.keys(obj1).filter(key => !ignoreProps.includes(key)); const keys2 = Object.keys(obj2).filter(key => !ignoreProps.includes(key)); if (keys1.length !== keys2.length) { return false; } for (const key of keys1) { if (!keys2.includes(key) || !deepEqualIgnoreProps(obj1[key], obj2[key], ignoreProps)) { return false; } } return true; } export const rebootConfirm = (msg) => { confirm( { title: '重启Reboot', content: ''+msg+'Reboot immediately?', buttons: { ok: { text: "确认重启Confirm", btnClass: 'btn-primary', keys: [ 'enter' ], action: function () { func("/system/systemReboot"); } }, cancel: { text: "取消Cancel", action: function () { console.log( 'the user clicked cancel' ); } } } } ); } export const resetConfirm = () => { confirm( { title: '还原Reset', content: '是否还原全部设置?Reset all config to default and reboot immediately?', buttons: { ok: { text: "确认Confirm", btnClass: 'btn-primary', keys: [ 'enter' ], action: function () { func("/system/systemReset"); } }, cancel: { text: "取消Cancel", action: function () { console.log( 'the user clicked cancel' ); } } } } ); } export const splitArray = (array,count) => { return Array.from({ length: Math.ceil(array.length / count) }, (_, index) => array.slice(index * count, index * count + count) ); } export const isEmpty = str => { return (!str || str.trim() === ""); } export const swap = (array, index1, index2) => { const temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; console.log(array,index1,index2); } export const formatTime = (msec, format="hh:mm:ss") => { const seconds = Math.floor((msec / 1000) % 60); const minutes = Math.floor((msec / (1000 * 60)) % 60); const hours = Math.floor((msec / (1000 * 60 * 60)) % 24); const days = Math.floor(msec / (1000 * 60 * 60 * 24)); const formattedTime = format .replace('dd', String(days).padStart(2, '0')) .replace('hh', String(hours).padStart(2, '0')) .replace('mm', String(minutes).padStart(2, '0')) .replace('ss', String(seconds).padStart(2, '0')); return formattedTime; }