diff options
Diffstat (limited to 'web/assets/js/util/utils.js')
| -rw-r--r-- | web/assets/js/util/utils.js | 291 |
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; + } + +} |
