Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/assets/js/util/utils.js')
-rw-r--r--web/assets/js/util/utils.js291
1 files changed, 291 insertions, 0 deletions
diff --git a/web/assets/js/util/utils.js b/web/assets/js/util/utils.js
new file mode 100644
index 00000000..6b4e5ed9
--- /dev/null
+++ b/web/assets/js/util/utils.js
@@ -0,0 +1,291 @@
+class HttpUtil {
+ static _handleMsg(msg) {
+ if (!(msg instanceof Msg)) {
+ return;
+ }
+ if (msg.msg === "") {
+ return;
+ }
+ if (msg.success) {
+ Vue.prototype.$message.success(msg.msg);
+ } else {
+ Vue.prototype.$message.error(msg.msg);
+ }
+ }
+
+ static _respToMsg(resp) {
+ const data = resp.data;
+ if (data == null) {
+ return new Msg(true);
+ } else if (typeof data === 'object') {
+ if (data.hasOwnProperty('success')) {
+ return new Msg(data.success, data.msg, data.obj);
+ } else {
+ return data;
+ }
+ } else {
+ return new Msg(false, 'unknown data:', data);
+ }
+ }
+
+ static async get(url, data, options) {
+ let msg;
+ try {
+ const resp = await axios.get(url, data, options);
+ msg = this._respToMsg(resp);
+ } catch (e) {
+ msg = new Msg(false, e.toString());
+ }
+ this._handleMsg(msg);
+ return msg;
+ }
+
+ static async post(url, data, options) {
+ let msg;
+ try {
+ const resp = await axios.post(url, data, options);
+ msg = this._respToMsg(resp);
+ } catch (e) {
+ msg = new Msg(false, e.toString());
+ }
+ this._handleMsg(msg);
+ return msg;
+ }
+
+ static async postWithModal(url, data, modal) {
+ if (modal) {
+ modal.loading(true);
+ }
+ const msg = await this.post(url, data);
+ if (modal) {
+ modal.loading(false);
+ if (msg instanceof Msg && msg.success) {
+ modal.close();
+ }
+ }
+ return msg;
+ }
+}
+
+class PromiseUtil {
+
+ static async sleep(timeout) {
+ await new Promise(resolve => {
+ setTimeout(resolve, timeout)
+ });
+ }
+
+}
+
+const seq = [
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't',
+ 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+ 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z'
+];
+
+class RandomUtil {
+
+ static randomIntRange(min, max) {
+ return parseInt(Math.random() * (max - min) + min, 10);
+ }
+
+ static randomInt(n) {
+ return this.randomIntRange(0, n);
+ }
+
+ static randomSeq(count) {
+ let str = '';
+ for (let i = 0; i < count; ++i) {
+ str += seq[this.randomInt(62)];
+ }
+ return str;
+ }
+
+ static randomLowerAndNum(count) {
+ let str = '';
+ for (let i = 0; i < count; ++i) {
+ str += seq[this.randomInt(36)];
+ }
+ return str;
+ }
+
+ static randomMTSecret() {
+ let str = '';
+ for (let i = 0; i < 32; ++i) {
+ let index = this.randomInt(16);
+ if (index <= 9) {
+ str += index;
+ } else {
+ str += seq[index - 10];
+ }
+ }
+ return str;
+ }
+
+ static randomUUID() {
+ let d = new Date().getTime();
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ let r = (d + Math.random() * 16) % 16 | 0;
+ d = Math.floor(d / 16);
+ return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);
+ });
+ }
+}
+
+class ObjectUtil {
+
+ static getPropIgnoreCase(obj, prop) {
+ for (const name in obj) {
+ if (!obj.hasOwnProperty(name)) {
+ continue;
+ }
+ if (name.toLowerCase() === prop.toLowerCase()) {
+ return obj[name];
+ }
+ }
+ return undefined;
+ }
+
+ static deepSearch(obj, key) {
+ if (obj instanceof Array) {
+ for (let i = 0; i < obj.length; ++i) {
+ if (this.deepSearch(obj[i], key)) {
+ return true;
+ }
+ }
+ } else if (obj instanceof Object) {
+ for (let name in obj) {
+ if (!obj.hasOwnProperty(name)) {
+ continue;
+ }
+ if (this.deepSearch(obj[name], key)) {
+ return true;
+ }
+ }
+ } else {
+ return obj.toString().indexOf(key) >= 0;
+ }
+ return false;
+ }
+
+ static isEmpty(obj) {
+ return obj === null || obj === undefined || obj === '';
+ }
+
+ static isArrEmpty(arr) {
+ return !this.isEmpty(arr) && arr.length === 0;
+ }
+
+ static copyArr(dest, src) {
+ dest.splice(0);
+ for (const item of src) {
+ dest.push(item);
+ }
+ }
+
+ static clone(obj) {
+ let newObj;
+ if (obj instanceof Array) {
+ newObj = [];
+ this.copyArr(newObj, obj);
+ } else if (obj instanceof Object) {
+ newObj = {};
+ for (const key of Object.keys(obj)) {
+ newObj[key] = obj[key];
+ }
+ } else {
+ newObj = obj;
+ }
+ return newObj;
+ }
+
+ static deepClone(obj) {
+ let newObj;
+ if (obj instanceof Array) {
+ newObj = [];
+ for (const item of obj) {
+ newObj.push(this.deepClone(item));
+ }
+ } else if (obj instanceof Object) {
+ newObj = {};
+ for (const key of Object.keys(obj)) {
+ newObj[key] = this.deepClone(obj[key]);
+ }
+ } else {
+ newObj = obj;
+ }
+ return newObj;
+ }
+
+ static cloneProps(dest, src, ...ignoreProps) {
+ if (dest == null || src == null) {
+ return;
+ }
+ const ignoreEmpty = this.isArrEmpty(ignoreProps);
+ for (const key of Object.keys(src)) {
+ if (!src.hasOwnProperty(key)) {
+ continue;
+ } else if (!dest.hasOwnProperty(key)) {
+ continue;
+ } else if (src[key] === undefined) {
+ continue;
+ }
+ if (ignoreEmpty) {
+ dest[key] = src[key];
+ } else {
+ let ignore = false;
+ for (let i = 0; i < ignoreProps.length; ++i) {
+ if (key === ignoreProps[i]) {
+ ignore = true;
+ break;
+ }
+ }
+ if (!ignore) {
+ dest[key] = src[key];
+ }
+ }
+ }
+ }
+
+ static delProps(obj, ...props) {
+ for (const prop of props) {
+ if (prop in obj) {
+ delete obj[prop];
+ }
+ }
+ }
+
+ static execute(func, ...args) {
+ if (!this.isEmpty(func) && typeof func === 'function') {
+ func(...args);
+ }
+ }
+
+ static orDefault(obj, defaultValue) {
+ if (obj == null) {
+ return defaultValue;
+ }
+ return obj;
+ }
+
+ static equals(a, b) {
+ for (const key in a) {
+ if (!a.hasOwnProperty(key)) {
+ continue;
+ }
+ if (!b.hasOwnProperty(key)) {
+ return false;
+ } else if (a[key] !== b[key]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+}