diff --git a/src/components/SoftwareCard.vue b/src/components/SoftwareCard.vue
index 1fe80e9..fdca5bf 100644
--- a/src/components/SoftwareCard.vue
+++ b/src/components/SoftwareCard.vue
@@ -34,16 +34,26 @@
{{ software.id }}
-
-
+
+
当前: {{ software.version || '--' }}
-
-
-
- 推荐: {{ software.version || '最新版' }}
+
+
+ 推荐: {{ software.recommended_version }}
+
+
+
+ 推荐: {{ software.recommended_version || '最新版' }}
+
+
+
+
最新: {{ software.available_version }}
@@ -126,6 +136,35 @@ const displayProgress = computed(() => {
return Math.round(props.software.progress * 100) + '%';
});
+const isInstalled = computed(() => {
+ return props.software.status === 'installed' ||
+ (props.software.status === 'idle' && props.actionLabel === '更新') ||
+ (props.software.status === 'idle' && !props.actionLabel && props.software.installed_version);
+});
+
+const isVersionLower = (current: string | undefined | null, target: string | undefined | null) => {
+ if (!current || !target) return false;
+ if (current === target) return false;
+
+ // 简易的版本比对逻辑:按点分割比对数字
+ const v1 = current.split('.');
+ const v2 = target.split('.');
+ const len = Math.max(v1.length, v2.length);
+
+ for (let i = 0; i < len; i++) {
+ const n1 = parseInt(v1[i] || '0', 10);
+ const n2 = parseInt(v2[i] || '0', 10);
+ if (isNaN(n1) || isNaN(n2)) {
+ // 如果是非数字字符串比对,直接返回字符串比对结果
+ if (v1[i] !== v2[i]) return v1[i] < v2[i];
+ continue;
+ }
+ if (n1 < n2) return true;
+ if (n1 > n2) return false;
+ }
+ return false;
+};
+
const placeholderColor = computed(() => {
const colors = ['#FF9500', '#FF3B30', '#34C759', '#007AFF', '#5856D6', '#AF52DE'];
let hash = 0;
diff --git a/src/store/software.ts b/src/store/software.ts
index 2d36ccb..64fb061 100644
--- a/src/store/software.ts
+++ b/src/store/software.ts
@@ -39,10 +39,12 @@ export const useSoftwareStore = defineStore('software', {
let displayStatus = item.status;
let actionLabel = '安装';
- let currentVersion = item.version; // 默认使用清单中的推荐版本
+
+ // 统一字段:version 始终代表当前安装的版本,recommended_version 代表清单推荐的版本
+ const currentVersion = installedInfo ? installedInfo.version : null;
+ const recommendedVersion = item.version;
if (isInstalled) {
- currentVersion = installedInfo.version; // 如果已安装,显示本地真实版本
if (hasUpdate) {
actionLabel = '更新';
} else if (displayStatus === 'idle') {
@@ -54,7 +56,7 @@ export const useSoftwareStore = defineStore('software', {
return {
...item,
version: currentVersion,
- recommended_version: item.version, // 额外保存一个原始推荐版本字段供前端判断
+ recommended_version: recommendedVersion,
status: displayStatus,
actionLabel
};