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