1
0
mirror of https://github.com/wangdage12/Snap.Hutao.git synced 2026-07-31 04:10:25 +08:00

材料统计右键反推

This commit is contained in:
mfkvfhpdx
2026-05-03 20:53:22 +08:00
parent dead0166a1
commit a988a65190
5 changed files with 23 additions and 23 deletions
@@ -2435,9 +2435,6 @@ Space Available: {2}</value>
<data name="ViewPageCultivationMaterialStatistics" xml:space="preserve"> <data name="ViewPageCultivationMaterialStatistics" xml:space="preserve">
<value>Material Statistics</value> <value>Material Statistics</value>
</data> </data>
<data name="ViewPageCultivationStatisticsUnfinishedConsumers" xml:space="preserve">
<value>Unfinished: {0}</value>
</data>
<data name="ViewPageCultivationStatisticsUnfinishedConsumersEmptyList" xml:space="preserve"> <data name="ViewPageCultivationStatisticsUnfinishedConsumersEmptyList" xml:space="preserve">
<value>No unchecked entries</value> <value>No unchecked entries</value>
</data> </data>
@@ -2486,9 +2486,6 @@
<data name="ViewPageCultivationMaterialStatistics" xml:space="preserve"> <data name="ViewPageCultivationMaterialStatistics" xml:space="preserve">
<value>材料统计</value> <value>材料统计</value>
</data> </data>
<data name="ViewPageCultivationStatisticsUnfinishedConsumers" xml:space="preserve">
<value>未完成:{0}</value>
</data>
<data name="ViewPageCultivationStatisticsUnfinishedConsumersEmptyList" xml:space="preserve"> <data name="ViewPageCultivationStatisticsUnfinishedConsumersEmptyList" xml:space="preserve">
<value>无未勾选条目</value> <value>无未勾选条目</value>
</data> </data>
@@ -15,7 +15,6 @@ using Snap.Hutao.Service.Metadata.ContextAbstraction;
using Snap.Hutao.ViewModel.Cultivation; using Snap.Hutao.ViewModel.Cultivation;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
@@ -135,7 +134,7 @@ internal sealed partial class CultivationService : ICultivationService
} }
CultivationStatisticsSurplusMerge.Apply(resultItems, context, mergeOptions); CultivationStatisticsSurplusMerge.Apply(resultItems, context, mergeOptions);
ApplyStatisticsConsumerMenuText(resultItems, projectId, context, cultivationRepository); ApplyStatisticsConsumerMenuLines(resultItems, projectId, context, cultivationRepository);
return new(resultItems); return new(resultItems);
} }
@@ -312,7 +311,7 @@ internal sealed partial class CultivationService : ICultivationService
} }
} }
private static void ApplyStatisticsConsumerMenuText( private static void ApplyStatisticsConsumerMenuLines(
Dictionary<uint, StatisticsCultivateItem> resultItems, Dictionary<uint, StatisticsCultivateItem> resultItems,
Guid projectId, Guid projectId,
ICultivationMetadataContext context, ICultivationMetadataContext context,
@@ -339,24 +338,18 @@ internal sealed partial class CultivationService : ICultivationService
{ {
if (MaterialIds.IsExcludedFromStatisticsConsumerMenu(materialId)) if (MaterialIds.IsExcludedFromStatisticsConsumerMenu(materialId))
{ {
stat.StatisticsConsumerMenuText = SH.ViewPageCultivationStatisticsConsumerMenuExcluded; stat.StatisticsConsumerMenuLines = ImmutableArray.Create(SH.ViewPageCultivationStatisticsConsumerMenuExcluded);
continue; continue;
} }
if (unfinishedSegmentsByMaterial.TryGetValue(materialId, out List<string>? segments)) if (unfinishedSegmentsByMaterial.TryGetValue(materialId, out List<string>? segments))
{ {
segments.Sort(StringComparer.Ordinal); segments.Sort(StringComparer.Ordinal);
stat.StatisticsConsumerMenuText = string.Format( stat.StatisticsConsumerMenuLines = ImmutableArray.CreateRange(segments);
CultureInfo.CurrentCulture,
SH.ViewPageCultivationStatisticsUnfinishedConsumers,
string.Join('', segments));
} }
else else
{ {
stat.StatisticsConsumerMenuText = string.Format( stat.StatisticsConsumerMenuLines = ImmutableArray.Create(SH.ViewPageCultivationStatisticsUnfinishedConsumersEmptyList);
CultureInfo.CurrentCulture,
SH.ViewPageCultivationStatisticsUnfinishedConsumers,
SH.ViewPageCultivationStatisticsUnfinishedConsumersEmptyList);
} }
} }
} }
@@ -229,9 +229,21 @@
<DataTemplate x:Key="StatisticsItemTemplate" x:DataType="shvcu:StatisticsCultivateItem"> <DataTemplate x:Key="StatisticsItemTemplate" x:DataType="shvcu:StatisticsCultivateItem">
<Border Background="Transparent" IsRightTapEnabled="True"> <Border Background="Transparent" IsRightTapEnabled="True">
<Border.ContextFlyout> <Border.ContextFlyout>
<MenuFlyout> <Flyout FlyoutPresenterStyle="{ThemeResource FlyoutPresenterPadding0Style}">
<MenuFlyoutItem IsEnabled="False" MaxWidth="360" Text="{Binding StatisticsConsumerMenuText, Mode=OneWay}"/> <ScrollViewer MaxHeight="320" MinWidth="220" Padding="12,10">
</MenuFlyout> <ItemsControl ItemsSource="{Binding StatisticsConsumerMenuLines, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="x:String">
<TextBlock
Margin="0,3"
Style="{ThemeResource BodyTextBlockStyle}"
Text="{x:Bind Mode=OneWay}"
TextWrapping="WrapWholeWords"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Flyout>
</Border.ContextFlyout> </Border.ContextFlyout>
<shuxcc:HorizontalCard Background="{Binding IsToday, Converter={ThemeResource BoolToStatisticsBrushSelector}}"> <shuxcc:HorizontalCard Background="{Binding IsToday, Converter={ThemeResource BoolToStatisticsBrushSelector}}">
<shuxcc:HorizontalCard.Left> <shuxcc:HorizontalCard.Left>
@@ -2,6 +2,7 @@
// Licensed under the MIT license. // Licensed under the MIT license.
using Snap.Hutao.Model.Metadata.Item; using Snap.Hutao.Model.Metadata.Item;
using System.Collections.Immutable;
namespace Snap.Hutao.ViewModel.Cultivation; namespace Snap.Hutao.ViewModel.Cultivation;
@@ -67,9 +68,9 @@ internal sealed class StatisticsCultivateItem
public bool IsToday { get => Inner.IsItemOfToday(offset, true); } public bool IsToday { get => Inner.IsItemOfToday(offset, true); }
/// <summary> /// <summary>
/// 材料统计右键菜单中展示的「未完成」养成条目说明(含需求量)。 /// 材料统计右键浮层中按行展示的「未完成」养成条目(每人一行,<c>名×数量</c>)。
/// </summary> /// </summary>
public string StatisticsConsumerMenuText { get; set; } = string.Empty; public ImmutableArray<string> StatisticsConsumerMenuLines { get; set; }
internal bool ExcludedFromPresentation { get; set; } internal bool ExcludedFromPresentation { get; set; }