diff --git a/js/commonV2.js b/js/commonV2.js new file mode 100644 index 0000000..17706d0 --- /dev/null +++ b/js/commonV2.js @@ -0,0 +1,212 @@ +const projectBaseURL = "https://program.gter.net"; +const projectBaseURL2 = "https://api.gter.net"; + +if (["localhost", "127.0.0.1"].includes(location.hostname)) { + axios.defaults.headers = { + Authorization: "3338bf6a2e53dda872da3664a2560b25", + }; +} + +function $ajax(url) { + var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + url = url.indexOf("https://") == -1 ? projectBaseURL2 + url : url; + + if (["localhost", "127.0.0.1"].includes(location.hostname)) data["authorization"] = "3338bf6a2e53dda872da3664a2560b25"; + + return new Promise(function (resolve, reject) { + axios + .post(url, data, { + emulateJSON: true, + withCredentials: true, + }) + .then(function (res) { + var data = typeof res.data == "string" ? JSON.parse(res.data) : res.data; + if (data.code == 401) { + openShowWindow(); + reject(); + } + if (data.code == 201) creationAlertBox("error", data.message || data.msg); + resolve(data); + }) + .catch((err) => { + if (err.response?.status == 401) openShowWindow(); + }); + }); +} + +function $ajaxget(url, data) { + if (!data) data = {}; + + // data["authorization"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8" + if (["localhost", "127.0.0.1"].includes(location.hostname)) data["authorization"] = "3338bf6a2e53dda872da3664a2560b25"; + + url = url.indexOf("https://") == -1 ? projectBaseURL2 + url : url; + + url += objectToQueryString(data); + return new Promise((resolve, reject) => { + axios + .get(url, { + emulateJSON: true, + withCredentials: true, + }) + .then((res) => { + var data = typeof res.data == "string" ? JSON.parse(res.data) : res.data; + + if (data.code == 401) { + openShowWindow(); + reject(); + } + if (data.code == 201) creationAlertBox("error", data.message || data.msg); + + resolve(data); + }) + .catch((error) => { + // console.log("resolve", resolve) + + // if (error.response?.status == 401) openShowWindow() + resolve(""); + }); + }); +} + +function randomString(n) { + let str = "abcdefghijklmnopqrstuvwxyz9876543210"; + let tmp = "", + i = 0, + l = str.length; + for (i = 0; i < n; i++) { + tmp += str.charAt(Math.floor(Math.random() * l)); + } + return tmp; +} + +function formatNumberWithSpaces(number) { + // if (typeof number != "string") number = ""; + if (Number(number) != number) return; + // number += ""; + return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +// 将一个JavaScript对象转换为路由参数的形式将键值对转换为key=value的形式 +function objectToQueryString(obj = {}) { + const queryString = Object.keys(obj) + .map((key) => encodeURIComponent(key) + "=" + encodeURIComponent(obj[key])) + .join("&"); + return queryString ? "?" + queryString : ""; +} + +function decodeKey(encrypted, key) { + return new Promise((resolve, reject) => { + try { + if (typeof encrypted != "string") resolve(encrypted); + + const encryptedData = CryptoJS.enc.Base64.parse(encrypted); + + const decrypted = CryptoJS.AES.decrypt( + { + ciphertext: encryptedData, + }, + CryptoJS.enc.Utf8.parse(key), + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ); + + const text = JSON.parse(decrypted.toString(CryptoJS.enc.Utf8)); + resolve(text); + } catch (error) { + reject(); + } + }); +} + +function getBaseData() { + return new Promise((resolve, reject) => { + // const storedTime = localStorage.getItem("dataTimestamp") + // const storedData = localStorage.getItem("basicData") + // const currentTime = new Date().getTime() + // const timeDiff = currentTime - parseInt(storedTime) + // if (storedTime && storedData && timeDiff <= 5 * 60 * 1000) { + // // 在5分钟内,使用本地存储的数据 + // const basicData = JSON.parse(storedData) + // // 处理数据 + // resolve(basicData) + // return + // } + // https://api.gter.net/v1/program/details program/basicData + location.host.indexOf("demo.gter.net") > -1; + let url = location.host.indexOf("demo.gter.net") == -1 ? "/api/home/basicData" : "/v1/program/basicData"; + $ajaxget(url).then((res) => { + if (res.code != 200) return; + const data = res.data; + const user = data.user; + const basicData = { + contrastcount: data.contrastcount || 0, + university: data.university, + discipline: data.discipline, + rankings: data.rankings, + encodekey: data.encodekey, + user, + }; + // if (user.uin > 0) { + // localStorage.setItem("dataTimestamp", new Date().getTime()) + // localStorage.setItem("basicData", JSON.stringify(basicData)) + // } else { + // localStorage.removeItem("basicData") + // localStorage.removeItem("dataTimestamp") + // } + resolve(basicData); + }); + }); +} + +function openShowWindow() { + showWindow("login", "https://passport.gter.net/login/ajax", "get", -1, { cover: true }); +} + +function strtimeago(dateStr) { + dateStr = dateStr + ""; // 反之传入的不是字符串 + dateStr = dateStr.replaceAll("-", "/"); // 修改格式 + var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示 + var hour = minute * 60; + var day = hour * 24; + var now = new Date().getTime(); //获取当前时间毫秒 + let objectTime = new Date(dateStr).getTime(); + var diffValue = now - objectTime; //时间差 + if (diffValue < 0) return "刚刚"; + + var minC = diffValue / minute; //计算时间差的分,时,天,周,月 + var hourC = diffValue / hour; + var dayC = diffValue / day; + + const diffInMilliseconds = now - objectTime; + const diffInYears = diffInMilliseconds / (1000 * 60 * 60 * 24 * 365); + const diffInMonths = diffInYears * 12; + + let result = ""; + if (dayC >= 7) { + var datetime = new Date(dateStr); + var Nyear = datetime.getFullYear(); + var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1; + var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate(); + var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours(); + var Nmin = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes(); + + if (diffInYears >= 1) result = Math.floor(diffInYears) + "年前"; + else if (diffInMonths >= 1) result = Math.floor(diffInMonths) + "个月前"; + } else if (dayC >= 1) result = parseInt(dayC) + "天前"; + else if (hourC >= 1 && hourC <= 24) result = parseInt(hourC) + "小时前"; + else if (minC >= 1 && minC <= 60) result = parseInt(minC) + "分钟前"; + else result = "刚刚"; + + return result; +} + +const rankingKey = { + "Shanghai Ranking": "软科", + "Times Higher Education": "泰晤士", + times: "泰晤士", + USNEWS: "U.S. News", + "US News": "U.S. News", +};