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