mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 09:20:18 +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(必须存在)
|
||||
const pkgname = (app as Record<string, unknown>).pkgname as string;
|
||||
if (!pkgname) {
|
||||
@@ -389,10 +389,40 @@ const openDetail = (app: App | Record<string, unknown>) => {
|
||||
} 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;
|
||||
currentScreenIndex.value = 0;
|
||||
loadScreenshots(fullApp);
|
||||
loadScreenshots(displayAppForScreenshots);
|
||||
showModal.value = true;
|
||||
|
||||
currentAppSparkInstalled.value = false;
|
||||
@@ -891,10 +921,7 @@ const loadCategories = async () => {
|
||||
|
||||
for (const mode of modes) {
|
||||
const finalArch = mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
||||
const path =
|
||||
mode === "spark"
|
||||
? "/store/categories.json"
|
||||
: `/${finalArch}/categories.json`;
|
||||
const path = `/${finalArch}/categories.json`;
|
||||
|
||||
try {
|
||||
const response = await axiosInstance.get(cacheBuster(path));
|
||||
@@ -943,10 +970,7 @@ const loadApps = async (onFirstBatch?: () => void) => {
|
||||
const finalArch =
|
||||
mode === "spark" ? `${arch}-store` : `${arch}-apm`;
|
||||
|
||||
const path =
|
||||
mode === "spark"
|
||||
? `/store/${category}/applist.json`
|
||||
: `/${finalArch}/${category}/applist.json`;
|
||||
const path = `/${finalArch}/${category}/applist.json`;
|
||||
|
||||
logger.info(`加载分类: ${category} (来源: ${mode})`);
|
||||
const categoryApps = await fetchWithRetry<AppJson[]>(
|
||||
|
||||
@@ -298,7 +298,9 @@ watch(
|
||||
isIconLoaded.value = false;
|
||||
if (newApp) {
|
||||
if (newApp.isMerged) {
|
||||
viewingOrigin.value = newApp.sparkApp ? "spark" : "apm";
|
||||
// 若父组件已根据安装状态设置了优先展示的版本,则使用;否则默认 Spark
|
||||
viewingOrigin.value =
|
||||
newApp.viewingOrigin ?? (newApp.sparkApp ? "spark" : "apm");
|
||||
} else {
|
||||
viewingOrigin.value = newApp.origin;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user