257 lines
9.5 KiB
JavaScript
257 lines
9.5 KiB
JavaScript
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");
|