轮播应用OK
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using DRS9.Dashboard.Application.DTOs;
|
||||
using DRS9.Dashboard.Application.Services;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DRS9.Dashboard.Server.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// 轮播显示控制器 - 供设备客户端使用
|
||||
/// </summary>
|
||||
[Route("rotator")]
|
||||
public class RotatorViewerController : Controller
|
||||
{
|
||||
private readonly RotatorItemService _rotatorItemService;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
private readonly ILogger<RotatorViewerController> _logger;
|
||||
|
||||
public RotatorViewerController(
|
||||
RotatorItemService rotatorItemService,
|
||||
IHttpContextAccessor httpContextAccessor,
|
||||
ILogger<RotatorViewerController> logger)
|
||||
{
|
||||
_rotatorItemService = rotatorItemService;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定应用的轮播配置 (JSON)
|
||||
/// </summary>
|
||||
[HttpGet("{applicationId}/config.json")]
|
||||
public async Task<ActionResult> GetConfig(int applicationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var items = await _rotatorItemService.GetByApplicationIdAsync(applicationId);
|
||||
|
||||
// 只返回启用的项目
|
||||
var enabledItems = items.Where(i => i.IsEnabled).OrderBy(i => i.Order).ToList();
|
||||
|
||||
var config = new
|
||||
{
|
||||
urls = enabledItems.Select(i => GetAbsoluteUrl(i.Url)).ToList(),
|
||||
switchIntervals = enabledItems.Select(i => i.Duration).ToList()
|
||||
};
|
||||
|
||||
return Json(config);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "获取轮播配置失败: ApplicationId={ApplicationId}", applicationId);
|
||||
return Json(new { urls = new List<string>(), switchIntervals = new List<int>() });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 显示轮播页面
|
||||
/// </summary>
|
||||
[HttpGet("{applicationId}")]
|
||||
public IActionResult ViewRotator(int applicationId)
|
||||
{
|
||||
return View(applicationId);
|
||||
}
|
||||
|
||||
private string GetAbsoluteUrl(string relativeOrAbsoluteUrl)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(relativeOrAbsoluteUrl))
|
||||
return string.Empty;
|
||||
|
||||
// 如果已经是绝对 URL,直接返回
|
||||
if (relativeOrAbsoluteUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
|
||||
relativeOrAbsoluteUrl.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return relativeOrAbsoluteUrl;
|
||||
}
|
||||
|
||||
// 转换为绝对 URL
|
||||
var request = _httpContextAccessor.HttpContext?.Request;
|
||||
if (request != null)
|
||||
{
|
||||
var baseUrl = $"{request.Scheme}://{request.Host}";
|
||||
return relativeOrAbsoluteUrl.StartsWith("/") ? baseUrl + relativeOrAbsoluteUrl : baseUrl + "/" + relativeOrAbsoluteUrl;
|
||||
}
|
||||
|
||||
return relativeOrAbsoluteUrl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user