From ff3cfcf62632bf43e51a6b6098c203bf0f5cddbc Mon Sep 17 00:00:00 2001 From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local> Date: 星期二, 24 十二月 2019 19:53:29 +0800 Subject: [PATCH] 2019.12.24 --- ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs | 362 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 250 insertions(+), 112 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs index 7b118ad..7197147 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs @@ -14,7 +14,11 @@ /// <summary> /// 鍒楄〃鎺т欢 /// </summary> - private VerticalFrameControl listView = null; + private VerticalFrameRefreshControl listView = null; + /// <summary> + /// 鍏ㄩ儴鐨勮 + /// </summary> + private Dictionary<string, RowLayoutControl> dicAllRow = null; #endregion @@ -28,40 +32,51 @@ //璁剧疆澶撮儴淇℃伅 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uMessageCenter)); - listView = new VerticalFrameControl(35); - listView.Height = bodyFrameLayout.Height; - bodyFrameLayout.AddChidren(listView); - //鍒濆鍖栧彸涓婅鑿滃崟 this.InitTopRightMenu(); + listView = new VerticalFrameRefreshControl(35); + listView.Height = bodyFrameLayout.Height; + bodyFrameLayout.AddChidren(listView); + listView.BeginHeaderRefreshingAction += () => + { + HdlThreadLogic.Current.RunThread(() => + { + //鍒濆鍖栦腑閮ㄤ俊鎭� + this.InitMiddleData(false); + }); + }; + HdlThreadLogic.Current.RunThread(() => { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + //鍒濆鍖栦腑閮ㄤ俊鎭� - this.InitMiddleData(); + this.InitMiddleData(true); }); } /// <summary> /// 鍒濆鍖栦腑閮ㄤ俊鎭� /// </summary> - private async void InitMiddleData() + private async void InitMiddleData(bool showReload) { - //鎵撳紑杩涘害鏉� - this.ShowProgressBar(); - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, ""); - if (result == null) + //鑾峰彇鏁版嵁 + var dicData = await this.GetMessageData(); + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(dicData == null && showReload == true ? ShowReLoadMode.YES : ShowReLoadMode.NO); + + HdlThreadLogic.Current.RunMain(() => { - //鍏抽棴杩涘害鏉� - this.CloseProgressBar(ShowReLoadMode.YES); + //鍏抽棴鍒锋柊鐗规晥 + listView?.EndHeaderRefreshing(); + }); + if (dicData == null) + { + //鏁版嵁寮傚父 return; } - var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MessageRecordInfo>>(result); - //鍚堝苟鏁版嵁 - var dicData = this.MergeMessageRecordData(dataInfo); - //鍏抽棴杩涘害鏉� - this.CloseProgressBar(); - HdlThreadLogic.Current.RunMain(() => { //鍒濆鍖栦腑閮ㄦ帶浠� @@ -75,36 +90,45 @@ /// <param name="dicData"></param> private void InitMiddleFrame(Dictionary<string, List<MessageRecordInfo>> dicData) { + //娓呯┖ + listView.RemoveAll(); + + int index = 0; foreach (var keys in dicData.Keys) { var listData = dicData[keys]; - HdlThreadLogic.Current.RunMain(() => + index++; + //瀹瑰櫒 + var framBack = new FrameListControl(23); + framBack.Name = index.ToString(); + framBack.Height = Application.GetRealHeight(100); + framBack.BackgroundColor = UserCenterColor.Current.White; + listView.AddChidrenFrame(framBack); + + //鏃ユ湡 + 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++) { - //瀹瑰櫒 - 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); - } - }); + //娣诲姞淇℃伅琛� + this.AddMsgRowControl(framBack, listData[i], i != listData.Count - 1); + } + //璋冩暣楂樺害 + listView.AdjustChidrenFrameHeight(framBack, Application.GetRealHeight(23)); + if (index == dicData.Count) + { + listView.AdjustTableHeight(); + } } } @@ -138,10 +162,14 @@ //鍏ㄩ儴宸茶 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllRead), () => { + //璁剧疆鍏ㄩ儴涓哄凡璇� + this.SetAllTickIsRead(); }); //鍏ㄩ儴鍒犻櫎 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllDelete), () => { + //鍒犻櫎鍏ㄩ儴鐨勬秷鎭� + this.DeleteAllMsg(); }); } @@ -159,14 +187,16 @@ { var rowControl = new RowLayoutControl(frameList.rowSpace / 2); frameList.AddChidren(rowControl); - + rowControl.Name = frameList.ChildrenCount.ToString(); + rowControl.MainKeys = recordInfo.Id; + this.dicAllRow[frameList.Name + "-" + rowControl.Name] = rowControl; //鍥炬爣(鐜板湪娴嬭瘯) var btnIcon = rowControl.frameTable.AddLeftIcon(81); - btnIcon.UnSelectedImagePath = "Item/Satety.png"; + btnIcon.UnSelectedImagePath = "Item/Safety.png"; //娑堟伅绫诲瀷 - var btnMsgObject = rowControl.frameTable.AddLeftCaption("娴嬭瘯:娑堟伅绫诲瀷", 600); + var btnMsgObject = rowControl.frameTable.AddLeftCaption("鎶ヨ娑堟伅", 600); PicViewControl btnNewTip = null; if (recordInfo.IsRead == 0) { @@ -180,7 +210,7 @@ //娑堟伅 var btnMsg = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 600, 60); btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3; - btnMsg.Y = Application.GetRealHeight(6) + rowControl.frameTable.chidrenYaxis; + btnMsg.Y = Application.GetRealHeight(5) + rowControl.frameTable.chidrenYaxis; rowControl.frameTable.AddChidren(btnMsg, ChidrenBindMode.BindEventOnly); //鏃堕棿 var btnTime = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 200, 50); @@ -207,15 +237,15 @@ btnDelete.ButtonClickEvent += (sender, e) => { //纭鍒犻櫎娑堟伅? - string msg = Language.StringByID(R.MyInternationalizationString.uDeleteRoomMsg); + string msg = Language.StringByID(R.MyInternationalizationString.uDeleteMessageMsg); this.ShowMassage(ShowMsgType.Confirm, msg, async () => { - await this.DeleteMsg(recordInfo.RegId, frameList, rowControl); + await this.DeleteMsg(recordInfo.Id, frameList, rowControl); }); }; //鐐瑰嚮 - rowControl.frameTable.ButtonClickEvent += (sender, e) => + rowControl.frameTable.ButtonClickEvent += async (sender, e) => { if (recordInfo.IsRead == 1) { @@ -228,8 +258,11 @@ //娑堟伅 btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1; btnNewTip.RemoveFromParent(); - //鏍囪宸茶(涓嶇瀹冩垚鍔熶笉鎴愬姛) - this.SetTickIsRead(recordInfo.RegId); + if (sender != null) + { + //鏍囪宸茶(涓嶇瀹冩垚鍔熶笉鎴愬姛) + await this.SetTickIsRead(recordInfo.Id); + } }; } @@ -241,10 +274,59 @@ /// 鏍囪宸茶 /// </summary> /// <param name="strId"></param> - private async void SetTickIsRead(string strId) + private async System.Threading.Tasks.Task<bool> SetTickIsRead(string strId) { - var pra = new { Id = strId }; - //await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/TickIsRead", true, pra); + string strUrl = "ZigbeeUsers/TickIsRead?Id=" + strId; + + var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET"); + if (result == null) + { + return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/TickIsRead", null, null); + } + //浜戠鏄笉浼氳繑鍥炰笢瑗跨殑 + return true; + } + + /// <summary> + /// 璁剧疆鍏ㄩ儴涓哄凡璇� + /// </summary> + private void SetAllTickIsRead() + { + if (dicAllRow.Count == 0) + { + return; + } + //纭鏍囪鍏ㄩ儴娑堟伅涓哄凡璇�? + this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uUnTipAllMessageMsg), () => + { + HdlThreadLogic.Current.RunThread(async () => + { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + foreach (var contr in this.dicAllRow.Values) + { + //鏍囪瘑鍏ㄩ儴涓哄凡璇� + var result = await this.SetTickIsRead(contr.MainKeys); + if (result == false) + { + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + return; + } + } + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + + HdlThreadLogic.Current.RunMain(() => + { + //璁剧疆鍏ㄩ儴鐘舵�� + foreach (var contr in this.dicAllRow.Values) + { + contr.frameTable.ButtonClickEvent?.Invoke(null, null); + } + }); + }); + }); } #endregion @@ -259,19 +341,58 @@ /// <param name="rowContr"></param> private async System.Threading.Tasks.Task<bool> 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) + string strUrl = "ZigbeeUsers/DeletePushMessage?Id=" + strId; + + var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET"); + if (result == null) + { + return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/DeletePushMessage", null, null); + } + //浜戠鏄笉浼氳繑鍥炰笢瑗跨殑 + if (frameList != null) { HdlThreadLogic.Current.RunMain(() => { - rowContr.RemoveFromParent(); + //绉婚櫎缂撳瓨 + this.dicAllRow.Remove(frameList.Name + "-" + rowContr.Name); //璋冩暣鎺т欢浣嶇疆 - this.AdjustControlLocation(frameList); + this.AdjustControlLocation(frameList, rowContr); }); } - //return result; return true; + } + + /// <summary> + /// 鍒犻櫎鍏ㄩ儴鐨勬秷鎭� + /// </summary> + private void DeleteAllMsg() + { + if (dicAllRow.Count == 0) + { + return; + } + //纭鍒犻櫎鍏ㄩ儴娑堟伅? + this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uDeleteAllMessageMsg), () => + { + HdlThreadLogic.Current.RunThread(async () => + { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + foreach (var contr in this.dicAllRow.Values) + { + //鍒犻櫎鍏ㄩ儴娑堟伅 + var result = await this.DeleteMsg(contr.MainKeys, null, null); + if (result == false) + { + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + return; + } + } + //鍒濆鍖栦腑閮ㄤ俊鎭� + this.InitMiddleData(true); + }); + }); } #endregion @@ -282,25 +403,19 @@ /// 璋冩暣鎺т欢浣嶇疆 /// </summary> /// <param name="frameList"></param> - private void AdjustControlLocation(FrameListControl frameList) + private void AdjustControlLocation(FrameListControl frameList, RowLayoutControl removeRow) { - int nowHeight = frameList.Height; - int changedHeight = 0; - if (frameList.ChildrenCount <= 1) + int changedHeight = frameList.GetChildren(frameList.ChildrenCount - 1).Height; + if (frameList.ChildrenCount <= 2) { //宸茬粡鍒犲畬浜�,鍙墿涓嬫爣棰樻棩鏈熶簡 - frameList.RemoveFromParent(); - changedHeight = nowHeight; + changedHeight = frameList.Height; } - else - { - frameList.Height = frameList.GetChildren(frameList.ChildrenCount - 1).Bottom; - changedHeight = nowHeight - frameList.Height; - } + //鍏堣皟鏁村悇鑷鍣ㄧ殑Y杞村潗鏍� bool canChangedLoaction = false; - for (int i = 0; i < this.listView.ChildrenCount; i++) + for (int i = 0; i < this.listView.frameTable.ChildrenCount; i++) { - var myView = this.listView.GetChildren(i); + var myView = this.listView.frameTable.GetChildren(i); if (myView.Name == frameList.Name) { //瀹冧箣鍚庣殑鎺т欢鍏ㄩ儴寰�涓婄Щ鍔� @@ -312,11 +427,61 @@ myView.Y -= changedHeight; } } + //璋冩暣鐖跺鍣ㄥぇ灏� + this.listView.AdjustTableHeight(); + + + if (frameList.ChildrenCount <= 2) + { + //宸茬粡鍒犲畬浜�,鍙墿涓嬫爣棰樻棩鏈熶簡 + frameList.RemoveFromParent(); + } + else + { + //杩欎釜瀹瑰櫒閲岄潰琚Щ闄ょ殑琛岀殑涓嬮潰鐨勫叏閮ㄨ,寰�涓婄Щ鍔� + bool changedFlage = false; + for (int i = 0; i < frameList.ChildrenCount; i++) + { + var myView = frameList.GetChildren(i); + if (myView.Name == removeRow.Name) + { + //瀹冧箣鍚庣殑鎺т欢鍏ㄩ儴寰�涓婄Щ鍔� + changedFlage = true; + continue; + } + if (changedFlage == true) + { + myView.Y -= changedHeight; + } + } + //绉婚櫎鎸囧畾鐨勮 + removeRow.RemoveFromParent(); + //瀹瑰櫒澶у皬鍑忓皯 + frameList.Height -= changedHeight; + } } #endregion - #region 鈻� 鍚堝苟鏁版嵁___________________________ + #region 鈻� 鑾峰彇鏁版嵁___________________________ + + /// <summary> + /// 鑾峰彇娑堟伅璁板綍 + /// </summary> + /// <returns></returns> + private async System.Threading.Tasks.Task<Dictionary<string, List<MessageRecordInfo>>> GetMessageData() + { + this.dicAllRow = new Dictionary<string, RowLayoutControl>(); + + var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, ""); + if (result == null) + { + return null; + } + var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MessageRecordInfo>>(result); + //鍚堝苟鏁版嵁 + return this.MergeMessageRecordData(dataInfo); + } /// <summary> /// 鍚堝苟鏁版嵁 @@ -345,46 +510,19 @@ 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) + string[] myArry = data2.MsgTime.Split(new string[] { "T" }, StringSplitOptions.RemoveEmptyEntries); + if (myArry.Length != 2) { - dicData[myArry[1]] = new List<MessageRecordInfo>(); + continue; } - dicData[myArry[1]].Add(data2); + if (dicData.ContainsKey(myArry[0]) == false) + { + dicData[myArry[0]] = new List<MessageRecordInfo>(); + } + dicData[myArry[0]].Add(data2); } } return dicData; - } - - #endregion - - #region 鈻� 缁撴瀯浣揰____________________________ - - /// <summary> - /// 淇℃伅缁撴灉 - /// </summary> - private class MessageRecordInfo - { - /// <summary> - /// 涓婚敭 - /// </summary> - public string RegId = string.Empty; - /// <summary> - /// 娑堟伅鍐呭 - /// </summary> - public string MsgContent = string.Empty; - /// <summary> - /// MsgType - /// </summary> - public string MsgType = string.Empty; - /// <summary> - /// 鏄惁宸茶 - /// </summary> - public int IsRead = 0; - /// <summary> - /// 鏃堕棿 2019-09-10 13:11:55 - /// </summary> - public string MsgTime = string.Empty; } #endregion -- Gitblit v1.8.0