1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#region
 
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using CSFrameworkV5.Common;
using CSFrameworkV5.Core;
 
#endregion
 
namespace CSFrameworkV5.Library.CommonClass
{
    /// <summary>
    ///     快速命令处理程序
    /// </summary>
    public class CommandHandler
    {
        private static List<QuickCommand> _AllCommands = null;
 
        /// <summary>
        ///     系统定义的所有命令
        /// </summary>
        private static List<QuickCommand> AllCommands
        {
            get
            {
                if (_AllCommands == null)
                {
                    //模拟命令表(从数据库获取)
                    var dt = new DataTable("sys_Commands");
                    dt.Columns.Add("CommandCode",
                        typeof(string)); //命令,如:PO,PO1,PO2,SO,HELP,LK
                    dt.Columns.Add("CommandName",
                        typeof(string)); //命令名称,PO-打开采购订单
                    dt.Columns.Add("CommandType",
                        typeof(string)); //命令类型:OpenForm-打开窗体,Add,Search,Other
                    dt.Columns.Add("FormNamespace", typeof(string)); //窗体的命名空间
                    dt.Columns.Add("MenuName",
                        typeof(string)); //打开此窗体关联的菜单名称(模块主窗体内定义)
 
                    dt.Rows.Add("PO", "打开采购订单", "OpenForm",
                        "CSFrameworkV5.DemoPurchaseModule.frmPO", "menuItemPO");
                    dt.Rows.Add("PO1", "采购订单-新增", "Add",
                        "CSFrameworkV5.DemoPurchaseModule.frmPO", "menuItemPO");
                    dt.Rows.Add("PO2", "采购订单-搜索", "Search",
                        "CSFrameworkV5.DemoPurchaseModule.frmPO", "menuItemPO");
                    dt.Rows.Add("SO", "打开销售订单", "OpenForm",
                        "CSFrameworkV5.DemoSalesModule.frmSO",
                        "menuSalesOrder");
                    dt.Rows.Add("HELP", "打开帮助文档", "Other", "", "");
                    dt.Rows.Add("LK", "锁定主界面", "Other", "", "");
 
                    dt.AcceptChanges();
 
                    //将DataTable转换为对象列表
                    var list = new ModelConverter<QuickCommand>().FillModel(dt);
                    return list;
                }
 
                return _AllCommands;
            }
        }
 
        /// <summary>
        ///     执行命令
        /// </summary>
        /// <param name="instance">主窗体实例</param>
        /// <param name="cmdText">命令文本</param>
        /// <returns></returns>
        public static object Execute(IMdiForm instance, string cmdText)
        {
            //匹配命令字符,返回对象实例
            var cmd = AllCommands.Find(delegate(QuickCommand p)
            {
                return p.Match(cmdText);
            });
 
            if (cmd == null)
                throw new Exception("无效的命令!参考:PO,PO1,PO2,SO,LK,HELP");
 
            //界面操作通用处理方法
            if (cmd.IsFormAction) return instance.OpenModuleForm(cmd);
 
            //锁定用户界面命令
            if (cmd.CommandCode == "LK")
                return frmLock.ExecuteLock(instance as Form);
 
            //打开帮助文档
            if (cmd.CommandCode == "HELP") HelpDoc.HelpAllFile(HelpDoc.CSHelp);
 
            //
            //其它命令
            //
            return null;
        }
    }
 
    /// <summary>
    ///     命令类型
    /// </summary>
    public enum QuickCommandType
    {
        OpenForm,
        Add,
        Search,
        Other
    }
 
    /// <summary>
    ///     命令对象
    /// </summary>
    public class QuickCommand
    {
        public string Action { get; set; }
        public string CommandCode { get; set; }
 
        public string CommandName { get; set; }
 
        public string CommandType { get; set; }
 
        public string FormNamespace { get; set; }
 
        public bool IsFormAction =>
            CommandType == QuickCommandType.OpenForm.ToStringEx()
            || CommandType == QuickCommandType.Search.ToStringEx()
            || CommandType == QuickCommandType.Add.ToStringEx();
 
        public string MenuName { get; set; }
 
        public virtual object Execute(object sender)
        {
            return null;
        }
 
        public bool Match(string cmdText)
        {
            return CommandCode.ToLower() == cmdText.ToLower();
        }
    }
}