You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
6.0 KiB
165 lines
6.0 KiB
using System;
|
|
using System.Threading.Tasks;
|
|
using AIK.Common.Language;
|
|
using AIK.Models.ApiModels.Membership;
|
|
using AIK.Service.IService;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
|
|
namespace AIK.ViewModels.Membership
|
|
{
|
|
public partial class MembershipOpenViewModel : ObservableObject
|
|
{
|
|
private readonly IMembershipService _membershipService;
|
|
private readonly IDataCacheService _dataCacheService;
|
|
private readonly IUserSessionCoordinator _userSessionCoordinator;
|
|
private readonly ILogger<MembershipOpenViewModel> _logger;
|
|
|
|
public MembershipOpenViewModel(
|
|
IMembershipService membershipService,
|
|
IDataCacheService dataCacheService,
|
|
IUserSessionCoordinator userSessionCoordinator,
|
|
ILogger<MembershipOpenViewModel> logger)
|
|
{
|
|
_membershipService = membershipService;
|
|
_dataCacheService = dataCacheService;
|
|
_userSessionCoordinator = userSessionCoordinator;
|
|
_logger = logger;
|
|
}
|
|
|
|
public ObservableCollection<MembershipOpenItem> Modules { get; } = new();
|
|
|
|
[ObservableProperty]
|
|
private bool _isBusy;
|
|
|
|
[ObservableProperty]
|
|
private string _statusMessage = string.Empty;
|
|
|
|
public string WindowTitle => AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpenWindowTitle") ?? string.Empty;
|
|
|
|
public string FeeStandardText => AiKLanguage.LanguageKey.GetValueOrDefault("MembershipFeeStandard") ?? string.Empty;
|
|
|
|
public string IntegralPerYearText => AiKLanguage.LanguageKey.GetValueOrDefault("MembershipIntegralPerYear") ?? string.Empty;
|
|
|
|
public string OpenButtonText => AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpenButton") ?? string.Empty;
|
|
|
|
[RelayCommand]
|
|
public async Task LoadModulesAsync()
|
|
{
|
|
IsBusy = true;
|
|
StatusMessage = string.Empty;
|
|
|
|
try
|
|
{
|
|
var modules = await _membershipService.GetModuleListAsync("key");
|
|
SetModules(modules.Select(ToOpenItem).Where(item => item != null).Cast<MembershipOpenItem>());
|
|
|
|
if (Modules.Count == 0)
|
|
{
|
|
SetModules(GetDefaultModules());
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "加载会员功能列表失败");
|
|
SetModules(GetDefaultModules());
|
|
StatusMessage = AiKLanguage.LanguageKey.GetValueOrDefault("MembershipLoadFailedFallback") ?? string.Empty;
|
|
}
|
|
finally
|
|
{
|
|
IsBusy = false;
|
|
}
|
|
}
|
|
|
|
[RelayCommand]
|
|
public async Task OpenModuleAsync(MembershipOpenItem? module)
|
|
{
|
|
if (module == null || module.IsOpening)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var token = await _dataCacheService.GetLatestUserTokenAsync();
|
|
if (string.IsNullOrWhiteSpace(token))
|
|
{
|
|
StatusMessage = AiKLanguage.LanguageKey.GetValueOrDefault("MembershipLoginRequired") ?? string.Empty;
|
|
return;
|
|
}
|
|
|
|
module.IsOpening = true;
|
|
IsBusy = true;
|
|
StatusMessage = AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpening") ?? string.Empty;
|
|
|
|
try
|
|
{
|
|
var response = await _membershipService.OpenFunctionAsync(token, new OpenMembershipRequest
|
|
{
|
|
FuncCode = module.Code,
|
|
SerNo = null
|
|
});
|
|
|
|
if (response.Code == 1)
|
|
{
|
|
var successSuffix = AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpenSuccess") ?? string.Empty;
|
|
StatusMessage = string.IsNullOrWhiteSpace(module.Name) ? successSuffix : $"{module.Name}{successSuffix}";
|
|
await _userSessionCoordinator.RefreshIntegralAsync();
|
|
return;
|
|
}
|
|
|
|
StatusMessage = response.I18nMsg
|
|
?? response.Msg
|
|
?? AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpenFailed")
|
|
?? string.Empty;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "开通会员功能失败:{Code}", module.Code);
|
|
StatusMessage = AiKLanguage.LanguageKey.GetValueOrDefault("MembershipOpenFailed") ?? string.Empty;
|
|
}
|
|
finally
|
|
{
|
|
module.IsOpening = false;
|
|
IsBusy = false;
|
|
}
|
|
}
|
|
|
|
private void SetModules(IEnumerable<MembershipOpenItem> modules)
|
|
{
|
|
Modules.Clear();
|
|
foreach (var module in modules)
|
|
{
|
|
Modules.Add(module);
|
|
}
|
|
}
|
|
|
|
private static MembershipOpenItem? ToOpenItem(MembershipModule module)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(module.Code) || string.IsNullOrWhiteSpace(module.Name))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return new MembershipOpenItem(module.Code, module.Name, module.Num);
|
|
}
|
|
|
|
private static IEnumerable<MembershipOpenItem> GetDefaultModules()
|
|
{
|
|
yield return new MembershipOpenItem(
|
|
"data_write_start",
|
|
AiKLanguage.LanguageKey.GetValueOrDefault("MembershipModuleDataWriteStart") ?? "数据写启动",
|
|
25000);
|
|
yield return new MembershipOpenItem(
|
|
"k3_genie_plus",
|
|
AiKLanguage.LanguageKey.GetValueOrDefault("MembershipModuleK3GeniePlus") ?? "K3精灵+",
|
|
25000);
|
|
yield return new MembershipOpenItem(
|
|
"ai",
|
|
AiKLanguage.LanguageKey.GetValueOrDefault("MembershipModuleAiIntelligent") ?? "AI智能功能",
|
|
30000);
|
|
}
|
|
}
|
|
}
|
|
|