const projectBaseURL = "https://project.gter.net" if (["localhost", "127.0.0.1"].includes(location.hostname)) { axios.defaults.headers = { "Authorization": "97d1c7b2fe6dec05aaf52c0f3b9130e8", } } function $ajax(url) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {} url = url.indexOf("https://") > -1 ? url : projectBaseURL + url if (["localhost", "127.0.0.1"].includes(location.hostname)) data["authorization"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8" 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"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8" url = url.indexOf("https://") > -1 ? url : projectBaseURL + url url += objectToQueryString(data) return new Promise(function (resolve, reject) { axios .get( url, {}, { 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(error => { if (error.response?.status == 401) openShowWindow() reject(error) }) }) } 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 = "" 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 { const storedData = localStorage.getItem("basicData") const basicData = JSON.parse(storedData) if (!key) key = basicData.encodekey 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) } $ajaxget("/api/home/basicData").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 }) }