using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter.UserMain
{
///
/// 消息中心
///
public class MessageManagementForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 列表控件
///
private VerticalFrameControl listView = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
public void ShowForm()
{
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uMessageCenter));
listView = new VerticalFrameControl(35);
listView.Height = bodyFrameLayout.Height;
bodyFrameLayout.AddChidren(listView);
//初始化右上角菜单
this.InitTopRightMenu();
HdlThreadLogic.Current.RunThread(() =>
{
//初始化中部信息
this.InitMiddleData();
});
}
///
/// 初始化中部信息
///
private async void InitMiddleData()
{
//打开进度条
this.ShowProgressBar();
var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, "");
if (result == null)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return;
}
var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject>(result);
//合并数据
var dicData = this.MergeMessageRecordData(dataInfo);
//关闭进度条
this.CloseProgressBar();
HdlThreadLogic.Current.RunMain(() =>
{
//初始化中部控件
this.InitMiddleFrame(dicData);
});
}
///
/// 初始化中部控件
///
///
private void InitMiddleFrame(Dictionary> dicData)
{
foreach (var keys in dicData.Keys)
{
var listData = dicData[keys];
HdlThreadLogic.Current.RunMain(() =>
{
//容器
var framBack = new FrameListControl(23);
framBack.Name = keys;
framBack.Height = Application.GetRealHeight(100);
framBack.BackgroundColor = UserCenterColor.Current.White;
//日期
string strMonth = Language.StringByID(R.MyInternationalizationString.Month);
string strDate = Language.StringByID(R.MyInternationalizationString.Day);
var frameDate = new FrameLayout();
frameDate.Height = Application.GetRealHeight(118);
framBack.AddChidren(frameDate);
var btnDate = new NormalViewControl(500, 60, true);
btnDate.TextSize = 15;
btnDate.X = ControlCommonResourse.XXLeft;
btnDate.Y = Application.GetRealHeight(35);
btnDate.Text = Convert.ToDateTime(listData[0].MsgTime).ToString("MM" + strMonth + "dd" + strDate);
frameDate.AddChidren(btnDate);
for (int i = 0; i < listData.Count; i++)
{
//添加信息行
this.AddMsgRowControl(framBack, listData[i], i != listData.Count - 1);
}
});
}
}
#endregion
#region ■ 右上角菜单_________________________
///
/// 初始化右上角菜单
///
private void InitTopRightMenu()
{
var btnIcon = new MostRightIconControl(69, 69);
btnIcon.UnSelectedImagePath = "Item/More.png";
topFrameLayout.AddChidren(btnIcon);
btnIcon.InitControl();
btnIcon.ButtonClickEvent += ((sender, e) =>
{
//显示底部菜单界面
this.ShowBottomMenu();
});
}
///
/// 显示底部菜单界面
///
private void ShowBottomMenu()
{
var menuContr = new BottomMenuSelectForm();
menuContr.AddForm(2);
//全部已读
menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllRead), () =>
{
});
//全部删除
menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllDelete), () =>
{
});
}
#endregion
#region ■ 添加信息行_________________________
///
/// 添加信息行
///
///
///
///
private void AddMsgRowControl(FrameListControl frameList, MessageRecordInfo recordInfo, bool addLine)
{
var rowControl = new RowLayoutControl(frameList.rowSpace / 2);
frameList.AddChidren(rowControl);
//图标(现在测试)
var btnIcon = rowControl.frameTable.AddLeftIcon(81);
btnIcon.UnSelectedImagePath = "Item/Satety.png";
//消息类型
var btnMsgObject = rowControl.frameTable.AddLeftCaption("测试:消息类型", 600);
PicViewControl btnNewTip = null;
if (recordInfo.IsRead == 0)
{
btnNewTip = new PicViewControl(78, 55);
btnNewTip.UnSelectedImagePath = "Item/NewVersion.png";
btnNewTip.Y = Application.GetRealHeight(9) + rowControl.frameTable.chidrenYaxis;
btnNewTip.X = btnMsgObject.X + btnMsgObject.GetRealWidthByText(14);
rowControl.frameTable.AddChidren(btnNewTip, ChidrenBindMode.BindEventOnly);
}
//消息
var btnMsg = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 600, 60);
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
btnMsg.Y = Application.GetRealHeight(6) + rowControl.frameTable.chidrenYaxis;
rowControl.frameTable.AddChidren(btnMsg, ChidrenBindMode.BindEventOnly);
//时间
var btnTime = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 200, 50);
btnTime.TextColor = UserCenterColor.Current.TextGrayColor1;
btnTime.Y = btnMsg.Bottom + Application.GetRealHeight(12);
btnTime.Text = Convert.ToDateTime(recordInfo.MsgTime).ToString("HH:mm");
rowControl.frameTable.AddChidren(btnTime, ChidrenBindMode.BindEventOnly);
//底线
if (addLine == true)
{
rowControl.frameTable.AddBottomLine();
}
//已读
if (recordInfo.IsRead == 1)
{
rowControl.frameTable.UseClickStatu = false;
//消息类型
btnMsgObject.TextColor = UserCenterColor.Current.TextGrayColor1;
//消息
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
}
//删除
var btnDelete = rowControl.AddDeleteControl();
btnDelete.ButtonClickEvent += (sender, e) =>
{
//确认删除消息?
string msg = Language.StringByID(R.MyInternationalizationString.uDeleteRoomMsg);
this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
{
await this.DeleteMsg(recordInfo.RegId, frameList, rowControl);
});
};
//点击
rowControl.frameTable.ButtonClickEvent += (sender, e) =>
{
if (recordInfo.IsRead == 1)
{
return;
}
recordInfo.IsRead = 1;
rowControl.frameTable.UseClickStatu = false;
//消息类型
btnMsgObject.TextColor = UserCenterColor.Current.TextGrayColor1;
//消息
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
btnNewTip.RemoveFromParent();
//标记已读(不管它成功不成功)
this.SetTickIsRead(recordInfo.RegId);
};
}
#endregion
#region ■ 标记已读___________________________
///
/// 标记已读
///
///
private async void SetTickIsRead(string strId)
{
var pra = new { Id = strId };
//await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/TickIsRead", true, pra);
}
#endregion
#region ■ 删除信息___________________________
///
/// 删除信息
///
///
///
///
private async System.Threading.Tasks.Task DeleteMsg(string strId, FrameListControl frameList, RowLayoutControl rowContr)
{
var pra = new { Id = strId };
//var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/DeletePushMessage", true, pra);
//if (result == true && frameList != null)
{
HdlThreadLogic.Current.RunMain(() =>
{
rowContr.RemoveFromParent();
//调整控件位置
this.AdjustControlLocation(frameList);
});
}
//return result;
return true;
}
#endregion
#region ■ 调整控件位置_______________________
///
/// 调整控件位置
///
///
private void AdjustControlLocation(FrameListControl frameList)
{
int nowHeight = frameList.Height;
int changedHeight = 0;
if (frameList.ChildrenCount <= 1)
{
//已经删完了,只剩下标题日期了
frameList.RemoveFromParent();
changedHeight = nowHeight;
}
else
{
frameList.Height = frameList.GetChildren(frameList.ChildrenCount - 1).Bottom;
changedHeight = nowHeight - frameList.Height;
}
bool canChangedLoaction = false;
for (int i = 0; i < this.listView.ChildrenCount; i++)
{
var myView = this.listView.GetChildren(i);
if (myView.Name == frameList.Name)
{
//它之后的控件全部往上移动
canChangedLoaction = true;
continue;
}
if (canChangedLoaction == true)
{
myView.Y -= changedHeight;
}
}
}
#endregion
#region ■ 合并数据___________________________
///
/// 合并数据
///
///
///
private Dictionary> MergeMessageRecordData(List dataInfo)
{
var dicData = new Dictionary>();
//首先先排序一下,时间大的放在前面
var dicTemp = new Dictionary>();
var listSortKeys = new List();
foreach (var data in dataInfo)
{
if (dicTemp.ContainsKey(data.MsgTime) == false)
{
dicTemp[data.MsgTime] = new List();
listSortKeys.Add(data.MsgTime);
}
dicTemp[data.MsgTime].Add(data);
}
listSortKeys.Sort();
for (int i = listSortKeys.Count - 1; i >= 0; i--)
{
var listData = dicTemp[listSortKeys[i]];
foreach (var data2 in listData)
{
string[] myArry = data2.MsgTime.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if (dicData.ContainsKey(myArry[1]) == false)
{
dicData[myArry[1]] = new List();
}
dicData[myArry[1]].Add(data2);
}
}
return dicData;
}
#endregion
#region ■ 结构体_____________________________
///
/// 信息结果
///
private class MessageRecordInfo
{
///
/// 主键
///
public string RegId = string.Empty;
///
/// 消息内容
///
public string MsgContent = string.Empty;
///
/// MsgType
///
public string MsgType = string.Empty;
///
/// 是否已读
///
public int IsRead = 0;
///
/// 时间 2019-09-10 13:11:55
///
public string MsgTime = string.Empty;
}
#endregion
}
}