xg-project-library/js/common.js
2024-11-11 18:41:26 +08:00

145 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const projectBaseURL = "https://offer.gter.net"
if (["localhost", "127.0.0.1"].includes(location.hostname)) {
axios.defaults.headers = {
"Authorization": "6f167d28205b143c880382cd8408ea93",
}
}
function $ajax(url) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}
url = url.indexOf("https://") > -1 ? url : projectBaseURL + url
data["authorization"] = "6f167d28205b143c880382cd8408ea93"
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) reject()
if (data.code == 201) creationAlertBox("error", res.message || res.msg)
resolve(data)
})
.catch(err => {
if (err.response.status == 401)
showWindow("login", "https://passport.gter.net/login/ajax", "get", -1, {
cover: true,
})
})
})
}
function $ajaxget(url, data) {
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) reject()
if (data.code == 201) creationAlertBox("error", res.message)
resolve(data)
})
.catch(error => {
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
console.log("encodekey", key)
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/project.home/basicData").then(res => {
if (res.code != 200) return
const data = res.data
const basicData = {
contrastcount: data.contrastcount || 0,
university: data.university,
discipline: data.discipline,
rankings: data.rankings,
encodekey: data.encodekey,
}
// 更新本地存储的时间戳和数据
localStorage.setItem("dataTimestamp", new Date().getTime())
localStorage.setItem("basicData", JSON.stringify(basicData))
resolve(basicData)
})
})
}