兼容win7版应用
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

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);
}
}
}