using JiDangJia.Contracts;
using JiDangJia.Core;
using JiDangJia.Services;
namespace JiDangJia.Views;
public sealed class CommunityMutePage : ContentPage
{
public CommunityMutePage(DbRow account)
{
Title="社群禁言设置";if(!AuthClient.Current.IsAdmin)throw new InvalidOperationException("需要管理员权限");
var days=new Entry{Text="7",Keyboard=Keyboard.Numeric,MaxLength=5};var permanent=new Switch{OnColor=Ui.Bronze};var reason=new Editor{Placeholder="填写禁言原因",Text=account.Text("communityBanReason"),MaxLength=500,AutoSize=EditorAutoSizeOption.TextChanges,MinimumHeightRequest=80};
var until=account.Text("communityBanUntil");string state=account.Int("communityBanned")==1?DateTimeOffset.TryParse(until,out var end)?"已禁言,截止 "+end.ToLocalTime().ToString("yyyy-MM-dd HH:mm"):"已永久禁言":"当前未禁言";
permanent.Toggled+=(_,e)=>days.IsEnabled=!e.Value;
var body=Ui.Stack(Ui.Card(Ui.Stack(Ui.Section(account.Text("name")),Ui.Text("@"+account.Text("username"),12,Ui.Muted),Ui.Text(state,13,Ui.Bronze),Ui.Text("禁言期间可浏览社群、接收消息和举报;不能发布、评论、发送私信或互换证照。独立记账应用不受影响。",13,Ui.Muted),Ui.Spread(Ui.Text("永久禁言"),permanent),Ui.Text("禁言天数(从保存时起按 24 小时计算)",12,Ui.Muted),days,reason,Ui.Button("保存禁言",async()=>
{
int? duration=null;if(!permanent.IsToggled){if(!int.TryParse(days.Text,out var number)||number is <1 or >36500)throw new ArgumentException("禁言天数请填写 1–36500");duration=number;}
using var result=await AuthClient.Current.AdminRequest("/accounts/"+account.Id+"/community-ban",new CommunityBanRequest(true,reason.Text??"",duration));await DisplayAlertAsync("已保存",duration.HasValue?"禁言到期后自动恢复发言。":"已设置永久禁言。","完成");await Navigation.PopAsync();
}),Ui.Button("解除禁言",async()=>{using var result=await AuthClient.Current.AdminRequest("/accounts/"+account.Id+"/community-ban",new CommunityBanRequest(false,""));await Navigation.PopAsync();},false))));body.Padding=18;Content=new ScrollView{Content=body};
}
}
using JiDangJia.Contracts;
using JiDangJia.Core;
using JiDangJia.Services;
namespace JiDangJia.Views;
public sealed class CommunityMutePage : ContentPage
{
public CommunityMutePage(DbRow account)
{
Title="社群禁言设置";if(!AuthClient.Current.IsAdmin)throw new InvalidOperationException("需要管理员权限");
var days=new Entry{Text="7",Keyboard=Keyboard.Numeric,MaxLength=5};var permanent=new Switch{OnColor=Ui.Bronze};var reason=new Editor{Placeholder="填写禁言原因",Text=account.Text("communityBanReason"),MaxLength=500,AutoSize=EditorAutoSizeOption.TextChanges,MinimumHeightRequest=80};
var until=account.Text("communityBanUntil");string state=account.Int("communityBanned")==1?DateTimeOffset.TryParse(until,out var end)?"已禁言,截止 "+end.ToLocalTime().ToString("yyyy-MM-dd HH:mm"):"已永久禁言":"当前未禁言";
permanent.Toggled+=(_,e)=>days.IsEnabled=!e.Value;
var body=Ui.Stack(Ui.Card(Ui.Stack(Ui.Section(account.Text("name")),Ui.Text("@"+account.Text("username"),12,Ui.Muted),Ui.Text(state,13,Ui.Bronze),Ui.Text("禁言期间可浏览社群、接收消息和举报;不能发布、评论、发送私信或互换证照。独立记账应用不受影响。",13,Ui.Muted),Ui.Spread(Ui.Text("永久禁言"),permanent),Ui.Text("禁言天数(从保存时起按 24 小时计算)",12,Ui.Muted),days,reason,Ui.Button("保存禁言",async()=>
{
int? duration=null;if(!permanent.IsToggled){if(!int.TryParse(days.Text,out var number)||number is <1 or >36500)throw new ArgumentException("禁言天数请填写 1–36500");duration=number;}
using var result=await AuthClient.Current.AdminRequest("/accounts/"+account.Id+"/community-ban",new CommunityBanRequest(true,reason.Text??"",duration));await DisplayAlertAsync("已保存",duration.HasValue?"禁言到期后自动恢复发言。":"已设置永久禁言。","完成");await Navigation.PopAsync();
}),Ui.Button("解除禁言",async()=>{using var result=await AuthClient.Current.AdminRequest("/accounts/"+account.Id+"/community-ban",new CommunityBanRequest(false,""));await Navigation.PopAsync();},false))));body.Padding=18;Content=new ScrollView{Content=body};
}
}