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");