109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
function getBeijingTime(date = new Date()) {
|
||
const f = n => String(n).padStart(2, '0');
|
||
const t = new Date(date.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' }));
|
||
return `${t.getFullYear()}-${f(t.getMonth()+1)}-${f(t.getDate())} ${f(t.getHours())}:${f(t.getMinutes())}:${f(t.getSeconds())}`;
|
||
}
|
||
|
||
/**
|
||
* 获取最新发布版本信息
|
||
* @param {Array} releases - 发布版本数组
|
||
* @param {Object} options - 配置项
|
||
* @param {boolean} options.includePrerelease - 是否包含预发布版(默认 true)
|
||
* @returns {Object|null} 最新版本信息
|
||
*/
|
||
export function getLatestRelease(releases, options = {}) {
|
||
const { includePrerelease = true } = options;
|
||
|
||
try {
|
||
if (!Array.isArray(releases)) {
|
||
throw new Error("参数错误:releases 必须是数组");
|
||
}
|
||
if (releases.length === 0) {
|
||
throw new Error("没有可用的版本数据");
|
||
}
|
||
|
||
// 过滤掉预发布(如果不包含)
|
||
let filtered = releases;
|
||
if (!includePrerelease) {
|
||
filtered = releases.filter(r => !r.prerelease);
|
||
if (filtered.length === 0) {
|
||
throw new Error("没有找到正式版版本数据");
|
||
}
|
||
}
|
||
|
||
// 按发布时间排序,取最新的
|
||
const latest = filtered.sort((a, b) =>
|
||
new Date(b.published_at) - new Date(a.published_at)
|
||
)[0];
|
||
|
||
if (!latest) {
|
||
throw new Error("无法找到最新版本");
|
||
}
|
||
|
||
return {
|
||
latestVersion: latest.tag_name.replace('v', '') || null,
|
||
download_url: latest.assets?.[0]?.browser_download_url.replace('192.168.1.132:3000', '223.94.45.156:10830') ||
|
||
null,
|
||
prerelease: latest.prerelease,
|
||
published_at: latest.published_at || null,
|
||
title: latest.name || "",
|
||
description: latest.body || ""
|
||
};
|
||
|
||
} catch (error) {
|
||
console.error("获取最新版本出错:", error.message);
|
||
return null;
|
||
}
|
||
}
|
||
|
||
export function getReleases(releases, options = {}) {
|
||
const { includePrerelease = true } = options;
|
||
|
||
try {
|
||
if (!Array.isArray(releases)) {
|
||
throw new Error("参数错误:releases 必须是数组");
|
||
}
|
||
if (releases.length === 0) {
|
||
throw new Error("没有可用的版本数据");
|
||
}
|
||
|
||
// 过滤掉预发布(如果不包含)
|
||
let filtered = releases;
|
||
if (!includePrerelease) {
|
||
filtered = releases.filter(r => !r.prerelease);
|
||
if (filtered.length === 0) {
|
||
throw new Error("没有找到正式版版本数据");
|
||
}
|
||
}
|
||
|
||
// 按发布时间排序
|
||
filtered.sort((a, b) =>
|
||
new Date(b.published_at) - new Date(a.published_at)
|
||
);
|
||
|
||
let renderedReleases = [];
|
||
filtered.forEach(item => {
|
||
renderedReleases.push({
|
||
version: item.tag_name.replace('v', '') || null,
|
||
download_url: item.assets?.[0]?.browser_download_url.replace('192.168.1.132:3000',
|
||
'223.94.45.156:10830') ||
|
||
null,
|
||
prerelease: item.prerelease,
|
||
published_at: getBeijingTime(new Date(item.published_at || null)) || null,
|
||
title: item.name || "",
|
||
description: item.body || ""
|
||
})
|
||
});
|
||
console.log(filtered);
|
||
console.log(renderedReleases);
|
||
return renderedReleases;
|
||
|
||
} catch (error) {
|
||
uni.showToast({
|
||
title: "获取版本列表出错",
|
||
icon: 'none'
|
||
});
|
||
console.error("获取版本列表出错:", error);
|
||
return null;
|
||
}
|
||
} |