mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-12 09:18:14 +08:00
@@ -80,6 +80,7 @@ const poolTimeGet = ref({} as Record<number, string>);
|
||||
const poolTimePass = ref({} as Record<number, number>);
|
||||
const poolColor = ref({} as Record<number, string>);
|
||||
const timer = ref({} as Record<number, any>);
|
||||
|
||||
// expose
|
||||
defineExpose({
|
||||
name: "限时祈愿",
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
// vue
|
||||
import { ref, onMounted } from "vue";
|
||||
import { ref, onMounted, onUnmounted } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
// utils
|
||||
import { createTGWindow } from "../utils/TGWindow";
|
||||
@@ -57,14 +57,18 @@ import { createTGWindow } from "../utils/TGWindow";
|
||||
import MysOper from "../plugins/Mys";
|
||||
// interface
|
||||
import { PositionCard } from "../plugins/Mys/interface/position";
|
||||
|
||||
// vue
|
||||
const router = useRouter();
|
||||
|
||||
// loading
|
||||
const loading = ref(true as boolean);
|
||||
|
||||
// 数据
|
||||
// data
|
||||
const positionCards = ref([] as PositionCard[]);
|
||||
const positionTimeGet = ref({} as Record<number, string>);
|
||||
const positionTimeEnd = ref({} as Record<number, number>);
|
||||
const router = useRouter();
|
||||
const positionTimeGet = ref({} as Record<number, string>); // 剩余时间/已结束/未知
|
||||
const positionTimeEnd = ref({} as Record<number, number>); // 结束时间戳
|
||||
const positionTimer = ref({} as Record<number, null>); // 定时器
|
||||
|
||||
// expose
|
||||
defineExpose({
|
||||
@@ -72,6 +76,24 @@ defineExpose({
|
||||
loading,
|
||||
});
|
||||
|
||||
function positionLastInterval (postId: number) {
|
||||
const timeGet = positionTimeGet.value[postId];
|
||||
console.log(timeGet, postId);
|
||||
console.log(positionTimer.value);
|
||||
if (timeGet === "未知" || timeGet === "已结束") {
|
||||
console.log("清除计时器");
|
||||
clearInterval(positionTimer.value[postId]);
|
||||
positionTimer.value[postId] = null;
|
||||
return;
|
||||
}
|
||||
const timeLast = positionTimeEnd[postId] - Date.now();
|
||||
if (timeLast <= 0) {
|
||||
positionTimeGet.value[postId] = "已结束";
|
||||
} else {
|
||||
positionTimeGet.value[postId] = getLastPositionTime(timeLast);
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
const positionData = await MysOper.Position.get();
|
||||
if (!positionData) {
|
||||
@@ -80,19 +102,16 @@ onMounted(async () => {
|
||||
}
|
||||
positionCards.value = MysOper.Position.card(positionData);
|
||||
positionCards.value.forEach((card) => {
|
||||
positionTimeGet.value[card.post_id] = getLastPositionTime(card.time.end_stamp - Date.now());
|
||||
if (card.time.end_stamp === 0) {
|
||||
positionTimeGet.value[card.post_id] = "未知";
|
||||
} else {
|
||||
positionTimeGet.value[card.post_id] = getLastPositionTime(card.time.end_stamp - Date.now());
|
||||
}
|
||||
positionTimeEnd.value[card.post_id] = card.time.end_stamp;
|
||||
positionTimer.value[card.post_id] = setInterval(() => {
|
||||
positionLastInterval(card.post_id);
|
||||
}, 1000);
|
||||
});
|
||||
setInterval(() => {
|
||||
positionCards.value.forEach((card) => {
|
||||
const time = card.time.end_stamp - Date.now();
|
||||
if (time <= 0) {
|
||||
positionTimeGet.value[card.post_id] = "已结束";
|
||||
return;
|
||||
}
|
||||
positionTimeGet.value[card.post_id] = getLastPositionTime(time);
|
||||
});
|
||||
}, 1000);
|
||||
loading.value = false;
|
||||
});
|
||||
|
||||
@@ -118,6 +137,12 @@ async function toPost (card: PositionCard) {
|
||||
// 打开新窗口
|
||||
createTGWindow(path, "近期活动", card.title, 960, 720, false, false);
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
Object.keys(positionTimer.value).forEach((key) => {
|
||||
clearInterval(positionTimer.value[Number(key)]);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="css" scoped>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* @file plugins Mys utils position.ts
|
||||
* @description Mys 插件热点追踪工具
|
||||
* @author BTMuli<bt-muli@outlook.com>
|
||||
* @since Alpha v0.1.2
|
||||
* @since Alpha v0.1.5
|
||||
*/
|
||||
|
||||
import { type PositionObc, type PositionData, type PositionCard } from "../interface/position";
|
||||
@@ -28,13 +28,23 @@ export function dfs (list: PositionObc[]): PositionData[] {
|
||||
|
||||
/**
|
||||
* @description 根据热点追踪信息转为渲染用的数据
|
||||
* @since Alpha v0.1.2
|
||||
* @since Alpha v0.1.5
|
||||
* @param {PositionData[]} positionData 列表
|
||||
* @returns {PositionCard[]} 返回列表
|
||||
*/
|
||||
export function getPositionCard (positionData: PositionData[]): PositionCard[] {
|
||||
const res: PositionCard[] = [];
|
||||
positionData.map((position) => {
|
||||
let endStr: string;
|
||||
if (position.end_time === "0") {
|
||||
endStr = "";
|
||||
} else {
|
||||
endStr = new Date(Number(position.end_time))
|
||||
.toLocaleString("zh-CN", {
|
||||
hour12: false,
|
||||
})
|
||||
.replace(/\//g, "-");
|
||||
}
|
||||
return res.push({
|
||||
title: position.title,
|
||||
post_id: Number(position.url.split("/").pop()),
|
||||
@@ -43,11 +53,7 @@ export function getPositionCard (positionData: PositionData[]): PositionCard[] {
|
||||
time: {
|
||||
start: position.create_time,
|
||||
start_stamp: new Date(position.create_time).getTime(),
|
||||
end: new Date(Number(position.end_time))
|
||||
.toLocaleString("zh-CN", {
|
||||
hour12: false,
|
||||
})
|
||||
.replace(/\//g, "-"),
|
||||
end: endStr,
|
||||
end_stamp: Number(position.end_time),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user