From a9d8d539f1c2b382e3be8d9d9c3086611e46ba5f Mon Sep 17 00:00:00 2001 From: qiaoronggui <903111082@qq.com> Date: Sat, 9 Dec 2023 20:29:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=92=E5=BA=8F=E5=92=8C?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/config.js | 5 +++++ src/common/sort.js | 40 +++++++++++++++++++++++++++++++++++++++ src/common/uptimerobot.js | 4 +++- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/common/sort.js diff --git a/public/config.js b/public/config.js index 6ff2f72..7b1096a 100644 --- a/public/config.js +++ b/public/config.js @@ -33,4 +33,9 @@ window.Config = { url: 'https://abo.xyz/' }, ], + + // 根据导航栏菜单排序 + SortNavi: false, + // 根据导航栏菜单过滤没有的站点 + FilterNavi: false, }; diff --git a/src/common/sort.js b/src/common/sort.js new file mode 100644 index 0000000..cdb3a43 --- /dev/null +++ b/src/common/sort.js @@ -0,0 +1,40 @@ +const { Navi, SortNavi, FilterNavi } = window.Config; + +export function Sort (monitors = []) { + if (SortNavi && FilterNavi) { + return sortAndFilter(monitors); + } + + // 如果启用了排序 + if (SortNavi) { + return sort(monitors); + } + + // 如果启用了过滤 + if (FilterNavi) { + return filter(monitors); + } + + // 如果都没有启用,则直接返回 monitors + return monitors; +} + +const sort = (monitors = []) => { + const urlIndexMap = new Map(Navi.map((navItem, index) => [navItem.url, index])); + + monitors.sort((a, b) => { + const indexA = urlIndexMap.get(a.url); + const indexB = urlIndexMap.get(b.url); + return (indexA !== undefined && indexB !== undefined) ? indexA - indexB : (indexA !== undefined) ? -1 : (indexB !== undefined) ? 1 : 0; + }); + + return monitors; +} + +const filter = (monitors = []) => { + return monitors.filter(item => Navi.some(navItem => navItem.url === item.url)); +}; + +const sortAndFilter = (monitors = []) => { + return sort(filter(monitors)); +}; diff --git a/src/common/uptimerobot.js b/src/common/uptimerobot.js index c0b5beb..8447e79 100644 --- a/src/common/uptimerobot.js +++ b/src/common/uptimerobot.js @@ -1,6 +1,7 @@ import axios from 'axios'; import dayjs from 'dayjs'; import { formatNumber } from './helper'; +import { Sort } from './sort'; export async function GetMonitors(apikey, days) { @@ -27,7 +28,8 @@ export async function GetMonitors(apikey, days) { const response = await axios.post('https://cors.status.org.cn/uptimerobot/v2/getMonitors', postdata, { timeout: 10000 }); if (response.data.stat !== 'ok') throw response.data.error; - return response.data.monitors.map((monitor) => { + const processed = Sort(response.data.monitors); + return processed.map((monitor) => { const ranges = monitor.custom_uptime_ranges.split('-'); const average = formatNumber(ranges.pop());