Files
youlai-boot/src/main/java/com/youlai/boot/device/controller/AppIconController.java
TongTongStudio 33fcbcff3e feat(device): add app icon management with pagination and delete functionality
新增应用图标库分页查询和图标删除接口,并完成对应的菜单与按钮权限初始化。
2026-08-06 02:25:25 +08:00

105 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.youlai.boot.device.controller;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.device.model.vo.AppIconVO;
import com.youlai.boot.device.service.AppIconService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 应用图标库控制层
*
* @author TTSTD
* @since 2026-08-05
*/
@Tag(name = "应用图标库")
@RestController
@RequestMapping("/api/v1/app-icons")
@RequiredArgsConstructor
public class AppIconController {
private final AppIconService appIconService;
@Operation(summary = "获取应用当前生效图标信息")
@GetMapping("/{packageName}")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.VIEW)
public Result<AppIconVO> getCurrentIcon(@PathVariable String packageName) {
return Result.success(appIconService.getCurrentIcon(packageName));
}
@Operation(summary = "获取应用图标历史版本列表(含当前,按版本倒序)")
@GetMapping("/{packageName}/history")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.LIST)
public Result<List<AppIconVO>> getHistory(@PathVariable String packageName) {
return Result.success(appIconService.getHistory(packageName));
}
@Operation(summary = "选取历史版本并锁定")
@PostMapping("/{packageName}/lock")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.LOCK_APP_ICON)
public Result<?> lock(
@Parameter(description = "应用包名") @PathVariable String packageName,
@Parameter(description = "选中图标记录ID") @RequestParam Long iconId
) {
return Result.judge(appIconService.lockIcon(packageName, iconId));
}
@Operation(summary = "解锁当前图标")
@PostMapping("/{packageName}/unlock")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.UNLOCK_APP_ICON)
public Result<?> unlock(@Parameter(description = "应用包名") @PathVariable String packageName) {
return Result.judge(appIconService.unlockIcon(packageName));
}
@Operation(summary = "上传应用图标(全局库)")
@PostMapping("/{packageName}/upload")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.UPLOAD_APP_ICON)
public Result<String> upload(
@Parameter(description = "应用包名") @PathVariable String packageName,
@Parameter(description = "应用名称(可选,不传则沿用已有名称)") @RequestParam(required = false) String appName,
@Parameter(description = "图标文件jpg/jpeg/png/webp") @RequestPart(value = "file") MultipartFile file
) {
return Result.success(appIconService.uploadIcon(packageName, appName, file, "admin"));
}
@Operation(summary = "删除应用图标版本")
@DeleteMapping("/{packageName}/{iconId}")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.DELETE)
public Result<Boolean> deleteIcon(
@Parameter(description = "应用包名") @PathVariable String packageName,
@Parameter(description = "图标记录ID") @PathVariable Long iconId
) {
return Result.judge(appIconService.deleteIcon(packageName, iconId));
}
@Operation(summary = "应用图标库分页列表")
@GetMapping("/page")
public PageResult<AppIconVO> page(
@Parameter(description = "页码", example = "1") @RequestParam(defaultValue = "1") Long pageNum,
@Parameter(description = "每页条数", example = "10") @RequestParam(defaultValue = "10") Long pageSize,
@Parameter(description = "应用包名(可选,不传返回全部)") @RequestParam(required = false) String packageName
) {
IPage<AppIconVO> page = new Page<>(pageNum, pageSize);
return PageResult.success(appIconService.pageAppIcons(page, packageName));
}
}