Files
PC-Light-Forum/js/signIn.js
DESKTOP-RQ919RC\Pc 15d1a40cc9 no message
2025-11-24 18:26:40 +08:00

257 lines
9.5 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 { createApp, ref, onMounted, nextTick, onUnmounted, computed, watch, provide } = Vue;
const appSectionIndex = createApp({
setup() {
onMounted(() => {
getFirstDay();
getList();
});
let dayOfWeek = ref(0); // 当月第一天是星期几
let totalDaysInMonth = ref(0); // 当月第一共今天
let currentDay = ref(0); // 今天几号
const getFirstDay = () => {
const firstDayOfMonth = new Date();
firstDayOfMonth.setDate(1);
// 获取当月第一天是星期几0 表示星期日1 表示星期一,依此类推)
dayOfWeek.value = firstDayOfMonth.getDay();
const currentDate = new Date();
const currentMonth = currentDate.getMonth() + 1;
const currentYear = currentDate.getFullYear();
currentDay.value = currentDate.getDate();
// 获取当前月份的总天数
totalDaysInMonth.value = new Date(currentYear, currentMonth, 0).getDate();
init();
};
let integral = ref(""); // 全部的寄托币
let tips = ref([]);
let issign = ref(0); // 是否签到了
let signList = ref([]); // 签到列表
let succeedState = ref(false); // 签到弹窗状态
let extra_reward = ref(0); // 额外奖励
let reward = ref(0); // 额外奖励
let token = ref(""); //
let signnum = ref(0); // 签到多少天
let signreward = ref(0); // 签到获得寄托币
// 初始化
const init = () => {
fetchGetData("https://api.gter.net/v2/api/forum/getSignInfo").then((res) => {
if (res.code != 200) return;
console.log("res", res);
const data = res.data;
const list = data.list || {};
getDateList(list);
if (data.issign == 1) localStorage.setItem("signInState", getCurrentDate()); // 存储签到时间
tips.value = data.tips || [];
integral.value = Number(data.integral) || 0;
token.value = data.token || "";
signnum.value = data.signnum || 0;
signreward.value = data.signreward || 0;
issign.value = data.issign;
});
};
let dateList = ref([]); // 签到列表
const getDateList = (list = {}) => {
let listT = [];
// type 0 还没有到来 1 已经过去没有签到 2 签到 3 今天 没有签到的
for (let i = 1; i < totalDaysInMonth.value + 1; i++) {
let type = 0;
let name = "";
let ii = i.toString().padStart(2, "0");
if (list[ii]) {
type = 2;
name = `+${list[ii]}`;
} else if (currentDay.value > i) type = 1;
else if (currentDay.value == i) type = 3;
if (!name) name = currentDay.value == i ? "今" : i;
listT.push({
type,
name,
});
}
dateList.value = listT;
};
const calendarClass = ref({
1: "formerly",
2: "already",
3: "today",
});
let loading = ref(false);
let list = ref([]);
let showList = ref([]); // 展示的 签到列表
let my = ref({}); // 我的签到信息
let todaycount = ref(0); // 签到总数
const getList = () => {
loading.value = true;
fetchGetData("https://api.gter.net/v2/api/forum/getSignRankList")
.then((res) => {
if (res.code != 200) return;
const data = res.data || {};
showList.value = data.list.slice(0, 10);
list.value = data.list;
my.value = data.my;
todaycount.value = data.todaycount;
})
.finally(() => {
loading.value = false;
});
};
let showPage = 1;
// 签到列表更多 切割列表的
const moreList = () => {
// 10 开始 间隔20
const arr = list.value.slice(showPage * 20 - 10, showPage * 20 + 10);
showList.value = showList.value.concat(arr);
showPage++;
};
let ruleState = ref(false); // 规则弹窗
// 切换规则弹窗
const cutRing = () => (ruleState.value = !ruleState.value);
const postSign = () => {
const user = window.userInfoWin;
// 没有绑定 寄托账号
if (!user || (user?.uin <= 0 && user?.uid <= 0)) {
console.log("user99999");
creationAlertBox("error", "没有绑定寄托账号");
showWindow("login", "https://passport.gter.net/login/ajax", "get", -1, { cover: true });
return;
}
fetchData("https://api.gter.net/v2/api/forum/sign").then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
const data = res.data;
data.extra_reward = data.extra_reward * 1;
data.reward = data.reward * 1;
const rewardT = data.extra_reward + data.reward || 0; // 一共加了多少寄托币
dateList.value[currentDay.value - 1]["type"] = 2;
dateList.value[currentDay.value - 1]["name"] = `+${rewardT}`;
issign.value = 1;
extra_reward.value = data.extra_reward || 0;
reward.value = data.reward || 0;
todaycount.value = todaycount.value + 1;
signnum.value = signnum.value + 1;
signreward.value = signreward.value + rewardT;
integral.value = integral.value + rewardT;
my.value = {
avatar: user.avatar || "",
username: user.nickname || "匿名用户",
uin: user.uin || 0,
uid: user.uid || 0,
rank: data.rank || 1,
reward: rewardT,
timestamp: getCurrentDateTime(),
};
cutSucceed();
localStorage.setItem("signInState", getCurrentDate());
});
};
// 打开签到弹窗 后关闭
const cutSucceed = () => {
succeedState.value = true;
setTimeout(() => (succeedState.value = false), 1800);
};
const getCurrentDateTime = () => {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = this.padNumber(currentDate.getMonth() + 1); // 月份从0开始需要加1
const day = this.padNumber(currentDate.getDate());
const hours = this.padNumber(currentDate.getHours());
const minutes = this.padNumber(currentDate.getMinutes());
const seconds = this.padNumber(currentDate.getSeconds());
const formattedDateTime = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
return formattedDateTime;
};
const getCurrentDate = () => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, "0"); // 月份从0开始需要加1并确保两位数
const day = now.getDate().toString().padStart(2, "0"); // 确保两位数
return `${year}-${month}-${day}`;
};
const fetchData = (url, data) => {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.withCredentials = true;
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
if (["127.0.0.1", "localhost", "192.168.18.219"].includes(location.hostname)) xhr.setRequestHeader("Authorization", "3b01343c65e3b2fa3ce32ae26feb3a9b");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
let response = xhr.response;
resolve(response);
}
};
xhr.send(JSON.stringify(data));
});
};
const fetchGetData = (url) => {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("GET", url, true);
if (["127.0.0.1", "localhost", "192.168.18.219"].includes(location.hostname)) xhr.setRequestHeader("Authorization", "3b01343c65e3b2fa3ce32ae26feb3a9b");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
let response = xhr.response;
resolve(JSON.parse(response));
}
};
xhr.send();
});
};
return { postSign, cutRing, moreList, todaycount, my, showList, list, loading, calendarClass, dateList, signreward, signnum, token, reward, extra_reward, succeedState, ruleState, signList, issign, tips, integral, currentDay, totalDaysInMonth, dayOfWeek };
},
});
appSectionIndex.mount("#signInBox");