mirror of
https://github.com/EasyTier/easytier.github.io.git
synced 2026-10-19 16:16:34 +00:00
+15
-5
@@ -3,8 +3,11 @@ home: hello
|
|||||||
---
|
---
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import { data } from '../../metadata.data.js'
|
import { data } from '../../metadata.data.js'
|
||||||
|
import { useLatestVersion } from '../../useLatestVersion.ts'
|
||||||
|
|
||||||
|
const { latestVersion, prereleaseVersion, loading, error } = useLatestVersion()
|
||||||
|
|
||||||
interface Package {
|
interface Package {
|
||||||
os: string
|
os: string
|
||||||
@@ -132,8 +135,15 @@ const filter_os = ref('')
|
|||||||
const filter_arch = ref('')
|
const filter_arch = ref('')
|
||||||
const accel_proxy = ref('')
|
const accel_proxy = ref('')
|
||||||
|
|
||||||
|
const vers = computed(() => ({
|
||||||
|
easytier_latest_version: (!loading.value && !error.value && latestVersion.value) ? latestVersion.value : data.easytier_latest_version,
|
||||||
|
easytier_pre_release_version: (!loading.value && !error.value && prereleaseVersion.value) ? prereleaseVersion.value : data.easytier_pre_release_version,
|
||||||
|
}))
|
||||||
|
|
||||||
|
const currentVersion = computed(() => vers.value[channel.value as keyof typeof vers.value])
|
||||||
|
|
||||||
function renderUrlTmpl(url_tmpl: string): string {
|
function renderUrlTmpl(url_tmpl: string): string {
|
||||||
return accel_proxy.value + url_tmpl.replace(/\{\}/g, data[channel.value])
|
return accel_proxy.value + url_tmpl.replace(/\{\}/g, currentVersion.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -153,12 +163,12 @@ The command line program package includes four executables:
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<select name="channel-select" id="channel-select" v-model="channel" class="filter-select">
|
<select name="channel-select" id="channel-select" v-model="channel" class="filter-select">
|
||||||
<option value="easytier_latest_version"> Stable Version(v{{ data.easytier_latest_version }}) </option>
|
<option value="easytier_latest_version"> Stable Version(v{{ vers.easytier_latest_version }}) </option>
|
||||||
<option value="easytier_pre_release_version"> Pre-release Version(v{{ data.easytier_pre_release_version }}) </option>
|
<option value="easytier_pre_release_version"> Pre-release Version(v{{ vers.easytier_pre_release_version }}) </option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## <a :href="url + data[channel]">EasyTier v{{ data[channel] }}</a> { #latest }
|
## <a :href="url + currentVersion">EasyTier v{{ currentVersion }}</a> { #latest }
|
||||||
|
|
||||||
- GitHub Acceleration
|
- GitHub Acceleration
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
+15
-5
@@ -3,8 +3,11 @@ home: hello
|
|||||||
---
|
---
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import { data } from '../metadata.data.js'
|
import { data } from '../metadata.data.js'
|
||||||
|
import { useLatestVersion } from '../useLatestVersion.ts'
|
||||||
|
|
||||||
|
const { latestVersion, prereleaseVersion, loading, error } = useLatestVersion()
|
||||||
|
|
||||||
interface Package {
|
interface Package {
|
||||||
os: string
|
os: string
|
||||||
@@ -132,8 +135,15 @@ const filter_os = ref('')
|
|||||||
const filter_arch = ref('')
|
const filter_arch = ref('')
|
||||||
const accel_proxy = ref('')
|
const accel_proxy = ref('')
|
||||||
|
|
||||||
|
const vers = computed(() => ({
|
||||||
|
easytier_latest_version: (!loading.value && !error.value && latestVersion.value) ? latestVersion.value : data.easytier_latest_version,
|
||||||
|
easytier_pre_release_version: (!loading.value && !error.value && prereleaseVersion.value) ? prereleaseVersion.value : data.easytier_pre_release_version,
|
||||||
|
}))
|
||||||
|
|
||||||
|
const currentVersion = computed(() => vers.value[channel.value as keyof typeof vers.value])
|
||||||
|
|
||||||
function renderUrlTmpl(url_tmpl: string): string {
|
function renderUrlTmpl(url_tmpl: string): string {
|
||||||
return accel_proxy.value + url_tmpl.replace(/\{\}/g, data[channel.value])
|
return accel_proxy.value + url_tmpl.replace(/\{\}/g, currentVersion.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -153,12 +163,12 @@ function renderUrlTmpl(url_tmpl: string): string {
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<select name="channel-select" id="channel-select" v-model="channel" class="filter-select">
|
<select name="channel-select" id="channel-select" v-model="channel" class="filter-select">
|
||||||
<option value="easytier_latest_version"> 稳定版(v{{ data.easytier_latest_version }}) </option>
|
<option value="easytier_latest_version"> 稳定版(v{{ vers.easytier_latest_version }}) </option>
|
||||||
<option value="easytier_pre_release_version"> 预发布版(v{{ data.easytier_pre_release_version }}) </option>
|
<option value="easytier_pre_release_version"> 预发布版(v{{ vers.easytier_pre_release_version }}) </option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## <a :href="url + data[channel]">EasyTier v{{ data[channel] }}</a> { #latest }
|
## <a :href="url + currentVersion">EasyTier v{{ currentVersion }}</a> { #latest }
|
||||||
|
|
||||||
- Github 加速
|
- Github 加速
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import { ref, onMounted } from 'vue'
|
||||||
|
|
||||||
|
export function useLatestVersion() {
|
||||||
|
const latestVersion = ref<string | null>(null)
|
||||||
|
const prereleaseVersion = ref<string | null>(null)
|
||||||
|
const loading = ref(true)
|
||||||
|
const error = ref<string | null>(null)
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
try {
|
||||||
|
const [latestRes, releasesRes] = await Promise.all([
|
||||||
|
fetch('https://api.github.com/repos/EasyTier/EasyTier/releases/latest'),
|
||||||
|
fetch('https://api.github.com/repos/EasyTier/EasyTier/releases?per_page=5')
|
||||||
|
])
|
||||||
|
|
||||||
|
if (!latestRes.ok || !releasesRes.ok) {
|
||||||
|
throw new Error('Failed to fetch releases from GitHub API')
|
||||||
|
}
|
||||||
|
|
||||||
|
const latestData = await latestRes.json() as { tag_name?: string }
|
||||||
|
const releases = await releasesRes.json() as Array<{ tag_name?: string; prerelease?: boolean }>
|
||||||
|
|
||||||
|
latestVersion.value = latestData.tag_name ?? null
|
||||||
|
prereleaseVersion.value = releases.find((item) => item.prerelease)?.tag_name ?? null
|
||||||
|
} catch (err) {
|
||||||
|
error.value = err instanceof Error ? err.message : 'Unknown error'
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (latestVersion.value?.startsWith('v')) latestVersion.value = latestVersion.value.slice(1)
|
||||||
|
if (prereleaseVersion.value?.startsWith('v')) prereleaseVersion.value = prereleaseVersion.value.slice(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
return { latestVersion, prereleaseVersion, loading, error }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user