XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

STHApplication

【MAUI】寄当家——安卓端交易管理系统

公开
关注 0 Fork 0 Star 0
UTF-8
namespace JiDangJia.Views;

public sealed class SearchChoiceInput : ContentView
{
    private readonly Dictionary<string,string> options;
    private readonly Button button;
    private readonly string title;
    public string Value {get;private set;}
    public event Action? Changed;
    public SearchChoiceInput(string title,Dictionary<string,string> options,string value)
    {
        this.title=title;this.options=options;Value=value;
        button=Ui.Button("",async()=>
        {
            var navigation=Application.Current!.Windows[0].Page!.Navigation;
            await navigation.PushAsync(new SelectionPage(title,options,Value,SetValue));
        },false);
        button.FontAttributes=FontAttributes.None;button.FontSize=14;Content=button;Refresh();
    }
    public void SetValue(string value) {Value=value;Refresh();Changed?.Invoke();}
    public void Refresh() => button.Text=options.GetValueOrDefault(Value,"点击搜索并选择客户")+"  ⌕";
}

public sealed class SelectionPage : ContentPage
{
    private readonly Entry search=new(){Placeholder="搜索姓名 / 电话 / 客户编号",ClearButtonVisibility=ClearButtonVisibility.WhileEditing,ReturnType=ReturnType.Search};
    private readonly VerticalStackLayout list=Ui.Stack();
    private readonly Dictionary<string,string> options;
    private readonly string selected;
    private readonly Action<string> choose;
    private readonly bool inventory;
    private int limit=50;
    public SelectionPage(string title,Dictionary<string,string> options,string selected,Action<string> choose,bool inventory=false)
    {
        Title=title;this.options=options;this.selected=selected;this.choose=choose;this.inventory=inventory;
        if(inventory)search.Placeholder="搜索物品名称 / 编码 / 序列号";
        var body=Ui.Stack(Ui.Card(search,12,new Thickness(12,0),Ui.Paper),list);body.Padding=18;Content=new ScrollView{Content=body};
        search.TextChanged+=(_,_)=>{limit=50;Load();};Load();
    }
    private void Load()
    {
        list.Clear();var query=(search.Text??"").Trim();
        var rows=options.Where(p=>query.Length==0||p.Value.Contains(query,StringComparison.OrdinalIgnoreCase)).ToList();
        list.Add(Ui.Text(rows.Count+(inventory?" 件可出租物品":" 位客户 / 供应商"),12,Ui.Muted));
        foreach(var pair in rows.Take(limit))
        {
            var key=pair.Key;var text=Ui.Text(pair.Value,14);text.LineBreakMode=LineBreakMode.WordWrap;
            list.Add(Ui.Tap(Ui.Card(Ui.Spread(text,Ui.Text(key==selected?"✓":"选择",12,Ui.Bronze))),async()=>{choose(key);await Navigation.PopAsync();},(inventory?"选择物品 ":"选择客户 ")+pair.Value));
        }
        if(rows.Count==0)list.Add(Ui.Empty(inventory?"未找到物品":"未找到客户",inventory?"试试其他名称、编码或序列号":"试试其他姓名、电话或客户编号"));
        if(rows.Count>limit)list.Add(Ui.Button("加载更多",()=>{limit+=50;Load();return Task.CompletedTask;},false));
    }
}