Beispiel #1
0
        /// <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"));
        }
Beispiel #2
0
 async void OnLocalSave(object sender, Mi e)
 {
     if (await AtState.Save((ClientLog)_fv1.Data, false))
     {
         _fv1.AcceptChanges();
         Kit.Msg("本地库保存成功!");
     }
     else
     {
         Kit.Msg("本地库保存失败!");
     }
 }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <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;
            });
        }
Beispiel #5
0
        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();
            }
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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();
                }
            });
        }
Beispiel #8
0
        /// <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);
                }
            }
        }