/// <summary> /// 获取用户可访问的菜单 /// </summary> /// <returns></returns> static async Task <List <long> > GetAllUserMenus() { int cnt = AtState.GetScalar <int>("select count(*) from DataVersion where id='menu'"); if (cnt == 0) { // 查询服务端 Dict dt = await AtCm.GetMenus(Kit.UserID); // 记录版本号 var ver = new DataVersion(ID: "menu", Ver: dt.Str("ver")); await AtState.Save(ver, false); // 清空旧数据 AtState.Exec("delete from UserMenu"); // 插入新数据 var ls = (List <long>)dt["result"]; if (ls != null && ls.Count > 0) { List <Dict> dts = new List <Dict>(); foreach (var id in ls) { dts.Add(new Dict { { "id", id } }); } AtState.BatchExec("insert into UserMenu (id) values (:id)", dts); } return(ls); } return(AtState.FirstCol <long>("select id from UserMenu")); }
async void OnLocalSave(object sender, Mi e) { if (await AtState.Save((ClientLog)_fv1.Data, false)) { _fv1.AcceptChanges(); Kit.Msg("本地库保存成功!"); } else { Kit.Msg("本地库保存失败!"); } }
/// <summary> /// 接收服务器推送的聊天信息 /// </summary> /// <param name="p_letter"></param> internal static async void ReceiveLetter(LetterInfo p_letter) { if (p_letter == null || string.IsNullOrEmpty(p_letter.ID)) { return; } // 撤回消息 if (p_letter.LetterType == LetterType.Undo) { var letter = AtState.First <Letter>("select * from Letter where MsgID=@msgid and LoginID=@loginid and IsReceived=1", new Dict { { "msgid", p_letter.ID }, { "loginid", Kit.UserID } }); if (letter != null) { // 删除 AtState.Exec($"delete from Letter where ID={letter.ID}"); UndoLetter?.Invoke(letter); } return; } // 新消息 Letter l = new Letter( LoginID: Kit.UserID, MsgID: p_letter.ID, OtherID: p_letter.SenderID, OtherName: p_letter.SenderName, LetterType: p_letter.LetterType, Content: p_letter.Content, STime: p_letter.SendTime, IsReceived: true, Unread: true); // 自增主键插入后自动赋值 await AtState.Save(l, false); // 外部可修改 Unread 状态 NewLetter?.Invoke(l); if (l.Unread) { // 外部未读提示 StateChanged?.Invoke(l.OtherID); ShowUnreadNotify(l); } else { // Unread状态被修改 await AtState.Save(l, false); } }
/// <summary> /// 保存当前布局 /// </summary> public void SaveCurrentLayout() { // 宽度小时不保存 if (!AllowSaveLayout()) { return; } Kit.RunAsync(() => { DockLayout cookie = new DockLayout(_owner.BaseUri.AbsolutePath, WriteXml()); AtState.Save(cookie, false); _owner.AllowResetLayout = true; }); }
async void SaveCookie(string p_text) { _lastText = p_text; // 删除重复 AtState.Exec($"delete from SearchFvHis where BaseUri='{_baseUri}' and Content='{p_text}'"); SearchFvHis his = new SearchFvHis(BaseUri: _baseUri, Content: p_text); await AtState.Save(his, false); using (Items.Defer()) { RemoveAllHis(); LoadHisItems(); } }
/// <summary> /// 发送聊天信息 /// </summary> /// <param name="p_recvID"></param> /// <param name="p_recvName"></param> /// <param name="p_content"></param> /// <param name="p_type"></param> /// <returns></returns> public static async Task <Letter> SendLetter( long p_recvID, string p_recvName, string p_content, LetterType p_type) { Throw.IfNullOrEmpty(p_content); LetterInfo li = new LetterInfo { ID = Kit.NewGuid, SenderID = Kit.UserID, SenderName = Kit.UserName, LetterType = p_type, Content = p_content, SendTime = Kit.Now }; bool isOnline = await AtMsg.SendLetter(p_recvID, li); // 本地记录 Letter l = new Letter( LoginID: Kit.UserID, MsgID: li.ID, OtherID: p_recvID, OtherName: p_recvName, OtherIsOnline: isOnline, IsReceived: false, Unread: false, LetterType: p_type, Content: p_content, STime: li.SendTime); // 自增主键插入后自动赋值 await AtState.Save(l, false); NewLetter?.Invoke(l); return(l); }
void OnOpenedFile(object sender, FileItem e) { if (!_fileMgr.Setting.SaveHistory) { return; } Kit.RunAsync(async() => { // 记录到本地已读文件目录 var row = ((LvItem)e.DataContext).Row; var his = AtState.First <ReadFileHistory>("select * from ReadFileHistory where ID=@id", new { id = row.ID }); if (his == null) { his = new ReadFileHistory(ID: row.ID, Info: row.Str("info")); } his.LastReadTime = Kit.Now; if (await AtState.Save(his, false)) { _fileMgr.Setting.OnOpenedFile?.Invoke(); } }); }
/// <summary> /// 附加值改变时的处理方法,提供外部自定义显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnDataPropertyChanged(object sender, PropertyChangedEventArgs e) { ICell cell = (ICell)sender; if (e.PropertyName == "Val") { OnValChanged(); if (!AutoCookie || string.IsNullOrEmpty(Owner.Name)) { return; } // 记录单元格最近一次编辑值 Kit.RunAsync(() => { string id = string.Format("{0}+{1}+{2}", BaseUri.AbsolutePath, Owner.Name, ID); object val = cell.Val; if (val == null || string.IsNullOrEmpty(val.ToString())) { // 为空时删除记录,避免造成不一致情况 AtState.Exec($"delete from CellLastVal where id=\"{id}\""); } else { CellLastVal cookie = new CellLastVal(id, val.ToString()); _ = AtState.Save(cookie, false); } }); } else if (e.PropertyName == "IsChanged") { if (_panel != null) { _panel.ToggleIsChanged(cell.IsChanged); } } }