feat(electron): 实现系统托盘和关闭行为配置功能

- 添加系统托盘创建和销毁逻辑- 实现窗口关闭行为配置(退出/最小化/托盘)
- 添加配置文件读写功能
- 实现下载取消和清理功能
- 添加待更新文件检查机制
- 优化文件下载进度和错误处理
- 添加自动更新配置选项- 实现平滑滚动动画效果
- 添加试用期过期类型检查
-优化VIP状态刷新逻辑
This commit is contained in:
2025-10-17 14:17:47 +08:00
parent 6e1b4d00de
commit 07e34c35c8
19 changed files with 1545 additions and 467 deletions

View File

@@ -15,20 +15,21 @@ import java.util.Map;
/**
* 版本管理控制器
*
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/version")
@Anonymous
public class VersionController extends BaseController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private static final String VERSION_REDIS_KEY = "erp:client:version";
private static final String ASAR_URL_REDIS_KEY = "erp:client:asar_url";
private static final String JAR_URL_REDIS_KEY = "erp:client:jar_url";
private static final String UPDATE_NOTES_REDIS_KEY = "erp:client:update_notes";
/**
* 检查版本更新
*/
@@ -36,14 +37,15 @@ public class VersionController extends BaseController {
public AjaxResult checkVersion(@RequestParam String currentVersion) {
String latestVersion = redisTemplate.opsForValue().get(VERSION_REDIS_KEY);
boolean needUpdate = compareVersions(currentVersion, latestVersion) < 0;
Map<String, Object> data = new HashMap<>();
data.put("currentVersion", currentVersion);
data.put("latestVersion", latestVersion);
data.put("needUpdate", needUpdate);
data.put("asarUrl", redisTemplate.opsForValue().get(ASAR_URL_REDIS_KEY));
data.put("jarUrl", redisTemplate.opsForValue().get(JAR_URL_REDIS_KEY));
data.put("updateNotes", redisTemplate.opsForValue().get(UPDATE_NOTES_REDIS_KEY));
return AjaxResult.success(data);
}
/**
@@ -56,16 +58,17 @@ public class VersionController extends BaseController {
if (StringUtils.isEmpty(currentVersion)) {
currentVersion = "2.0.0";
}
Map<String, Object> data = new HashMap<>();
data.put("currentVersion", currentVersion);
data.put("asarUrl", redisTemplate.opsForValue().get(ASAR_URL_REDIS_KEY));
data.put("jarUrl", redisTemplate.opsForValue().get(JAR_URL_REDIS_KEY));
data.put("updateNotes", redisTemplate.opsForValue().get(UPDATE_NOTES_REDIS_KEY));
data.put("updateTime", System.currentTimeMillis());
return AjaxResult.success(data);
}
/**
* 设置版本信息和下载链接
*/
@@ -73,8 +76,9 @@ public class VersionController extends BaseController {
@PreAuthorize("@ss.hasPermi('system:version:update')")
@PostMapping("/update")
public AjaxResult updateVersionInfo(@RequestParam("version") String version,
@RequestParam(value = "asarUrl", required = false) String asarUrl,
@RequestParam(value = "jarUrl", required = false) String jarUrl) {
@RequestParam(value = "asarUrl", required = false) String asarUrl,
@RequestParam(value = "jarUrl", required = false) String jarUrl,
@RequestParam("updateNotes") String updateNotes) {
redisTemplate.opsForValue().set(VERSION_REDIS_KEY, version);
if (StringUtils.isNotEmpty(asarUrl)) {
redisTemplate.opsForValue().set(ASAR_URL_REDIS_KEY, asarUrl);
@@ -82,15 +86,17 @@ public class VersionController extends BaseController {
if (StringUtils.isNotEmpty(jarUrl)) {
redisTemplate.opsForValue().set(JAR_URL_REDIS_KEY, jarUrl);
}
redisTemplate.opsForValue().set(UPDATE_NOTES_REDIS_KEY, updateNotes);
Map<String, Object> data = new HashMap<>();
data.put("version", version);
data.put("asarUrl", asarUrl);
data.put("jarUrl", jarUrl);
data.put("updateNotes", updateNotes);
data.put("updateTime", System.currentTimeMillis());
return AjaxResult.success(data);
}
/**
* 比较版本号
* @param version1 版本1
@@ -103,18 +109,18 @@ public class VersionController extends BaseController {
}
String[] v1Parts = version1.split("\\.");
String[] v2Parts = version2.split("\\.");
int maxLength = Math.max(v1Parts.length, v2Parts.length);
for (int i = 0; i < maxLength; i++) {
int v1Part = i < v1Parts.length ? Integer.parseInt(v1Parts[i]) : 0;
int v2Part = i < v2Parts.length ? Integer.parseInt(v2Parts[i]) : 0;
if (v1Part != v2Part) {
return Integer.compare(v1Part, v2Part);
}
}
return 0;
}
}