mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 01:10:16 +08:00
feat: enhance app detail modal to prioritize installed version based on installation status
- Updated `openDetail` function to check installation status for both Spark and APM versions, setting `viewingOrigin` accordingly. - Modified logic to determine which app version to display in screenshots based on installation status. - Improved handling of `viewingOrigin` in `AppDetailModal.vue` to default to Spark if no specific version is installed.
This commit is contained in:
46
src/App.vue
46
src/App.vue
@@ -350,7 +350,7 @@ const selectCategory = (category: string) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const openDetail = (app: App | Record<string, unknown>) => {
|
const openDetail = async (app: App | Record<string, unknown>) => {
|
||||||
// 提取 pkgname(必须存在)
|
// 提取 pkgname(必须存在)
|
||||||
const pkgname = (app as Record<string, unknown>).pkgname as string;
|
const pkgname = (app as Record<string, unknown>).pkgname as string;
|
||||||
if (!pkgname) {
|
if (!pkgname) {
|
||||||
@@ -389,10 +389,40 @@ const openDetail = (app: App | Record<string, unknown>) => {
|
|||||||
} as App;
|
} as App;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 后续逻辑使用 fullApp
|
// 合并应用:先检查 Spark/APM 安装状态,已安装的版本优先展示
|
||||||
|
if (fullApp.isMerged && (fullApp.sparkApp || fullApp.apmApp)) {
|
||||||
|
const [sparkInstalled, apmInstalled] = await Promise.all([
|
||||||
|
fullApp.sparkApp
|
||||||
|
? window.ipcRenderer.invoke("check-installed", {
|
||||||
|
pkgname: fullApp.sparkApp.pkgname,
|
||||||
|
origin: "spark",
|
||||||
|
}) as Promise<boolean>
|
||||||
|
: Promise.resolve(false),
|
||||||
|
fullApp.apmApp
|
||||||
|
? window.ipcRenderer.invoke("check-installed", {
|
||||||
|
pkgname: fullApp.apmApp.pkgname,
|
||||||
|
origin: "apm",
|
||||||
|
}) as Promise<boolean>
|
||||||
|
: Promise.resolve(false),
|
||||||
|
]);
|
||||||
|
if (sparkInstalled && !apmInstalled) {
|
||||||
|
fullApp.viewingOrigin = "spark";
|
||||||
|
} else if (apmInstalled && !sparkInstalled) {
|
||||||
|
fullApp.viewingOrigin = "apm";
|
||||||
|
}
|
||||||
|
// 若都安装或都未安装,不设置 viewingOrigin,由模态框默认展示 spark
|
||||||
|
}
|
||||||
|
|
||||||
|
const displayAppForScreenshots =
|
||||||
|
fullApp.viewingOrigin !== undefined && fullApp.isMerged
|
||||||
|
? (fullApp.viewingOrigin === "spark"
|
||||||
|
? fullApp.sparkApp
|
||||||
|
: fullApp.apmApp) ?? fullApp
|
||||||
|
: fullApp;
|
||||||
|
|
||||||
currentApp.value = fullApp;
|
currentApp.value = fullApp;
|
||||||
currentScreenIndex.value = 0;
|
currentScreenIndex.value = 0;
|
||||||
loadScreenshots(fullApp);
|
loadScreenshots(displayAppForScreenshots);
|
||||||
showModal.value = true;
|
showModal.value = true;
|
||||||
|
|
||||||
currentAppSparkInstalled.value = false;
|
currentAppSparkInstalled.value = false;
|
||||||
@@ -891,10 +921,7 @@ const loadCategories = async () => {
|
|||||||
|
|
||||||
for (const mode of modes) {
|
for (const mode of modes) {
|
||||||
const finalArch = mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
const finalArch = mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
||||||
const path =
|
const path = `/${finalArch}/categories.json`;
|
||||||
mode === "spark"
|
|
||||||
? "/store/categories.json"
|
|
||||||
: `/${finalArch}/categories.json`;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axiosInstance.get(cacheBuster(path));
|
const response = await axiosInstance.get(cacheBuster(path));
|
||||||
@@ -943,10 +970,7 @@ const loadApps = async (onFirstBatch?: () => void) => {
|
|||||||
const finalArch =
|
const finalArch =
|
||||||
mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
||||||
|
|
||||||
const path =
|
const path = `/${finalArch}/${category}/applist.json`;
|
||||||
mode === "spark"
|
|
||||||
? `/store/${category}/applist.json`
|
|
||||||
: `/${finalArch}/${category}/applist.json`;
|
|
||||||
|
|
||||||
logger.info(`加载分类: ${category} (来源: ${mode})`);
|
logger.info(`加载分类: ${category} (来源: ${mode})`);
|
||||||
const categoryApps = await fetchWithRetry<AppJson[]>(
|
const categoryApps = await fetchWithRetry<AppJson[]>(
|
||||||
|
|||||||
@@ -298,7 +298,9 @@ watch(
|
|||||||
isIconLoaded.value = false;
|
isIconLoaded.value = false;
|
||||||
if (newApp) {
|
if (newApp) {
|
||||||
if (newApp.isMerged) {
|
if (newApp.isMerged) {
|
||||||
viewingOrigin.value = newApp.sparkApp ? "spark" : "apm";
|
// 若父组件已根据安装状态设置了优先展示的版本,则使用;否则默认 Spark
|
||||||
|
viewingOrigin.value =
|
||||||
|
newApp.viewingOrigin ?? (newApp.sparkApp ? "spark" : "apm");
|
||||||
} else {
|
} else {
|
||||||
viewingOrigin.value = newApp.origin;
|
viewingOrigin.value = newApp.origin;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user