🐛 增加结束时间戳为 0 的处理

fix #25
This commit is contained in:
BTMuli
2023-05-24 15:13:40 +08:00
parent bb4b5e3b95
commit d1e39ed8cd
3 changed files with 55 additions and 23 deletions

View File

@@ -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: "限时祈愿",

View File

@@ -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>

View File

@@ -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),
},
});