From da8ac8a22b426aaabafa47419d532a9e097bce2c Mon Sep 17 00:00:00 2001
From: Seany <17074267@qq.com>
Date: Wed, 17 Dec 2025 00:37:57 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0app=20=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Models/AppVersionModel.cs | 15 +-
.../Models/AppVersionSearch.cs | 2 +-
.../Models/CurrencyModel.cs | 5 +
.../Models/CurrencySearchModel.cs | 20 +
.../Pages/Settings/CurrencyList.razor | 247 +++++++++-
.../Pages/SiteApps/AppVersionEdit.razor | 152 +++++++
.../Pages/SiteApps/AppVersionList.razor | 20 +-
.../Validators/AppVersionModelValidator.cs | 3 +-
.../Controllers/AppVersionController.cs | 23 +-
.../Controllers/CurrencyController.cs | 425 ++++++++----------
Atomx.Common/Entities/Currency.cs | 2 +-
.../CacheServices/CurrencyCacheService.cs | 289 +++++-------
12 files changed, 751 insertions(+), 452 deletions(-)
create mode 100644 Atomx.Admin/Atomx.Admin.Client/Models/CurrencySearchModel.cs
create mode 100644 Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionEdit.razor
diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionModel.cs
index 2f04c01..1663e24 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionModel.cs
+++ b/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionModel.cs
@@ -1,15 +1,10 @@
-using System.ComponentModel.DataAnnotations.Schema;
-using System.ComponentModel.DataAnnotations;
-
-namespace Atomx.Admin.Client.Models
+namespace Atomx.Admin.Client.Models
{
public class AppVersionModel
{
///
/// 数据ID
///
- [DatabaseGenerated(DatabaseGeneratedOption.None)]
- [Key]
public long Id { get; set; }
///
@@ -20,43 +15,36 @@ namespace Atomx.Admin.Client.Models
///
/// 应用名称KEY
///
- [Column(TypeName = "varchar(64)")]
public string AppName { get; set; } = string.Empty;
///
/// 版本标题
///
- [Column(TypeName = "varchar(64)")]
public string Title { get; set; } = string.Empty;
///
/// 版本
///
- [Column(TypeName = "varchar(64)")]
public string Version { get; set; } = string.Empty;
///
/// 主版本号(major)无法向下兼容时,需要递增
///
- [Column(TypeName = "varchar(64)")]
public int VersionX { get; set; }
///
/// 次版本号(minor)新增新的特性时,需要递增
///
- [Column(TypeName = "varchar(64)")]
public int VersionY { get; set; }
///
/// 修订版本号(patch)修复问题时,需要递增
///
- [Column(TypeName = "varchar(64)")]
public int VersionZ { get; set; }
///
/// 版本日期
///
- [Column(TypeName = "varchar(64)")]
public int VersionDate { get; set; }
///
@@ -67,7 +55,6 @@ namespace Atomx.Admin.Client.Models
///
/// 更新内容说明
///
- [Column(TypeName = "text")]
public string Content { get; set; } = string.Empty;
///
diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionSearch.cs b/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionSearch.cs
index 9744577..32856a2 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionSearch.cs
+++ b/Atomx.Admin/Atomx.Admin.Client/Models/AppVersionSearch.cs
@@ -10,7 +10,7 @@
///
/// 状态
///
- public string Status { get; set; } = string.Empty;
+ public string? Status { get; set; } = string.Empty;
///
/// 开始时间
diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/CurrencyModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/CurrencyModel.cs
index b6af7a4..5cd64fd 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Models/CurrencyModel.cs
+++ b/Atomx.Admin/Atomx.Admin.Client/Models/CurrencyModel.cs
@@ -52,5 +52,10 @@
/// 是否编辑
///
public bool IsEdit { get; set; }
+
+ ///
+ /// 是否主货币
+ ///
+ public bool PrimaryCurrency { get; set; }
}
}
diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/CurrencySearchModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/CurrencySearchModel.cs
new file mode 100644
index 0000000..6bf2803
--- /dev/null
+++ b/Atomx.Admin/Atomx.Admin.Client/Models/CurrencySearchModel.cs
@@ -0,0 +1,20 @@
+namespace Atomx.Admin.Client.Models
+{
+ public class CurrencySearchModel:BaseSearch
+ {
+ ///
+ /// 用户名
+ ///
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 状态
+ ///
+ public string Status { get; set; } = string.Empty;
+
+ ///
+ /// 开始时间
+ ///
+ public DateTime?[] RangeTime { get; set; } = new DateTime?[] { null, null };
+ }
+}
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor
index c962082..e8c50a0 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor
@@ -3,20 +3,257 @@
@inject ILogger Logger
@attribute [Authorize]
-
+货币管理
+
- 管理后台
- 系统功能
+ Home
+ 系统配置
货币管理
- Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @if (context.PrimaryCurrency)
+ {
+
+ }
+ else
+ {
+
+ }
+
+
+ @if (context.Enabled)
+ {
+ 已激活
+ }
+ else
+ {
+ 未激活
+ }
+
+
+
+
+
+ HandleEdit(context)">编辑
+
+ @*
+
+ 删除
+
+ *@
+
+
+
+
+
+
+
+
+
+
@code {
[Parameter]
public string Locale { get; set; } = string.Empty;
-}
+
+ [SupplyParameterFromQuery]
+ int? Page { get; set; }
+
+ [SupplyParameterFromQuery(Name = "size")]
+ int? PageSize { get; set; }
+
+ bool pageLoading = false;
+ bool searchExpand = false;
+
+ Form searchForm = new();
+ CurrencySearchModel search = new();
+
+ PagingList PagingList = new() { Size = 20 };
+
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+ }
+
+ protected override async Task OnParametersSetAsync()
+ {
+ loadQueryString();
+ await LoadListAsync();
+ await base.OnParametersSetAsync();
+ }
+
+ void loadQueryString()
+ {
+ var uri = new Uri(Navigation.Uri);
+ var query = uri.Query;
+ search.Name = query.GetQueryString("Name");
+ search.Status = query.GetQueryString("Status");
+
+ var data = query.GetQueryString("RangeTime");
+ if (!string.IsNullOrEmpty(data))
+ {
+ var rangetime = data.Split("-");
+ if (rangetime != null && rangetime.Length > 0)
+ {
+ searchExpand = true;
+ search.RangeTime[0] = rangetime[0].NumberToDateTime();
+ search.RangeTime[1] = rangetime[1].NumberToDateTime();
+ StateHasChanged();
+ }
+ }
+
+ }
+
+ async Task LoadListAsync()
+ {
+ try
+ {
+ pageLoading = true;
+ var url = "/api/currency/search";
+ var apiResult = await HttpService.GetPagingList(url, search, Page.GetValueOrDefault(1), PageSize.GetValueOrDefault(20));
+ if (apiResult.Success)
+ {
+ if (apiResult.Data != null)
+ {
+ PagingList = apiResult.Data;
+ }
+ }
+ else if (apiResult.Code == 403)
+ {
+ ModalService.Error(new ConfirmOptions() { Title = "权限不足", Content = apiResult.Message });
+ }
+
+ StateHasChanged();
+ }
+ finally
+ {
+ pageLoading = false;
+ }
+ }
+
+ void OnSearchReset()
+ {
+ search = new CurrencySearchModel();
+ searchForm?.Reset();
+ }
+
+ private void OnSearch(int page)
+ {
+ var queryString = search.BuildQueryString();
+ if (string.IsNullOrEmpty(queryString))
+ {
+ if (page > 1)
+ {
+ Navigation.NavigateTo($"/currency/list?page={page}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/currency/list");
+ }
+ }
+ else
+ {
+ if (page > 1)
+ {
+ Navigation.NavigateTo($"/currency/list?page={page}&{queryString}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/currency/list?{queryString}");
+ }
+ }
+ }
+
+ void OnSearchFinish()
+ {
+ Page = Page.GetValueOrDefault(1) - 1;
+
+ OnSearch(Page.Value);
+ }
+
+ private void OnPageChanged(PaginationEventArgs args)
+ {
+ OnSearch(args.Page);
+ }
+
+ void HandleAddNew()
+ {
+ Navigation.NavigateTo($"/currency/edit");
+ }
+
+
+ void HandleEdit(CurrencyModel model)
+ {
+ Navigation.NavigateTo($"/currency/edit/{model.Id}");
+ }
+
+ }
\ No newline at end of file
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionEdit.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionEdit.razor
new file mode 100644
index 0000000..5fecb5a
--- /dev/null
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionEdit.razor
@@ -0,0 +1,152 @@
+@page "/system/app/version/create"
+@page "/system/app/version/edit/{id:long}"
+@page "/{locale}/system/app/version/create"
+@page "/{locale}/system/app/version/edit/{id:long}"
+
+@inject ILogger Logger
+@attribute [Authorize]
+
+
+
+
+ 管理后台
+ 系统功能
+ 版本管理
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ [Parameter]
+ public string Locale { get; set; } = string.Empty;
+
+ [Parameter]
+ public long Id { get; set; }
+
+ [SupplyParameterFromForm]
+ AppVersionModel model { get; set; } = new();
+ Form editform = null!;
+ bool pageLoading = false;
+
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+ }
+
+ protected override void OnParametersSet()
+ {
+ if (Id > 0)
+ {
+ LoadData();
+ }
+ base.OnParametersSet();
+ }
+
+ async void LoadData()
+ {
+ pageLoading = true;
+ var url = $"/api/appversion/{Id}";
+ var apiResult = await HttpService.Get>(url);
+ if (apiResult.Success)
+ {
+ if (apiResult.Data == null)
+ {
+ Navigation.NavigateTo($"/system/app/version/create");
+ }
+ else
+ {
+ model = apiResult.Data.Adapt();
+ }
+ }
+ else
+ {
+ Navigation.NavigateTo($"/system/app/version/create");
+ }
+
+ pageLoading = false;
+ StateHasChanged();
+ }
+
+ async void OnFormFinishAsync()
+ {
+ if (editform.Validate())
+ {
+
+ var result = new ApiResult();
+ if (model.Id > 0)
+ {
+ var url = $"api/appversion/edit";
+ result = await HttpService.Post>(url, model);
+ }
+ else
+ {
+ var url = $"api/appversion/add";
+ result = await HttpService.Post>(url, model);
+ }
+
+ if (result.Code == (int)ResultCode.Success)
+ {
+ await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" });
+ Navigation.NavigateTo($"/system/app/version/list");
+ }
+ else
+ {
+ await ModalService.ErrorAsync(new ConfirmOptions() { Title = "服务异常", Content = result.Message });
+ }
+ }
+ }
+
+}
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionList.razor
index 13d47f9..ad8f5d1 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionList.razor
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/AppVersionList.razor
@@ -17,19 +17,19 @@