From f63d8ead25bdb3c32dacca817a059bd30390e9bc Mon Sep 17 00:00:00 2001
From: yzh <snbbt@21cn.com>
Date: 星期三, 15 六月 2022 22:20:07 +0800
Subject: [PATCH] 1.系统账户数据库优化:   修改“账户类型”的数据类型为VARCHAR2(1024),多个角色时以半角“,”分隔。   加密盐。 密码加密优化;账户登录优化;角色权限管理(作废用户权限); 2.字典类型管理(定义:用户角色) 3.字典数据管理(初始化用户角色数据) 3.角色权限管理 4.系统账户管理,账户类型对应用户角色(可多选)。

---
 web/web/SysDictData.aspx.cs    |    2 
 web/Model/Model/SysDictData.cs |    2 
 web/web/Bin/Common.dll         |    0 
 web/web/GwMoRoute.aspx.cs      |    2 
 web/Model/Model/SysRoleMenu.cs |   13 
 web/Model/Model.csproj         |    1 
 web/web/Bin/Common.pdb         |    0 
 web/web/GwDm.ashx              |    2 
 web/Model/Model/SysUser.cs     |    3 
 web/web/GwClient.aspx.cs       |   29 
 web/web/GwStatisRefund.aspx.cs |    2 
 web/web/SysUser.aspx.cs        |   48 +
 web/Dao/SysRoleMenuDao.cs      |  242 +++++++++
 web/Lib/Dao.dll                |    0 
 web/Dao/SysDictDataDao.cs      |   10 
 web/web/GwClient.ashx          |    2 
 web/web/SysRoleMenu.aspx.cs    |   83 +++
 web/web/GwClient.aspx          |    4 
 web/Lib/Dao.pdb                |    0 
 web/web/Bin/Dao.dll            |    0 
 web/web/GwStatisV3.ashx        |    2 
 web/web/GwStatisProfit.aspx.cs |    2 
 web/web/SysRoleMenu.aspx       |  351 ++++++++++++++
 web/web/gwspupdate.aspx.cs     |    2 
 web/Dao/Dao.csproj             |    1 
 web/web/SysDictData.aspx       |    4 
 web/web/GwOrderCreate.aspx.cs  |    2 
 web/Lib/Model.dll              |    0 
 web/web/GwOrder.ashx           |    2 
 web/web/SysDictData.ashx       |   52 +
 web/web/Bin/Dao.pdb            |    0 
 web/web/GwProductClasses.aspx  |  285 +++++++++++
 web/web/SysDictType.aspx.cs    |    2 
 web/Lib/Common.dll             |    0 
 web/web/ExportDocument.aspx.cs |    2 
 web/Lib/Model.pdb              |    0 
 web/web/GwSp.ashx              |    2 
 web/Dao/GwClientDao.cs         |   34 
 web/web/Index.aspx             |    1 
 web/Lib/Common.pdb             |    0 
 web/web/GwSm.ashx              |    2 
 web/web/SysUser.aspx           |   47 +
 web/web/Bin/Model.pdb          |    0 
 web/Dao/UserDao.cs             |   98 +++
 web/Dao/GwDiverterDao.cs       |   38 
 web/web/GwStatis.aspx.cs       |    2 
 web/web/SysUser.ashx           |   36 +
 web/web/Bin/Model.dll          |    0 
 web/web/GwStatisV3.aspx.cs     |    2 
 web/Common/DataConverter.cs    |   80 +++
 50 files changed, 1,399 insertions(+), 95 deletions(-)

diff --git a/web/Common/DataConverter.cs b/web/Common/DataConverter.cs
index 5b9bf15..652c45d 100644
--- a/web/Common/DataConverter.cs
+++ b/web/Common/DataConverter.cs
@@ -1,8 +1,10 @@
 锘縩amespace Common
 {
     using System;
+    using System.Collections.Generic;
     using System.Runtime.InteropServices;
     using System.Text.RegularExpressions;
+    using System.Linq;
 
     public class DataConverter
     {
@@ -196,6 +198,84 @@
             return random;
         }
 
+        //瀛楃涓茶浆鏁扮粍
+        public static object[] stringToArray(string str)
+        {
+            object[] array = str.Split(',');
+            return array;
+        }
+
+        //鏁扮粍杞瓧绗︿覆
+        public static string arrayToString(object[] array)
+        {
+            if (array == null)
+                return "";
+            string str = string.Join(",", array);
+            return str;
+        }
+
+        //鏁扮粍杞崲List锛歴tring[] str ={ "str","string","abc"}杞� List<string>
+        public static List<object> arrayToList(object[] array)
+        {
+            List<object> list = new List<object>(array);
+
+            return list;
+        }
+
+        //List杞崲鏁扮粍锛歀ist<string>杞埌string[]
+        public static object[] listToArray(List<object> list)
+        {
+            object[] array = list.ToArray();
+
+            return array;
+        }
+
+        //瀛楃涓茶浆List
+        public static List<object> stringToList(string str)
+        {
+            if (string.IsNullOrEmpty(str))
+                return null;
+
+            List<object> list = new List<object>();
+            //瀛楃涓茶浆鏁扮粍锛屽啀鏁扮粍鍚堝苟
+            list.AddRange(str.Split(','));
+
+            return list;
+        }
+
+        //鏁扮粍鍘婚噸锛岀Щ闄ゆ暟缁勪腑閲嶅鏁版嵁
+        public static string[] DelRepeatData(string[] array)
+        {
+            return array.GroupBy(p => p).Select(p => p.Key).ToArray();
+        }
+
+        //妫�鏌ユ暟缁勬牸寮忓瓧绗︿覆涓槸鍚﹀寘鍚煇鍏冪礌
+        public static bool checkStrForArrayStr(object str, string arrayStr )
+        {
+            return stringToArray(arrayStr).Contains(str);
+        }
+
+        //妫�鏌ユ暟缁勪腑鏄惁鍖呭惈鏌愬厓绱�
+        public static bool checkStrForArray(object str, object[] array)
+        {
+            return array.Contains(str);
+        }
+
+        //鏍规嵁鏁扮粍瀛楃涓茶浆鎹㈠瓧鍏�
+        public Dictionary<string, object> arrayStrToDict(object userId, string arrayStr)
+        {
+            Dictionary<string, object> dictionary = new Dictionary<string, object>();
+            if (string.IsNullOrEmpty(arrayStr))
+                return dictionary;
+
+            List<object> list = DataConverter.stringToList(arrayStr);
+            for (int i = 0; i < list.Count; i++)
+            {
+                dictionary[userId.ToString()] = list[i];
+            }
+            return dictionary;
+        }
+
     }
 
 }
diff --git a/web/Dao/Dao.csproj b/web/Dao/Dao.csproj
index 86360a6..861f64e 100644
--- a/web/Dao/Dao.csproj
+++ b/web/Dao/Dao.csproj
@@ -80,6 +80,7 @@
     <Compile Include="GwMoRouteDao.cs" />
     <Compile Include="GwOrderAuditDao.cs" />
     <Compile Include="GwOrderDao.cs" />
+    <Compile Include="SysRoleMenuDao.cs" />
     <Compile Include="SysDictDataDao.cs" />
     <Compile Include="SysDictTypeDao.cs" />
     <Compile Include="GwProductDao.cs" />
diff --git a/web/Dao/GwClientDao.cs b/web/Dao/GwClientDao.cs
index c1d1699..a8de674 100644
--- a/web/Dao/GwClientDao.cs
+++ b/web/Dao/GwClientDao.cs
@@ -596,8 +596,8 @@
 
                 list = new List<KeyValuePair<string, OracleParameter[]>>();
                 list.Add(new KeyValuePair<string, OracleParameter[]>(key2, oracleParameterArray2));
-                OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
             }
+            OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
 
 
             //鏇存柊涓�у垎閰嶅鎴烽泦闀垮害涓�0鏃�
@@ -612,18 +612,18 @@
 
                 list = new List<KeyValuePair<string, OracleParameter[]>>();
                 list.Add(new KeyValuePair<string, OracleParameter[]>(key3, oracleParameterArray2));
-                OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
             }
+            OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
         }
 
 
         /**
          * 鍑芥暟鎻忚堪锛� 鏍规嵁绯荤粺鐢ㄦ埛鑾峰彇鏈夋潈闄愬鎴�
          * userId: 鐢ㄦ埛ID
-         * userType: 鐢ㄦ埛绫诲瀷锛�1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
+         * userType: 鐢ㄦ埛绫诲瀷锛屽涓椂浠モ��,鈥濆垎闅旓細1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
          * return: SQL瀛楃涓�
          * */
-        public string GetClientPermissions(int userId, int userType, string alias)
+        public string GetClientPermissions(int userId, string userType, string alias)
         {
             if (!string.IsNullOrEmpty(alias))
             {
@@ -631,17 +631,18 @@
             }
 
             string sqlStr = "";
-            //涓氬姟鍛樺拰鍏朵粬
-            if(userType==2 || userType == 99)
+            //涓氬姟鍛�
+            if(DataConverter.checkStrForArrayStr(2, userType))
             {
                 sqlStr  += " AND " + alias + "CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 AND (SALESMAN='" + userId + "' ) ) ";
             }
-            //涓氬姟涓荤
-            else if (userType == 3)
+            //瀹㈡埛缁忕悊
+            else if (DataConverter.checkStrForArrayStr(3, userType) )
             {
                 sqlStr += " AND " + alias + "CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 AND (SALESMAN='" + userId + "' or CUSTOMER_MANAGER='" + userId + "' ) ) ";
             }
-            else
+            //绠$悊鍛�
+            else if (DataConverter.checkStrForArrayStr(1, userType))
             {
                 //sqlStr += " AND CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 ) ";
             }
@@ -652,10 +653,10 @@
         /**
          * 鍑芥暟鎻忚堪锛� 鏍规嵁绯荤粺鐢ㄦ埛鑾峰彇鏈夋潈闄愬鎴疯处鍙�
          * userId: 鐢ㄦ埛ID
-         * userType: 鐢ㄦ埛绫诲瀷锛�1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
+         * userType: 鐢ㄦ埛绫诲瀷锛屽涓椂浠モ��,鈥濆垎闅旓細1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
          * return: SQL瀛楃涓�
          * */
-        public string GetSpPermissions(int userId, int userType, string alias)
+        public string GetSpPermissions(int userId, string userType, string alias)
         {
             if (!string.IsNullOrEmpty(alias))
             {
@@ -663,17 +664,18 @@
             }
 
             string sqlStr = "";
-            //涓氬姟鍛樺拰鍏朵粬
-            if (userType == 2 || userType == 99)
+            //涓氬姟鍛�
+            if (DataConverter.checkStrForArrayStr(2, userType))
             {
                 sqlStr += " AND " + alias + "SP_ID IN (SELECT SP_ID from GW_SP where DEL_FLAG = 0 and CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 AND (SALESMAN='" + userId + "' ) ) ) ";
             }
-            //涓氬姟涓荤
-            else if (userType == 3)
+            //瀹㈡埛缁忕悊
+            else if (DataConverter.checkStrForArrayStr(3, userType))
             {
                 sqlStr += " AND " + alias + "SP_ID IN (SELECT SP_ID from GW_SP where DEL_FLAG = 0 and CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 AND (SALESMAN='" + userId + "' or CUSTOMER_MANAGER='" + userId + "' ) ) ) ";
             }
-            else
+            //绠$悊鍛�
+            else if (DataConverter.checkStrForArrayStr(1, userType))
             {
                 //sqlStr += " AND CLIENT_ID IN (SELECT CLIENT_ID FROM GW_CLIENT WHERE IS_ENABLE=1 ) ";
             }
diff --git a/web/Dao/GwDiverterDao.cs b/web/Dao/GwDiverterDao.cs
index f0e3b31..a1862b0 100644
--- a/web/Dao/GwDiverterDao.cs
+++ b/web/Dao/GwDiverterDao.cs
@@ -153,25 +153,25 @@
             foreach (GwDiverterItem gwDiverterItem in items)
             {
                 OracleParameter[] oracleParameterArray2 = new OracleParameter[17]
-        {
-          new OracleParameter(":DIVERTER_ID", (object) diverter.DiverterID),
-          new OracleParameter(":CM_OP_ID", (object) gwDiverterItem.CMOPID),
-          new OracleParameter(":CU_OP_ID", (object) gwDiverterItem.CUOPID),
-          new OracleParameter(":CT_OP_ID", (object) gwDiverterItem.CTOPID),
-          new OracleParameter(":CM_EXT_NO", (object) gwDiverterItem.CMExtNo),
-          new OracleParameter(":CU_EXT_NO", (object) gwDiverterItem.CUExtNo),
-          new OracleParameter(":CT_EXT_NO", (object) gwDiverterItem.CTExtNo),
-          new OracleParameter(":CM_EXT_PARAMS", (object) gwDiverterItem.CMExtParams),
-          new OracleParameter(":CU_EXT_PARAMS", (object) gwDiverterItem.CUExtParams),
-          new OracleParameter(":CT_EXT_PARAMS", (object) gwDiverterItem.CTExtParams),
-          new OracleParameter(":DMODE", (object) gwDiverterItem.Mode),
-          new OracleParameter(":SM_MIN_LENGTH", (object) gwDiverterItem.SmMinLength),
-          new OracleParameter(":SM_MAX_LENGTH", (object) gwDiverterItem.SmMaxLength),
-          new OracleParameter(":SEGMENTS", (object) gwDiverterItem.Segments),
-          new OracleParameter(":KEYWORDS", (object) gwDiverterItem.Keywords),
-          new OracleParameter(":PROVINCE", (object) gwDiverterItem.Province),
-          new OracleParameter(":EXTNO_MODE", (object) gwDiverterItem.ExtNoMode)
-        };
+                {
+                  new OracleParameter(":DIVERTER_ID", (object) diverter.DiverterID),
+                  new OracleParameter(":CM_OP_ID", (object) gwDiverterItem.CMOPID),
+                  new OracleParameter(":CU_OP_ID", (object) gwDiverterItem.CUOPID),
+                  new OracleParameter(":CT_OP_ID", (object) gwDiverterItem.CTOPID),
+                  new OracleParameter(":CM_EXT_NO", (object) gwDiverterItem.CMExtNo),
+                  new OracleParameter(":CU_EXT_NO", (object) gwDiverterItem.CUExtNo),
+                  new OracleParameter(":CT_EXT_NO", (object) gwDiverterItem.CTExtNo),
+                  new OracleParameter(":CM_EXT_PARAMS", (object) gwDiverterItem.CMExtParams),
+                  new OracleParameter(":CU_EXT_PARAMS", (object) gwDiverterItem.CUExtParams),
+                  new OracleParameter(":CT_EXT_PARAMS", (object) gwDiverterItem.CTExtParams),
+                  new OracleParameter(":DMODE", (object) gwDiverterItem.Mode),
+                  new OracleParameter(":SM_MIN_LENGTH", (object) gwDiverterItem.SmMinLength),
+                  new OracleParameter(":SM_MAX_LENGTH", (object) gwDiverterItem.SmMaxLength),
+                  new OracleParameter(":SEGMENTS", (object) gwDiverterItem.Segments),
+                  new OracleParameter(":KEYWORDS", (object) gwDiverterItem.Keywords),
+                  new OracleParameter(":PROVINCE", (object) gwDiverterItem.Province),
+                  new OracleParameter(":EXTNO_MODE", (object) gwDiverterItem.ExtNoMode)
+                };
                 list.Add(new KeyValuePair<string, OracleParameter[]>(key2, oracleParameterArray2));
             }
             OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
diff --git a/web/Dao/SysDictDataDao.cs b/web/Dao/SysDictDataDao.cs
index 343d34f..0451a85 100644
--- a/web/Dao/SysDictDataDao.cs
+++ b/web/Dao/SysDictDataDao.cs
@@ -100,6 +100,15 @@
                     builder.Append(" and DICT_TYPE = '" + bean.DictType + "'");
                 }
 
+                if (bean.ParanSource == -1)
+                {
+                    builder.Append(" AND (PARAN_SOURCE != " + bean.ParanSource + " OR PARAN_SOURCE IS NULL) ");
+                }
+                else
+                {
+                    builder.Append(" AND PARAN_SOURCE = " + bean.ParanSource + " ");
+                }
+
                 if (bean.Status == -1)
                 {
                     builder.Append(" AND (STATUS != " + bean.Status + " OR STATUS IS NULL) ");
@@ -279,6 +288,7 @@
             o.DictLabel = oracleReaderWrapper.GetString("DICT_LABEL", "");
             o.DictType = oracleReaderWrapper.GetString("DICT_TYPE", "");
             o.DictSort = oracleReaderWrapper.GetInt("DICT_SORT", 1);
+            o.ParanSource = oracleReaderWrapper.GetInt("PARAN_SOURCE", 1);
             o.DelFlag = oracleReaderWrapper.GetInt("DEL_FLAG", 0);
             o.Status = oracleReaderWrapper.GetInt("STATUS", 0);
             o.CreateBy = oracleReaderWrapper.GetString("CREATE_BY", "");
diff --git a/web/Dao/SysRoleMenuDao.cs b/web/Dao/SysRoleMenuDao.cs
new file mode 100644
index 0000000..670f473
--- /dev/null
+++ b/web/Dao/SysRoleMenuDao.cs
@@ -0,0 +1,242 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Model;
+using Common;
+using Oracle.DataAccess.Client;
+using System.Data.Common;
+
+namespace Dao
+{
+    /// <summary>
+    /// 瑙掕壊鑿滃崟鏉冮檺鎿嶄綔
+    /// </summary>
+    public class SysRoleMenuDao : IDisposable
+    {
+        public void Dispose()
+        {
+        }
+
+        private static SysRoleMenuDao _instance;
+        public static SysRoleMenuDao Instance
+        {
+            get {
+                if (_instance == null)
+                {
+                    _instance = new SysRoleMenuDao();
+                }
+                return _instance;
+            }
+        }
+
+
+        public List<SysRoleMenu> LoadInfoList(string roleId, int menuId, int pageSize, int PageIndex, out int recordcount)
+        {
+            
+            List<SysRoleMenu> list = new List<SysRoleMenu>();
+            recordcount = 0;
+            try
+            {
+                StringBuilder builder = new StringBuilder();
+                builder.Append("from SYS_ROLE_MENU where 1=1 ");
+                if (!string.IsNullOrEmpty(roleId))
+                {
+                    builder.Append(" and ROLE_ID = '" + roleId + "'");
+                }
+
+                if (menuId == -1)
+                {
+                    builder.Append(" AND (MENU_ID != " + menuId + " OR MENU_ID IS NULL) ");
+                }
+                else
+                {
+                    builder.Append(" AND MENU_ID = " + menuId + " ");
+                }
+                using (OracleDataReader reader = OracleHelper.ExecuteReader("select count(*) as count " + builder.ToString(), OracleHelper.Connection))
+                {
+                    while (reader.Read())
+                    {
+                        recordcount = this.ReadCount(reader);
+                    }
+                }
+                using (OracleDataReader reader2 = OracleHelper.ExecuteReader(PubConstant.doOracleSql(PageIndex, pageSize, recordcount, "select * " + builder.ToString()).ToString() + " order by DICT_TYPE, DICT_SORT ", OracleHelper.Connection ))
+                {
+                    while (reader2.Read())
+                    {
+                        SysRoleMenu o = new SysRoleMenu();
+                        if (this.ReadInfo(reader2, o))
+                        {
+                            list.Add(o);
+                        }
+                    }
+                }
+            }
+            catch (Exception exception)
+            {
+                LogHelper.Error(exception);
+                return list;
+            }
+            return list;
+
+        }
+
+        //鏍规嵁鏉′欢鑾峰彇鏁版嵁鍒楄〃
+        public List<SysRoleMenu> getAllList(SysRoleMenu bean)
+        {
+
+            List<SysRoleMenu> list = new List<SysRoleMenu>();
+            try
+            {
+                StringBuilder builder = new StringBuilder();
+                builder.Append("from SYS_ROLE_MENU where 1=1 ");
+                if (!string.IsNullOrEmpty(bean.RoleId))
+                {
+                    builder.Append(" and ROLE_ID = '" + bean.RoleId + "'");
+                }
+
+                if (bean.MenuId == -1)
+                {
+                    builder.Append(" AND (MENU_ID != " + bean.MenuId + " OR MENU_ID IS NULL) ");
+                }
+                else
+                {
+                    builder.Append(" AND MENU_ID = " + bean.MenuId + " ");
+                }
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader("select * " + builder.ToString() + " ", OracleHelper.Connection))
+                {
+                    while (reader.Read())
+                    {
+                        SysRoleMenu o = new SysRoleMenu();
+                        if (this.ReadInfo(reader, o))
+                        {
+                            list.Add(o);
+                        }
+                    }
+                }
+            }
+            catch (Exception exception)
+            {
+                LogHelper.Error(exception);
+                return list;
+            }
+            return list;
+
+        }
+
+        //娣诲姞淇℃伅
+        public bool Add(SysRoleMenu o)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("INSERT INTO SYS_ROLE_MENU ( ROLE_ID, MENU_ID ) ");
+            stringBuilder.Append(" VALUES (:ROLE_ID, :MENU_ID ) ");
+
+            string sql = stringBuilder.ToString();
+
+            return OracleHelper.ExecuteSql(sql, 
+                OracleHelper.Connection,
+                new OracleParameter(":ROLE_ID", (object)o.RoleId),
+                new OracleParameter(":MENU_ID", (object)o.MenuId)
+                ) > 0;
+        }
+
+        //鍒犻櫎
+        public bool Delete(SysRoleMenu o)
+        {
+            return OracleHelper.ExecuteSql("delete from SYS_ROLE_MENU where ROLE_ID=:ROLE_ID AND MENU_ID=:MENU_ID", OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)o.RoleId), new OracleParameter(":MENU_ID", (object)o.MenuId)) > 0;
+            
+        }
+
+        //鑾峰彇淇℃伅
+        public SysRoleMenu Get(string roleId, int menuId)
+        {
+            SysRoleMenu o = new SysRoleMenu();
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from SYS_ROLE_MENU where ROLE_ID=:ROLE_ID AND MENU_ID=:MENU_ID"), OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)roleId), new OracleParameter(":MENU_ID", (object)menuId) ) )
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        //鑾峰彇瑙掕壊鏉冮檺鍒楄〃
+        public Dictionary<string, SysMenu> LoadRoleMenuList(string roleId)
+        {
+            StringBuilder builder = new StringBuilder();
+            builder.Append("SELECT sm.* FROM SYS_MENU sm ");
+            builder.Append(" LEFT JOIN SYS_ROLE_MENU srm ON srm.MENU_ID = sm.MENU_ID ");
+            builder.Append(" WHERE srm.ROLE_ID=:ROLE_ID  ");
+
+            Dictionary<string, SysMenu> dictionary = new Dictionary<string, SysMenu>();
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(builder.ToString(), OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)roleId)))
+            {
+                while (reader != null && ((DbDataReader)reader).Read())
+                {
+                    OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+                    string menuID = oracleReaderWrapper.GetString("MENU_ID", "");
+                    string menuName = oracleReaderWrapper.GetString("MENU_NAME", "");
+                    string remark = oracleReaderWrapper.GetString("REMARK", "");
+                    string parentID = oracleReaderWrapper.GetString("PARENT_ID", "");
+                    int menuLV = oracleReaderWrapper.GetInt("MENU_LV", 0);
+                    SysMenu sysMenu = new SysMenu();
+                    sysMenu.MenuID = menuID;
+                    sysMenu.MenuName = menuName;
+                    sysMenu.Remark = remark;
+                    sysMenu.ParentID = parentID;
+                    sysMenu.MenuLV = menuLV;
+
+                    dictionary[menuID] = sysMenu;
+                }
+            }
+            return dictionary;
+        }
+
+        //淇敼瑙掕壊鏉冮檺
+        public void UpdatePermission(string roleId, string[] menuIDArray)
+        {
+            List<KeyValuePair<string, OracleParameter[]>> list = new List<KeyValuePair<string, OracleParameter[]>>();
+            string key1 = " DELETE FROM SYS_ROLE_MENU WHERE ROLE_ID=:ROLE_ID ";
+            OracleParameter[] oracleParameterArray1 = new OracleParameter[1]
+              {
+                new OracleParameter(":ROLE_ID", (object) roleId)
+              };
+            list.Add(new KeyValuePair<string, OracleParameter[]>(key1, oracleParameterArray1));
+            OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
+            if (menuIDArray == null || menuIDArray.Length <= 0)
+                return;
+            string key2 = "INSERT INTO SYS_ROLE_MENU(ROLE_ID, MENU_ID) VALUES(:ROLE_ID,:MENU_ID)";
+            foreach (string menuId in menuIDArray)
+            {
+                OracleParameter[] oracleParameterArray2 = new OracleParameter[2]
+                {
+                  new OracleParameter(":ROLE_ID", (object) roleId),
+                  new OracleParameter(":MENU_ID", (object) menuId)
+                };
+                list.Add(new KeyValuePair<string, OracleParameter[]>(key2, oracleParameterArray2));
+            }
+            OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
+        }
+
+        //缁熻璁板綍鏁�
+        private int ReadCount(OracleDataReader reader)
+        {
+            OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
+            return wrapper.GetInt("count", 0);
+        }
+
+        //鏁版嵁灏佽
+        private bool ReadInfo(OracleDataReader reader, SysRoleMenu o)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            o.RoleId = oracleReaderWrapper.GetString("ROLE_ID", "");
+            o.MenuId = oracleReaderWrapper.GetInt("MENU_ID", 1);
+            return true;
+        }
+
+    }
+
+}
diff --git a/web/Dao/UserDao.cs b/web/Dao/UserDao.cs
index e339782..8ae5992 100644
--- a/web/Dao/UserDao.cs
+++ b/web/Dao/UserDao.cs
@@ -6,6 +6,7 @@
 using System.Collections.Generic;
 using System.Configuration;
 using System.Data.Common;
+using System.Text;
 
 namespace Dao
 {
@@ -23,7 +24,9 @@
                 if (!((DbDataReader)reader).Read() || !this.ReadInfo(reader, user))
                     return false;
             }
-            user.MenuIDList = this.LoadUserMenuList(user.UserID);
+            //浣滃簾鐢ㄦ埛鏉冮檺锛屾敼浣跨敤瑙掕壊鏉冮檺
+            //user.MenuIDList = this.LoadUserMenuList(user.UserID);
+            user.MenuIDList = this.LoadUserRoleMenuList(user.UserID);
             return true;
         }
 
@@ -48,6 +51,7 @@
             return list;
         }
 
+        //edit:yangzh by 20220615 宸蹭綔搴燂紙宸蹭娇鐢ㄧ敤鎴疯鑹插叧鑱旀潈闄�--LoadUserRoleMenuList(int userID) 锛�
         public Dictionary<string, SysUserMenu> LoadUserMenuList(int userID)
         {
             Dictionary<string, SysUserMenu> dictionary = new Dictionary<string, SysUserMenu>();
@@ -64,6 +68,66 @@
             return dictionary;
         }
 
+            public Dictionary<string, SysUserMenu> LoadUserRoleMenuList(int userID)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+
+            Dictionary<string, SysUserMenu> dictionary = new Dictionary<string, SysUserMenu>();
+            string userType = GetUserRoleByUserId(userID);
+            if (!string.IsNullOrEmpty(userType))
+            {
+                List<object> list = DataConverter.stringToList(userType);
+                if (list.Count > 0)
+                {
+                    stringBuilder.Append(" select sm.* from sys_menu sm ");
+                    stringBuilder.Append(" left join ( ");
+                    stringBuilder.Append(" select distinct * from ( ");
+                    stringBuilder.Append(" select * from sys_role_menu where role_id = " + list[0] + " ");
+
+                    for (int i = 1; i < list.Count; i++)
+                    {
+                        stringBuilder.Append(" union (select * from sys_role_menu where role_id = " + list[i] + ") ");
+
+                    }
+                    stringBuilder.Append(" ) bb ");
+                    stringBuilder.Append(" ) cc on cc.menu_id = sm.menu_id ");
+                    stringBuilder.Append(" where cc.menu_id is not null ");
+                    using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString(), OracleHelper.Connection))
+                    {
+                        while (reader != null && ((DbDataReader)reader).Read())
+                        {
+                            /**
+                            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+                            string menuID = oracleReaderWrapper.GetString("MENU_ID", "");
+                            string menuName = oracleReaderWrapper.GetString("MENU_NAME", "");
+                            string remark = oracleReaderWrapper.GetString("REMARK", "");
+                            string parentID = oracleReaderWrapper.GetString("PARENT_ID", "");
+                            int menuLV = oracleReaderWrapper.GetInt("MENU_LV", 0);
+                            SysMenu sysMenu = new SysMenu();
+                            sysMenu.MenuID = menuID;
+                            sysMenu.MenuName = menuName;
+                            sysMenu.Remark = remark;
+                            sysMenu.ParentID = parentID;
+                            sysMenu.MenuLV = menuLV;
+
+                            dictionary[menuID] = sysMenu;
+                            **/
+
+                            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+                            string string1 = oracleReaderWrapper.GetString("MENU_ID", "");
+                            //string string2 = oracleReaderWrapper.GetString("MENU_DATA", "");
+                            string string2 = "";
+
+                            dictionary[string1] = new SysUserMenu(string1, string2);
+
+                        }
+                    }
+                }
+
+            }
+            return dictionary;
+        }
+
         public List<SysMenu> LoadSysMenuList()
         {
             List<SysMenu> list = new List<SysMenu>();
@@ -75,7 +139,7 @@
             return list;
         }
 
-//鏂板姞鐧婚檰鏃ュ織
+        //鏂板姞鐧婚檰鏃ュ織
          public List<SysMenu> LoadSysMenuIDList(int menuid, int menulv)
     {
       List<SysMenu> list = new List<SysMenu>();
@@ -132,7 +196,7 @@
             e.Password = oracleReaderWrapper.GetString("PASSWORD", "");
             e.Salt = oracleReaderWrapper.GetString("SALT", "");
             e.UserName = oracleReaderWrapper.GetString("USER_NAME", "");
-            e.UserType = oracleReaderWrapper.GetInt("USER_TYPE", 1);
+            e.UserType = oracleReaderWrapper.GetString("USER_TYPE", "");
             e.ExpireTime = oracleReaderWrapper.GetDateTime("EXPIRE_TIME");
             e.CreateTime = oracleReaderWrapper.GetDateTime("CREATE_TIME");
             e.Remark = oracleReaderWrapper.GetString("REMARK", "");
@@ -167,8 +231,22 @@
                 if (reader != null && ((DbDataReader)reader).Read())
                     this.ReadInfo(reader, e);
             }
-            e.MenuIDList = this.LoadUserMenuList(userID);
+            //浣滃簾鐢ㄦ埛鏉冮檺锛屾敼浣跨敤瑙掕壊鏉冮檺
+            //e.MenuIDList = this.LoadUserMenuList(userID);
+            e.MenuIDList = this.LoadUserRoleMenuList(userID);
             return e;
+        }
+
+        //鏍规嵁璐︽埛ID鑾峰彇鐢ㄦ埛瑙掕壊闆�
+        public string GetUserRoleByUserId(int userID)
+        {
+            SysUser e = new SysUser();
+            using (OracleDataReader reader = OracleHelper.ExecuteReader("SELECT * FROM SYS_USER WHERE USER_ID=:USER_ID", OracleHelper.Connection, new OracleParameter("USER_ID", (object)userID)))
+            {
+                if (reader != null && ((DbDataReader)reader).Read())
+                    this.ReadInfo(reader, e);
+            }
+            return e.UserType;
         }
 
         public SysUser GetUser(string account)
@@ -266,14 +344,14 @@
             foreach (string str in menuIDArray)
             {
                 OracleParameter[] oracleParameterArray2 = new OracleParameter[3]
-        {
-          new OracleParameter(":USER_ID", (object) userid),
-          new OracleParameter(":MENU_ID", (object) str),
-          new OracleParameter(":MENU_DATA", (object) "")
-        };
+                {
+                  new OracleParameter(":USER_ID", (object) userid),
+                  new OracleParameter(":MENU_ID", (object) str),
+                  new OracleParameter(":MENU_DATA", (object) "")
+                };
                 list.Add(new KeyValuePair<string, OracleParameter[]>(key2, oracleParameterArray2));
-                OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
             }
+            OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
         }
 
         private int ReadCount(OracleDataReader reader)
diff --git a/web/Lib/Common.dll b/web/Lib/Common.dll
index 19116cd..f246c47 100644
--- a/web/Lib/Common.dll
+++ b/web/Lib/Common.dll
Binary files differ
diff --git a/web/Lib/Common.pdb b/web/Lib/Common.pdb
index a96091a..5690ec3 100644
--- a/web/Lib/Common.pdb
+++ b/web/Lib/Common.pdb
Binary files differ
diff --git a/web/Lib/Dao.dll b/web/Lib/Dao.dll
index 69e8ae3..19eb874 100644
--- a/web/Lib/Dao.dll
+++ b/web/Lib/Dao.dll
Binary files differ
diff --git a/web/Lib/Dao.pdb b/web/Lib/Dao.pdb
index 8f45c1e..2be4741 100644
--- a/web/Lib/Dao.pdb
+++ b/web/Lib/Dao.pdb
Binary files differ
diff --git a/web/Lib/Model.dll b/web/Lib/Model.dll
index 141ef2b..2ea70b8 100644
--- a/web/Lib/Model.dll
+++ b/web/Lib/Model.dll
Binary files differ
diff --git a/web/Lib/Model.pdb b/web/Lib/Model.pdb
index 432eea9..ddc6ae1 100644
--- a/web/Lib/Model.pdb
+++ b/web/Lib/Model.pdb
Binary files differ
diff --git a/web/Model/Model.csproj b/web/Model/Model.csproj
index 4692f68..f7cf775 100644
--- a/web/Model/Model.csproj
+++ b/web/Model/Model.csproj
@@ -70,6 +70,7 @@
     <Compile Include="Model\GwOpGroupItem.cs" />
     <Compile Include="Model\GwOrderAudit.cs" />
     <Compile Include="Model\SysDictData.cs" />
+    <Compile Include="Model\SysRoleMenu.cs" />
     <Compile Include="Model\SysDictType.cs" />
     <Compile Include="Model\SysFlowNode.cs" />
     <Compile Include="Model\SysFlow.cs" />
diff --git a/web/Model/Model/SysDictData.cs b/web/Model/Model/SysDictData.cs
index ffbc34b..ff742f6 100644
--- a/web/Model/Model/SysDictData.cs
+++ b/web/Model/Model/SysDictData.cs
@@ -16,6 +16,8 @@
 
         public int DictSort { get; set; } //瀛楀吀鎺掑簭
 
+        public int ParanSource { get; set; } //鏁版嵁鏉ユ簮锛�0-绯荤粺鍐呯疆锛�1-鐢ㄦ埛娣诲姞
+
         public int DelFlag { get; set; } //鐘舵�侊細0-鍋滅敤锛�1-姝e父
 
         public int Status { get; set; } //鐘舵�侊細0-鍋滅敤锛�1-姝e父
diff --git a/web/Model/Model/SysRoleMenu.cs b/web/Model/Model/SysRoleMenu.cs
new file mode 100644
index 0000000..7697877
--- /dev/null
+++ b/web/Model/Model/SysRoleMenu.cs
@@ -0,0 +1,13 @@
+锘� 
+using System;
+
+namespace Model
+{
+    //瑙掕壊鑿滃崟鏉冮檺琛�
+    public class SysRoleMenu
+  {
+        public string RoleId { get; set; }  //瑙掕壊ID
+
+        public int MenuId { get; set; } //鑿滃崟ID
+  }
+}
diff --git a/web/Model/Model/SysUser.cs b/web/Model/Model/SysUser.cs
index a09d921..9058685 100644
--- a/web/Model/Model/SysUser.cs
+++ b/web/Model/Model/SysUser.cs
@@ -42,7 +42,8 @@
 
         public int Status { get; set; }
 
-        public int UserType { get; set; }   //鐢ㄦ埛绫诲瀷:1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
+        //public int UserType { get; set; }   //鐢ㄦ埛绫诲瀷:1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
+        public string UserType { get; set; }    //鍏宠仈瀛楀吀鏁版嵁琛ㄧ殑绫诲瀷涓猴細USER_ROLE銆傚涓鑹叉椂浠ュ崐瑙掆��,鈥濆垎闅斻��
 
         public Dictionary<string, SysUserMenu> MenuIDList { get; set; }
 
diff --git a/web/web/Bin/Common.dll b/web/web/Bin/Common.dll
index 19116cd..f246c47 100644
--- a/web/web/Bin/Common.dll
+++ b/web/web/Bin/Common.dll
Binary files differ
diff --git a/web/web/Bin/Common.pdb b/web/web/Bin/Common.pdb
index a96091a..5690ec3 100644
--- a/web/web/Bin/Common.pdb
+++ b/web/web/Bin/Common.pdb
Binary files differ
diff --git a/web/web/Bin/Dao.dll b/web/web/Bin/Dao.dll
index 69e8ae3..19eb874 100644
--- a/web/web/Bin/Dao.dll
+++ b/web/web/Bin/Dao.dll
Binary files differ
diff --git a/web/web/Bin/Dao.pdb b/web/web/Bin/Dao.pdb
index 8f45c1e..2be4741 100644
--- a/web/web/Bin/Dao.pdb
+++ b/web/web/Bin/Dao.pdb
Binary files differ
diff --git a/web/web/Bin/Model.dll b/web/web/Bin/Model.dll
index 141ef2b..2ea70b8 100644
--- a/web/web/Bin/Model.dll
+++ b/web/web/Bin/Model.dll
Binary files differ
diff --git a/web/web/Bin/Model.pdb b/web/web/Bin/Model.pdb
index 432eea9..ddc6ae1 100644
--- a/web/web/Bin/Model.pdb
+++ b/web/web/Bin/Model.pdb
Binary files differ
diff --git a/web/web/ExportDocument.aspx.cs b/web/web/ExportDocument.aspx.cs
index 6fea544..213dc99 100644
--- a/web/web/ExportDocument.aspx.cs
+++ b/web/web/ExportDocument.aspx.cs
@@ -12,7 +12,7 @@
 {
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     protected void Page_Load(object sender, EventArgs e)
diff --git a/web/web/GwClient.ashx b/web/web/GwClient.ashx
index 98c3fe2..ccb85a6 100644
--- a/web/web/GwClient.ashx
+++ b/web/web/GwClient.ashx
@@ -22,7 +22,7 @@
     private List<SysUser> _SysUserList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     private string initPwd = ConfigurationManager.AppSettings["initPwd"];
 
diff --git a/web/web/GwClient.aspx b/web/web/GwClient.aspx
index 53dafeb..987c26f 100644
--- a/web/web/GwClient.aspx
+++ b/web/web/GwClient.aspx
@@ -1061,8 +1061,8 @@
                     <div class="modal-footer">
                         <button class="btn-default btn" data-dismiss="modal" aria-hidden="true">
                             鍙栨秷</button>&nbsp;&nbsp;
-                        <button class="btn btn-primary action-updateProduct">
-                            淇濆瓨</button>
+                        <a class="btn btn-primary action-updateProduct">
+                            淇濆瓨</a>
                     </div>
                 </div>
             </div>
diff --git a/web/web/GwClient.aspx.cs b/web/web/GwClient.aspx.cs
index 2726e1c..a1f8810 100644
--- a/web/web/GwClient.aspx.cs
+++ b/web/web/GwClient.aspx.cs
@@ -9,6 +9,7 @@
 using System.Collections.Generic;
 using System.Text;
 using System.Configuration;
+using System.Linq;
 
 public partial class _GwClient : PageBase<SysUser>, IRequiresSessionState
 {
@@ -67,8 +68,8 @@
             {
                 continue;
             }
-            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
-            if (bean.UserType == 6 || bean.UserType == 99)
+            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
+            if (!checkStrForArrayStr(1, bean.UserType) && !checkStrForArrayStr(2, bean.UserType) )
             {
                 continue;
             }
@@ -95,8 +96,8 @@
             {
                 continue;
             }
-            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
-            if (bean.UserType == 2)
+            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
+            if (!checkStrForArrayStr(1, bean.UserType) && !checkStrForArrayStr(3, bean.UserType))
             {
                 continue;
             }
@@ -123,8 +124,8 @@
             {
                 continue;
             }
-            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
-            if (bean.UserType != 1 && bean.UserType != 5 )
+            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
+            if (!checkStrForArrayStr(1, bean.UserType) && !checkStrForArrayStr(4, bean.UserType))
             {
                 continue;
             }
@@ -151,8 +152,8 @@
             {
                 continue;
             }
-            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-涓氬姟涓荤;4-涓氬姟鎬荤洃;5-瀹㈡湇浜哄憳;6-璐㈠姟浜哄憳;99-鍏朵粬
-            if (bean.UserType != 1 && bean.UserType != 6)
+            //杩囨护鐢ㄦ埛绫诲瀷 1-绠$悊鍛�;2-涓氬姟鍛�--鍏ㄥ憳;3-瀹㈡埛缁忕悊;4-瀹㈡湇浜哄憳;5-璐㈠姟浜哄憳
+            if (!checkStrForArrayStr(1, bean.UserType) && !checkStrForArrayStr(5, bean.UserType))
             {
                 continue;
             }
@@ -270,5 +271,17 @@
         }
     }
 
+    //妫�鏌ユ暟缁勬牸寮忓瓧绗︿覆涓槸鍚﹀寘鍚煇鍏冪礌
+    public static bool checkStrForArrayStr(object str, string arrayStr)
+    {
+        return stringToArray(arrayStr).Contains(str);
+    }
+
+    //瀛楃涓茶浆鏁扮粍
+    public static object[] stringToArray(string str)
+    {
+        object[] array = str.Split(',');
+        return array;
+    }
 
 }
diff --git a/web/web/GwDm.ashx b/web/web/GwDm.ashx
index 1cc00c3..674a588 100644
--- a/web/web/GwDm.ashx
+++ b/web/web/GwDm.ashx
@@ -9,7 +9,7 @@
 public class GwDm : PageHandler<SysUser>
 {
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     public override JsonPageResult ProcessRequestInternal(PageContext<Model.SysUser> context)
diff --git a/web/web/GwMoRoute.aspx.cs b/web/web/GwMoRoute.aspx.cs
index 8fdc48a..4ce4f95 100644
--- a/web/web/GwMoRoute.aspx.cs
+++ b/web/web/GwMoRoute.aspx.cs
@@ -14,7 +14,7 @@
     private List<GwOp> OpList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     public GwSp GwSp { get; protected set; }
diff --git a/web/web/GwOrder.ashx b/web/web/GwOrder.ashx
index 7500c6c..434b392 100644
--- a/web/web/GwOrder.ashx
+++ b/web/web/GwOrder.ashx
@@ -25,7 +25,7 @@
     //private List<GwProduct> _ProductClassList;  //浜у搧鍒嗙被
     
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     public override JsonPageResult ProcessRequestInternal(PageContext<SysUser> context)
diff --git a/web/web/GwOrderCreate.aspx.cs b/web/web/GwOrderCreate.aspx.cs
index dca0ab9..80fe7bb 100644
--- a/web/web/GwOrderCreate.aspx.cs
+++ b/web/web/GwOrderCreate.aspx.cs
@@ -24,7 +24,7 @@
     public int _controlFlag = 0;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     protected void Page_Load(object sender, EventArgs e)
diff --git a/web/web/GwProductClasses.aspx b/web/web/GwProductClasses.aspx
new file mode 100644
index 0000000..fb4cb18
--- /dev/null
+++ b/web/web/GwProductClasses.aspx
@@ -0,0 +1,285 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master"  AutoEventWireup="true" CodeFile="GwProductClasses.aspx.cs" Inherits="_GwProductClasses" %>
+<asp:Content runat="server" ID="Content1" ContentPlaceHolderID="head">
+    <script type="text/javascript" language="javascript">
+    $(document).ready(function() {
+
+        //$(document).on("click", "[data-toggle='popover']", function () {
+        //    $("[data-toggle='popover']").popover();
+        //})
+        var pagination = new Pagination();
+        pagination.setPageIndex(1);
+        pagination.setPageSize(50);
+
+        function loadPageList() {
+            var name = $("#Name").val();
+            //var classes = $("#Classes").val();
+            var classes = 0;
+            $.ajax({
+                url: "GwProduct.ashx",
+                type: "POST",
+                data: { action: "productClassesList", name: name, classes: classes, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                success: function(result) {
+                    if (result.OK) {
+                        $("#productTable tbody").html(result.Message.Table);
+                        pagination.setRecordCount(result.Message.TotalCount);
+                        $("#pagination").html(pagination.getHtml());
+                        $("[data-toggle='popover']").popover();
+                    } else {
+                        mytek.alert(result.Message, result.OK);
+                    }
+                }
+            });
+        }
+
+        $(document).on("click", ".action-modal-add", function() {
+            $("#productDialog .modal-title").text("娣诲姞浜у搧鍒嗙被");
+            $("#productDialog #action").val("add");
+            $("#productDialog #id").val("").attr("readonly", false);
+            $("#productDialog #name").val("");
+            //$("#productDialog #classes").val("");
+            $("#productDialog #parentId").val("");
+            $("#productDialog #isDnable").val(1);
+            $("#productDialog #remark").val("");
+
+            $("#productDialog").modal("show");
+        });
+
+        $("#productForm").ajaxForm({
+            success: function(r) {
+                if (r.OK) {
+                    mytek.alert(r.Message, r.OK, function() {
+                        $("#productDialog").modal("hide");
+                        loadPageList();
+                    });
+                } else {
+                    mytek.alert(r.Message, r.OK);
+                }
+            }
+        });
+
+        //閫夋嫨鍥炬爣涓嬫媺妗�
+        $("#icon").on("change", function () {
+            console.log("icon:" + $(this).val());
+            if ($(this).val() != "") {
+                document.getElementById('showImg').src = "../static/images/productIcon/" + $(this).val();
+            }
+        });
+
+        $("#icon").trigger("change");
+
+        //閫夋嫨绫诲埆涓嬫媺妗嗭紝鎺у埗鐩稿叧杈撳叆椤规樉绀�
+        $("#classes").on("change", function () {
+            $(".classes-span").hide();
+            $(".classes-span-" + $(this).val()).show();
+        });
+
+        $("#classes").trigger("change");
+
+        /**
+        //閫夋嫨璺敱绫诲瀷涓嬫媺妗嗭紝鎺у埗鐩稿叧杈撳叆椤规樉绀�
+        $("#routerType").on("change", function () {
+            $(".router-type-span").hide();
+            $(".router-type-span-" + $(this).val()).show();
+        });
+
+        $("#routerType").trigger("change");
+        **/
+
+        $(document).on("click", ".action-modal-edit", function() {
+            var id = $(this).data("id");
+            $("#productDialog .modal-title").text("缂栬緫浜у搧鍒嗙被");
+            $("#productDialog #id").val(id).attr("readonly", true);
+
+            $.get("gwProduct.ashx", { "action": "get", id: id }, function(r) {
+                if (r.OK) {
+                    $("#productDialog #action").val("update");
+                    $("#productDialog #id").val(r.Message.Id).attr("readonly", false);
+                    $("#productDialog #name").val(r.Message.Name);
+                    //$("#productDialog #classes").val(r.Message.Classes);
+                    $("#productDialog #parentId").val(r.Message.ParentId);
+                    //$("#productDialog #path").val(r.Message.Path);
+                    $("#productDialog #isDnable").val(r.Message.IsDnable);
+                    $("#productDialog #remark").val(r.Message.Remark);
+
+                    $("#productDialog").modal("show");
+                }
+                else {
+                    mytek.alert(r.Message, r.OK);
+                }
+            }, "json");
+        });
+
+        $(document).on("click", ".action-update-status", function () {
+            //data鐨勫睘鎬у弬鏁颁笉鑳藉惈鏈夊ぇ鍐欏瓧姣嶃��
+            var id = $(this).data("id");
+            var isEnable = $(this).data("is_enable");
+            var statusStr = "";
+            if (isEnable == 0) {
+                statusStr = "銆愬仠鐢ㄣ��";
+            }
+            else {
+                statusStr = "銆愬惎鐢ㄣ��";
+            }
+            mytek.confirm("鏄惁闇�瑕�" + statusStr + "璇ヤ俊鎭紵", "纭鏇存柊淇℃伅鐘舵�侊紝璇疯皑鎱庢搷浣滐紒", function (b) {
+                if (b) {
+                    $.post("gwProduct.ashx", { "action": "updateStatus", id: id, isEnable: isEnable }, function (r) {
+                        mytek.alert(r.Message, r.OK, function () {
+                            loadPageList();
+                        });
+                    });
+                }
+            });
+        });
+
+        $(document).on("click", ".action-delete", function() {
+            var id = $(this).data("id");
+            mytek.confirm("鏄惁闇�瑕佸垹闄よ淇℃伅锛�", "鏁版嵁鍒犻櫎鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function(b) {
+                if (b) {
+                    $.post("gwProduct.ashx", { "action": "delete", id: id }, function(result) {
+                        mytek.alert(result.Message, result.OK, function() {
+                            loadPageList();
+                        });
+                    },
+                    "json");
+                }
+            });
+        });
+
+        $(document).on("click", ".action-btn-GwProductQuery", function() {
+            pagination.setPageIndex(1);
+            loadPageList();
+        });
+
+        $(document).on("click", "a[data-index]", function() {
+            pagination.setPageIndex($(this).attr("data-index"));
+            loadPageList();
+        });
+
+        //杩涘叆椤甸潰鏃舵墽琛屾煡璇�
+        loadPageList();
+
+    });
+    </script>
+ </asp:Content> 
+<asp:Content runat="server" ID="Content2" ContentPlaceHolderID="title">浜у搧鍒嗙被绠$悊</asp:Content> 
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+   
+    <form name="queryForm" method="get" action="GwProduct.aspx" id="queryForm" class="form-inline"
+        id="gwProductTable">
+        <div class="m-b">
+            <div class="form-group">
+                <div class="input-group">
+                    <span class="input-group-addon">浜у搧鍒嗙被鍚嶇О</span>
+                    <input type="text" name="Name" id="Name" class="form-control" />
+                </div>
+            </div>
+            <div class="form-group" style="display: none">
+                <div class="input-group">
+                    <select name="Classes" id="Classes" class="form-control">
+                        <option value="-1">--璇烽�夋嫨绫诲埆--</option>
+                        <option value="0" selected>浜у搧鍒嗙被</option>
+                        <option value="1">浜у搧</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group">
+                    <input type="button" value="鏌ヨ" class="btn btn-primary action-btn-GwProductQuery" />&nbsp;&nbsp;&nbsp;
+                     <input class=" btn btn-warning action-modal-add" value="娣诲姞浜у搧鍒嗙被" type="button" />
+                </div>
+            </div>
+        </div>
+        <table class="table table-striped table-bordered table-hover" id="productTable">
+            <thead>
+                <tr class="header">
+                    <th>浜у搧鍒嗙被鍚嶇О
+                    </th>
+                    <th>鐖剁骇浜у搧鍒嗙被
+                    </th>
+                    <th>鏄惁鍚敤
+                    </th>
+                    <th>鍒涘缓鏃堕棿
+                    </th>
+                    <th>澶囨敞
+                    </th>
+                    <th class="text-center">鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+        </table>
+    </form>
+    <div id="pagination">
+    </div>
+    <div class="footBar">
+      
+    </div>
+
+    <div class="modal inmodal fade" id="productDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-lg">
+            <form class="form-horizontal" id="productForm" name="productForm" method="post" action="gwProduct.ashx">
+                <div class="modal-content ">
+                    <div class="modal-header">
+                        <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                        <input type="hidden" class="form-control" name="id" id="id" value="" />
+                        <button type="button" class="close" data-dismiss="modal">
+                            <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        <h4 class="modal-title">缂栬緫浜у搧鍒嗙被璧勬枡</h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍚嶇О <span style="color:red">*</span></label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="name" id="name" value="" />
+                            </div>
+                        </div>
+                        <input type="hidden" class="form-control" name="classes" id="classes" value="0" />
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鐖剁骇鍒嗙被ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="parentId" id="parentId" class="form-control">
+                                    <%=GetProductClassOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鏄惁鍚敤</label>
+                            <div class="col-sm-4 ">
+                                <select id="isEnable" name="isEnable" class="form-control">
+                                    <option value="0" >鍋滅敤</option>
+                                    <option value="1" selected>鍚敤</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-4">
+                                <textarea class="form-control" name="remark" id="remark" rows="4" ></textarea>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    <button class="btn btn-primary">
+                        淇濆瓨</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+    
+    <!-- footBar -->
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." />
+    </div>
+  </asp:Content> 
+
+         
+ 
diff --git a/web/web/GwSm.ashx b/web/web/GwSm.ashx
index 043db63..6c25e4e 100644
--- a/web/web/GwSm.ashx
+++ b/web/web/GwSm.ashx
@@ -11,7 +11,7 @@
 public class GwSm : PageHandler<SysUser>
 {
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     public override JsonPageResult ProcessRequestInternal(PageContext<Model.SysUser> context)
diff --git a/web/web/GwSp.ashx b/web/web/GwSp.ashx
index 26d653d..35395b4 100644
--- a/web/web/GwSp.ashx
+++ b/web/web/GwSp.ashx
@@ -22,7 +22,7 @@
     private List<GwProduct> _ProductList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
     private List<GwOp> OpList
diff --git a/web/web/GwStatis.aspx.cs b/web/web/GwStatis.aspx.cs
index 85c8f51..fc2737a 100644
--- a/web/web/GwStatis.aspx.cs
+++ b/web/web/GwStatis.aspx.cs
@@ -18,7 +18,7 @@
     private List<GwAp> ApList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     string permissionsSQL = null;
 
diff --git a/web/web/GwStatisProfit.aspx.cs b/web/web/GwStatisProfit.aspx.cs
index 4dc827e..810a9e0 100644
--- a/web/web/GwStatisProfit.aspx.cs
+++ b/web/web/GwStatisProfit.aspx.cs
@@ -16,7 +16,7 @@
     private List<GwAp> ApList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     string permissionsSQL = null;
 
diff --git a/web/web/GwStatisRefund.aspx.cs b/web/web/GwStatisRefund.aspx.cs
index fd1277c..5a63e49 100644
--- a/web/web/GwStatisRefund.aspx.cs
+++ b/web/web/GwStatisRefund.aspx.cs
@@ -13,7 +13,7 @@
 {
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     string permissionsSQL = null;
 
diff --git a/web/web/GwStatisV3.ashx b/web/web/GwStatisV3.ashx
index 752c2e1..e3e87ce 100644
--- a/web/web/GwStatisV3.ashx
+++ b/web/web/GwStatisV3.ashx
@@ -11,7 +11,7 @@
 {
     private GwStatisV3Dao _Dao = new GwStatisV3Dao();
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     
     public override JsonPageResult ProcessRequestInternal(PageContext<Model.SysUser> context)
diff --git a/web/web/GwStatisV3.aspx.cs b/web/web/GwStatisV3.aspx.cs
index c647f83..db696dd 100644
--- a/web/web/GwStatisV3.aspx.cs
+++ b/web/web/GwStatisV3.aspx.cs
@@ -16,7 +16,7 @@
     private List<GwAp> ApList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
     string permissionsSQL = null;
 
diff --git a/web/web/Index.aspx b/web/web/Index.aspx
index d223646..7cc1ae5 100644
--- a/web/web/Index.aspx
+++ b/web/web/Index.aspx
@@ -220,6 +220,7 @@
                             <li><a href="Setting.aspx" class="J_menuItem">绯荤粺鍙傛暟璁剧疆</a> </li>
                             <li><a href="SysDictType.aspx" class="J_menuItem">瀛楀吀绫诲瀷绠$悊</a> </li>
                             <li><a href="SysDictData.aspx" class="J_menuItem">瀛楀吀鏁版嵁绠$悊</a> </li>
+                            <li><a href="SysRoleMenu.aspx" class="J_menuItem">瑙掕壊鏉冮檺绠$悊</a> </li>
 
                         </ul>
                     </li>
diff --git a/web/web/SysDictData.ashx b/web/web/SysDictData.ashx
index 313c5aa..69fadbf 100644
--- a/web/web/SysDictData.ashx
+++ b/web/web/SysDictData.ashx
@@ -49,6 +49,7 @@
     {
         string dictLabel = context.GetString("dictLabel");
         string dictType = context.GetString("dictType");
+        string source = context.GetString("source");
 
         int recordCount = 0;
         int pageSize = context.GetInt("pageSize", 50);
@@ -69,19 +70,26 @@
                 str1 += "<td>" + bean.DictLabel + "</td>";
                 str1 += "<td>" + bean.DictType + "</td>";
                 str1 += "<td>" + bean.DictSort + "</td>";
+                str1 += "<td>" + (bean.ParanSource == 0 ? "绯荤粺鍐呯疆" : "鐢ㄦ埛娣诲姞") + "</td>";
                 str1 += "<td>" + SysUserName(string.IsNullOrEmpty(bean.CreateBy)? 0: int.Parse(bean.CreateBy) ) + "</td>";
                 str1 += "<td>" + bean.CreateTime + "</td>";
                 str1 += "<td>" + (bean.Status == 1 ? "<span class='label label-primary'>姝e父</span>" : "<span class='label label-default'>鍋滅敤</span>") + "</td>";
                 str1 += "<td  class=\"text-center \">";
-                str1 = bean.Status != 0 ? str1 + string.Format("<a href=\"javascript:;\" data-id=\"{0}\" data-status=\"0\" class=\"action-update-status btn btn-default btn-xs\"><i class=\"fa fa-toggle-off\"></i>&nbsp;鍋滅敤</a> ", (object) bean.DictId ) : str1 + string.Format("<a href=\"javascript:;\" data-id=\"{0}\" data-status=\"1\" class=\"action-update-status btn  btn-primary btn-xs\"><i class=\"fa fa-toggle-on\"/></i>&nbsp;鍚敤</a> ", (object) bean.DictId );
-                str1 += string.Format("<a href=\"javascript:;\" data-id=\"{0}\" class=\"action-modal-edit btn  btn-success btn-xs\"><i class=\"fa fa-edit\"></i>&nbsp;缂栬緫</a> ", (object) bean.DictId);
-                str1 += string.Format("<a href=\"javascript:;\" data-id=\"{0}\" class=\"action-delete btn  btn-default btn-xs\"><i class=\"fa fa-trash\"></i>&nbsp;鍒犻櫎</a> ", (object) bean.DictId);
+                if(bean.ParanSource == 1) {
+                    str1 = bean.Status != 0 ? str1 + string.Format("<a href=\"javascript:;\" data-id=\"{0}\" data-status=\"0\" class=\"action-update-status btn btn-default btn-xs\"><i class=\"fa fa-toggle-off\"></i>&nbsp;鍋滅敤</a> ", (object) bean.DictId ) : str1 + string.Format("<a href=\"javascript:;\" data-id=\"{0}\" data-status=\"1\" class=\"action-update-status btn  btn-primary btn-xs\"><i class=\"fa fa-toggle-on\"/></i>&nbsp;鍚敤</a> ", (object) bean.DictId );
+                    str1 += string.Format("<a href=\"javascript:;\" data-id=\"{0}\" class=\"action-modal-edit btn  btn-success btn-xs\"><i class=\"fa fa-edit\"></i>&nbsp;缂栬緫</a> ", (object) bean.DictId);
+                    str1 += string.Format("<a href=\"javascript:;\" data-id=\"{0}\" class=\"action-delete btn  btn-default btn-xs\"><i class=\"fa fa-trash\"></i>&nbsp;鍒犻櫎</a> ", (object) bean.DictId);
+                }
+
+                //鏍规嵁鍏ュ彛婧愭樉绀恒�愯鑹叉潈闄愩��
+                if(source.Equals("SysRoleMenu"))
+                    str1 += string.Format("<a href=\"javascript:;\" data-id=\"{0}\" class=\"action-permission btn  btn-primary btn-xs\"><i class=\"fa fa-cog\"></i>&nbsp;瑙掕壊鏉冮檺</a> ", (object) bean.DictValue);
                 str1 += "</td>";
                 str1 += "</tr>";
             }
         }
         else
-            str1 += "<tr><td colspan=\"8\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
+            str1 += "<tr><td colspan=\"9\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
 
         return new JsonPageResult(true,  new
         {
@@ -118,10 +126,24 @@
         string remark = context.GetString("remark", "");
 
         if (string.IsNullOrEmpty(dictValue) ) {
-            throw new ArgumentException("瀛楀吀鏁版嵁閿�间笉鑳戒负绌猴紝璇疯緭鍏ワ紒");
+            if (dictType.Equals("USER_ROLE"))
+            {
+                throw new ArgumentException("瑙掕壊缂栫爜涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
+            else
+            {
+                throw new ArgumentException("瀛楀吀鏁版嵁閿�间笉鑳戒负绌猴紝璇疯緭鍏ワ紒");
+            }
         }
         if (string.IsNullOrEmpty(dictLabel) ) {
-            throw new ArgumentException("瀛楀吀鏁版嵁鏍囩涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            if (dictType.Equals("USER_ROLE"))
+            {
+                throw new ArgumentException("瑙掕壊鍚嶇О涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
+            else
+            {
+                throw new ArgumentException("瀛楀吀鏁版嵁鏍囩涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
         }
         if (string.IsNullOrEmpty(dictType) ) {
             throw new ArgumentException("瀛楀吀绫诲瀷缂栫爜涓嶈兘涓虹┖锛岃杈撳叆锛�");
@@ -167,10 +189,24 @@
         string remark = context.GetString("remark", "");
             
         if (string.IsNullOrEmpty(dictValue) ) {
-            throw new ArgumentException("瀛楀吀鏁版嵁閿�间笉鑳戒负绌猴紝璇疯緭鍏ワ紒");
+            if (dictType.Equals("USER_ROLE"))
+            {
+                throw new ArgumentException("瑙掕壊缂栫爜涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
+            else
+            {
+                throw new ArgumentException("瀛楀吀鏁版嵁閿�间笉鑳戒负绌猴紝璇疯緭鍏ワ紒");
+            }
         }
         if (string.IsNullOrEmpty(dictLabel) ) {
-            throw new ArgumentException("瀛楀吀鏁版嵁鏍囩涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            if (dictType.Equals("USER_ROLE"))
+            {
+                throw new ArgumentException("瑙掕壊鍚嶇О涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
+            else
+            {
+                throw new ArgumentException("瀛楀吀鏁版嵁鏍囩涓嶈兘涓虹┖锛岃杈撳叆锛�");
+            }
         }
         if (string.IsNullOrEmpty(dictType) ) {
             throw new ArgumentException("瀛楀吀绫诲瀷缂栫爜涓嶈兘涓虹┖锛岃杈撳叆锛�");
diff --git a/web/web/SysDictData.aspx b/web/web/SysDictData.aspx
index f32fc0c..4c5e07f 100644
--- a/web/web/SysDictData.aspx
+++ b/web/web/SysDictData.aspx
@@ -62,7 +62,7 @@
                 if (r.OK) {
                     $("#sysDictDataDialog #action").val("update");
                     $("#sysDictDataDialog #dictId").val(r.Message.DictId);
-                    $("#sysDictDataDialog #dictValue").val(r.Message.DictValue).attr("readonly", false);
+                    $("#sysDictDataDialog #dictValue").val(r.Message.DictValue).attr("readonly", true);
                     $("#sysDictDataDialog #dictLabel").val(r.Message.DictLabel);
                     $("#sysDictDataDialog #dictType").val(r.Message.DictType);
                     $("#sysDictDataDialog #dictSort").val(r.Message.DictSort);
@@ -169,6 +169,8 @@
                     </th>
                     <th>瀛楀吀鎺掑簭
                     </th>
+                    <th>鍙傛暟鏉ユ簮
+                    </th>
                     <th>鍒涘缓鑰�
                     </th>
                     <th>鍒涘缓鏃堕棿
diff --git a/web/web/SysDictData.aspx.cs b/web/web/SysDictData.aspx.cs
index 0f58b3f..e3ff073 100644
--- a/web/web/SysDictData.aspx.cs
+++ b/web/web/SysDictData.aspx.cs
@@ -10,7 +10,7 @@
 using System.Web.SessionState;
 
 /**
- * 浜у搧绠$悊
+ * 瀛楀吀鏁版嵁绠$悊
  * 
  */
 public partial class _SysDictData : PageBase<SysUser>, IRequiresSessionState
diff --git a/web/web/SysDictType.aspx.cs b/web/web/SysDictType.aspx.cs
index 0dad56c..f9e3076 100644
--- a/web/web/SysDictType.aspx.cs
+++ b/web/web/SysDictType.aspx.cs
@@ -10,7 +10,7 @@
 using System.Web.SessionState;
 
 /**
- * 浜у搧绠$悊
+ * 瀛楀吀绫诲瀷绠$悊
  * 
  */
 public partial class _SysDictType : PageBase<SysUser>, IRequiresSessionState
diff --git a/web/web/SysRoleMenu.aspx b/web/web/SysRoleMenu.aspx
new file mode 100644
index 0000000..1a0b0b7
--- /dev/null
+++ b/web/web/SysRoleMenu.aspx
@@ -0,0 +1,351 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master"  AutoEventWireup="true" CodeFile="SysRoleMenu.aspx.cs" Inherits="_SysRoleMenu" %>
+<asp:Content runat="server" ID="Content1" ContentPlaceHolderID="head">
+    <script type="text/javascript" language="javascript">
+        $(document).ready(function () {
+            var pagination = new Pagination();
+            pagination.setPageIndex(1);
+            pagination.setPageSize(50);
+
+            function loadPageList() {
+                var dictLabel = "";
+                var dictType = "USER_ROLE";
+                var source = "SysRoleMenu"; //鍏ュ彛婧�
+                $.ajax({
+                    url: "SysDictData.ashx",
+                    type: "POST",
+                    data: { action: "list", dictLabel: dictLabel, dictType: dictType, source:source, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                    success: function (result) {
+                        if (result.OK) {
+                            $("#sysDictDataTable tbody").html(result.Message.Table);
+                            pagination.setRecordCount(result.Message.TotalCount);
+                            $("#pagination").html(pagination.getHtml());
+                            $("[data-toggle='popover']").popover();
+                        } else {
+                            mytek.alert(result.Message, result.OK);
+                        }
+                    }
+                });
+            }
+
+            $(document).on("click", ".action-modal-add", function () {
+                $("#sysDictDataDialog .modal-title").text("娣诲姞瑙掕壊");
+                $("#sysDictDataDialog #action").val("add");
+                $("#sysDictDataDialog #dictId").val("");
+                $("#sysDictDataDialog #dictValue").val("").attr("readonly", false);
+                $("#sysDictDataDialog #dictLabel").val("");
+                $("#sysDictDataDialog #dictType").val("USER_ROLE");
+                $("#sysDictDataDialog #dictSort").val(1);
+                $("#sysDictDataDialog #remark").val("");
+
+                $("#sysDictDataDialog .statusCss").hide();
+
+                $("#sysDictDataDialog").modal("show");
+            });
+
+            $("#sysDictDataForm").ajaxForm({
+                success: function (r) {
+                    if (r.OK) {
+                        mytek.alert(r.Message, r.OK, function () {
+                            $("#sysDictDataDialog").modal("hide");
+                            loadPageList();
+                        });
+                    } else {
+                        mytek.alert(r.Message, r.OK);
+                    }
+                }
+            });
+
+            $(document).on("click", ".action-modal-edit", function () {
+                var dictId = $(this).data("id");
+                $("#sysDictDataDialog .modal-title").text("缂栬緫瑙掕壊");
+
+                $.get("SysDictData.ashx", { "action": "getByDictId", dictId: dictId }, function (r) {
+                    if (r.OK) {
+                        $("#sysDictDataDialog #action").val("update");
+                        $("#sysDictDataDialog #dictId").val(r.Message.DictId);
+                        $("#sysDictDataDialog #dictValue").val(r.Message.DictValue).attr("readonly", true);
+                        $("#sysDictDataDialog #dictLabel").val(r.Message.DictLabel);
+                        $("#sysDictDataDialog #dictType").val(r.Message.DictType);
+                        $("#sysDictDataDialog #dictSort").val(r.Message.DictSort);
+                        $("#sysDictDataDialog #status").val(r.Message.Status);
+                        $("#sysDictDataDialog #remark").val(r.Message.Remark);
+
+                        $("#sysDictDataDialog .statusCss").show();
+
+                        $("#sysDictDataDialog").modal("show");
+                    }
+                    else {
+                        mytek.alert(r.Message, r.OK);
+                    }
+                }, "json");
+            });
+
+            $(document).on("click", ".action-update-status", function () {
+                //data鐨勫睘鎬у弬鏁颁笉鑳藉惈鏈夊ぇ鍐欏瓧姣嶃��
+                var dictId = $(this).data("id");
+                var status = $(this).data("status");
+                var statusStr = "";
+                if (status == 0) {
+                    statusStr = "銆愬仠鐢ㄣ��";
+                }
+                else {
+                    statusStr = "銆愬惎鐢ㄣ��";
+                }
+                mytek.confirm("鏄惁闇�瑕�" + statusStr + "璇ヤ俊鎭紵", "纭鏇存柊淇℃伅鐘舵�侊紝璇疯皑鎱庢搷浣滐紒", function (b) {
+                    if (b) {
+                        $.post("SysDictData.ashx", { "action": "updateStatus", dictId: dictId, status: status }, function (r) {
+                            mytek.alert(r.Message, r.OK, function () {
+                                loadPageList();
+                            });
+                        });
+                    }
+                });
+            });
+
+            $(document).on("click", ".action-delete", function () {
+                var dictId = $(this).data("id");
+                mytek.confirm("鏄惁闇�瑕佸垹闄よ淇℃伅锛�", "鏁版嵁鍒犻櫎鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function (b) {
+                    if (b) {
+                        $.post("SysDictData.ashx", { "action": "delete", dictId: dictId }, function (result) {
+                            mytek.alert(result.Message, result.OK, function () {
+                                loadPageList();
+                            });
+                        },
+                            "json");
+                    }
+                });
+            });
+
+            $(document).on("click", ".action-btn-SysDictDataQuery", function () {
+                pagination.setPageIndex(1);
+                loadPageList();
+            });
+
+            $(document).on("click", "a[data-index]", function () {
+                pagination.setPageIndex($(this).attr("data-index"));
+                loadPageList();
+            });
+
+            //杩涘叆椤甸潰鏃舵墽琛屾煡璇�
+            loadPageList();
+
+
+        //鎵撳紑瑙掕壊鎵�灞炴潈闄愭爲
+        $(document).on("click", ".action-permission", function () {
+            //var roleId = $("#RoleId").val();
+            var roleId = $(this).data("id");
+            $.get("SysRoleMenu.ashx", { action: "loadRoleMenuList", "roleId": roleId }, function (result) {
+                if (!result.OK) {
+                    mytek.alert(result.Message, result.OK);
+                }
+                else {
+                    $("#permissionDialog").data("roleId", roleId);
+                    $("#permissionDialog #MenuID").prop("checked", false);
+                    $.each(result.Message, function (i) {
+                        $("#permissionDialog #MenuID[value='" + this + "']").prop("checked", true);
+                    });
+                    $("#permissionDialog").modal("show");
+                }
+            }, "json");
+        });
+
+        //鍕鹃�夎彍鍗曞閫夋浜嬩欢
+        $(document).on("click", "#MenuID", function () {
+            var id = $(this).val();
+            if (id == 1) {
+                $("input[name='MenuID']").prop("checked", $(this).is(":checked"));
+            } else {
+                $("[data-prentid='" + id + "']").prop("checked", $(this).is(":checked"));
+
+                $("input[data-prentid='" + id + "']").each(function () {
+                    var partentid = $(this).val();
+                    $("[data-prentid='" + partentid + "']").prop("checked", $(this).is(":checked"));
+                })
+                //$("[data-prentid='" + id + "']").prop("checked", $(this).is(":checked"));
+            }
+        });
+
+        //淇濆瓨瑙掕壊鏉冮檺
+        $(document).on("click", ".action-update-permission", function () {
+                    var menuIDArray = [];
+
+            //mytek.confirm("鏄惁淇敼瑙掕壊鏉冮檺锛�", "璇疯皑鎱庢搷浣滐紒", function (b) {
+            //    if (b) {
+                    $("#permissionDialog #MenuID").each(function () {
+                        if ($(this).is(":checked")) {
+                            menuIDArray.push($(this).val());
+                        }
+                    });
+
+                    var roleId = $("#permissionDialog").data("roleId");
+                    $.ajax({
+                        url: "SysRoleMenu.ashx",
+                        type: "POST",
+                        data: { action: "updatePermission", roleId: roleId, menuIDArray: $.toJSON(menuIDArray) },
+                        success: function (result) {
+                            $("#permissionDialog").modal("hide");
+                            if (result.OK) {
+                                //;
+                            } else {
+                                mytek.alert(result.Message, result.OK);
+                            }
+                        }
+                    });
+               // }
+            //});
+        });
+
+    });
+    </script>
+ </asp:Content> 
+<asp:Content runat="server" ID="Content2" ContentPlaceHolderID="title">瑙掕壊鏉冮檺绠$悊</asp:Content> 
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+   <!--
+    <form name="queryForm" method="get" action="SysRoleMenu.aspx" id="queryForm" class="form-inline"
+        id="sysRoleMenuTable">
+        <div class="m-b">
+            <div class="form-group">
+                <div class="input-group">
+                    <span class="input-group-addon">瑙掕壊鍚嶇О <span style="color:red">*</span></span>
+                    <select name="RoleId" id="RoleId" class="form-control">
+                        <!%=UserRoleOptions()%>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group">
+                    <input type="button" value="瑙掕壊鏉冮檺" class="btn btn-primary action-permission" />&nbsp;&nbsp;&nbsp;
+                </div>
+            </div>
+        </div>
+    </form>
+    -->
+    
+         <input class=" btn btn-warning action-modal-add" value="娣诲姞瑙掕壊" type="button" />&nbsp;&nbsp;
+        <table class="table table-striped table-bordered table-hover" id="sysDictDataTable">
+            <thead>
+                <tr class="header">
+                    <th>瑙掕壊缂栫爜
+                    </th>
+                    <th>瑙掕壊鍚嶇О
+                    </th>
+                    <th>鎵�灞炵被鍨�
+                    </th>
+                    <th>瑙掕壊鎺掑簭
+                    </th>
+                    <th>鍙傛暟鏉ユ簮
+                    </th>
+                    <th>鍒涘缓鑰�
+                    </th>
+                    <th>鍒涘缓鏃堕棿
+                    </th>
+                    <th>鏄惁鍚敤
+                    </th>
+                    <th class="text-center">鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+        </table>
+
+    <div id="pagination">
+    </div>
+    <div class="footBar">      
+    </div>
+    
+    <div class="modal inmodal fade" id="sysDictDataDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-lg">
+            <form class="form-horizontal" id="sysDictDataForm" name="sysDictDataForm" method="post" action="SysDictData.ashx">
+                <div class="modal-content ">
+                    <div class="modal-header">
+                        <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                        <input type="hidden" class="form-control" name="dictId" id="dictId" value="" />
+                        <button type="button" class="close" data-dismiss="modal">
+                            <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        <h4 class="modal-title">缂栬緫瑙掕壊璧勬枡</h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瑙掕壊缂栫爜 <span style="color:red">*</span>
+                            </label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="dictValue" id="dictValue" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瑙掕壊鍚嶇О <span style="color:red">*</span>
+                            </label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="dictLabel" id="dictLabel" value="" />
+                            </div>
+                        </div>
+                        <input type="hidden" class="form-control" name="dictType" id="dictType" value="USER_ROLE" />
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瑙掕壊鎺掑簭 <span style="color:red">*</span>
+                            </label>
+                            <div class="col-sm-4 ">         
+                                <input type="text" class="form-control" name="dictSort" id="dictSort" 
+                                    maxlength="8" value="" onkeyup="value=value.replace(/[^\d]/g,'')"
+                                    onpaste="value=value.replace(/[^\d]/g,'')" oncontextmenu="return false" />
+                            </div>
+                        </div>
+                        <div class="form-group statusCss">
+                            <label class="col-sm-2 control-label">
+                                鐘舵��</label>
+                            <div class="col-sm-4 ">
+                                <select id="status" name="status" class="form-control">
+                                    <option value="0" >鍋滅敤</option>
+                                    <option value="1" selected>姝e父</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-4">
+                                <textarea class="form-control" name="remark" id="remark" rows="4" ></textarea>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    <button class="btn btn-primary">
+                        淇濆瓨</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+    
+    <div class="modal inmodal fade" id="permissionDialog" tabindex="-1" role="dialog"
+        aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content animated bounceInRight">
+                <div class="modal-header">
+                    <span class="title">璁剧疆瑙掕壊鏉冮檺</span><a class="close" data-dismiss="modal" aria-hidden="true">脳</a></div>
+                <div class="modal-body">                   
+                    <%=RenderFunctionTree() %>
+                </div>
+                <div class="modal-footer">
+                    <button class="btn-default btn" data-dismiss="modal" aria-hidden="true">
+                        鍙栨秷</button>&nbsp;&nbsp;
+                    <a class="btn btn-primary action-update-permission">淇濆瓨</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    
+    <!-- footBar -->
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." />
+    </div>
+  </asp:Content> 
+
+         
+ 
diff --git a/web/web/SysRoleMenu.aspx.cs b/web/web/SysRoleMenu.aspx.cs
new file mode 100644
index 0000000..6749382
--- /dev/null
+++ b/web/web/SysRoleMenu.aspx.cs
@@ -0,0 +1,83 @@
+锘� 
+using Common;
+using Dao;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.Profile;
+using System.Web.SessionState;
+
+/**
+ * 瑙掕壊鏉冮檺绠$悊
+ * 
+ */
+public partial class _SysRoleMenu : PageBase<SysUser>, IRequiresSessionState
+{
+    protected List<SysDictData> UserRoleList;
+
+    protected void Page_Load(object sender, EventArgs e)
+  {
+        //鏉冮檺鎺у埗
+        this.CheckRight("112", FailedOperation.ErrorMsgOnly);
+
+        //鑾峰彇瀛楀吀鏁版嵁:USER_ROLE-鐢ㄦ埛瑙掕壊
+        using (SysDictDataDao sysDictDataDao = new SysDictDataDao())
+        {
+            SysDictData bean = new SysDictData();
+            bean.DelFlag = 0;   //姝e父
+            bean.Status = 1;    //鍚敤
+            bean.DictType = "USER_ROLE";    //瀛楀吀绫诲瀷涓衡�滅敤鎴疯鑹测��
+            this.UserRoleList = sysDictDataDao.getAllList(bean);
+        }
+
+    }
+
+    private string GenerateTextPadding(SysMenu menu)
+    {
+        return string.Format("<span style=\"width:{0}px;display:inline-block;\"></span>{1}.", (object)(menu.MenuLV * 20), (object)menu.MenuID);
+    }
+
+    protected string RenderFunctionTree()
+    {
+        using (UserDao userDao = new UserDao())
+        {
+            List<SysMenu> list = userDao.LoadSysMenuList();
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("<table cellpadding='5'>");
+            foreach (SysMenu menu in list)
+                stringBuilder.AppendFormat("<tr><td colspan='2'><span style='padding:5px;'>{2}</span>\r\n            <input  type=\"checkbox\" id=\"MenuID\"  data-prentId='{5}' name=\"MenuID\" value=\"{0}\" {1}/><span  style='padding:5px;'>{3} </span>  \r\n            <span  style='padding:5px; color:#666666'>{4}</span></td></tr>", (object)menu.MenuID, (object)"", (object)this.GenerateTextPadding(menu), (object)menu.MenuName, (object)menu.Remark, (object)menu.ParentID);
+            stringBuilder.Append("</table>");
+            return stringBuilder.ToString();
+        }
+    }
+
+    //鐢ㄦ埛瑙掕壊涓嬫媺
+    public string UserRoleOptions()
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.UserRoleList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)"", (object)"鏃�");
+        foreach (SysDictData bean in this.UserRoleList)
+        {   /**
+            //鐘舵�佸仠鐢ㄨ繃婊�
+            if (bean.Status == 0)
+            {
+                continue;
+            }
+
+            //鍒犻櫎杩囨护
+            if (bean.DelFlag == 2)
+            {
+                continue;
+            }**/
+
+            stringBuilder.AppendFormat("<option value=\"{0}\">{1}</option>", (object)bean.DictValue, (object)bean.DictLabel);
+        }
+        return stringBuilder.ToString();
+    }
+
+}
+ 
\ No newline at end of file
diff --git a/web/web/SysUser.ashx b/web/web/SysUser.ashx
index d5590f4..190dddf 100644
--- a/web/web/SysUser.ashx
+++ b/web/web/SysUser.ashx
@@ -34,6 +34,9 @@
             //淇敼瀵嗙爜
             case "updatePwd":
                 return UpdatePwd(context);
+            //鏍规嵁鏁扮粍瀛楃涓茶浆鎹㈠瓧鍏�
+            case "arrayStrToDict":
+                return ArrayStrToDict(context);
 
             default:
                 throw new Exception("Invalid Action=" + @string);
@@ -88,7 +91,8 @@
     private JsonPageResult LoadUserMenuList(PageContext<SysUser> context)
     {
         context.CheckRight("104", FailedOperation.PromptOnly);
-        return new JsonPageResult(true, (object) this._Dao.LoadUserMenuList(context.GetInt("userid")).Keys);
+        //return new JsonPageResult(true, (object) this._Dao.LoadUserMenuList(context.GetInt("userid")).Keys);
+        return new JsonPageResult(true, (object) this._Dao.LoadUserRoleMenuList(context.GetInt("userid")).Keys);
     }
 
     private JsonPageResult SaveUser(PageContext<SysUser> context)
@@ -98,6 +102,15 @@
         string string2 = context.GetString("password");
         string userName = context.GetString("userName");
         string userType = context.GetString("userType");
+            
+        List<string> tmpList = new List<string>();
+        //鏁扮粍鍚堝苟
+        tmpList.AddRange( JsonConvert.DeserializeObject<string[]>(context.GetString("userType")) );
+
+        //鏁扮粍鍘婚噸
+        string[] tmpArray = DataConverter.DelRepeatData(tmpList.ToArray() );
+        userType = string.Join(",", tmpArray) ;
+
         string string3 = context.GetString("email");
         string string4 = context.GetString("mobile");
         int int2 = context.GetInt("emailFlag");
@@ -140,7 +153,7 @@
             throw new ArgumentException("璐︽埛鍚嶇О宸茬粡瀛樺湪锛岃閲嶆柊杈撳叆锛�");
 
         sysUser.UserName = userName;
-        sysUser.UserType = string.IsNullOrEmpty(userType) ? 0 : int.Parse(userType);
+        sysUser.UserType = userType;
         sysUser.CreateTime = DateTime.Now;
 
         /**
@@ -249,5 +262,24 @@
         _Dao.UpdatePwd(account, newPwd );
 
         return new JsonPageResult(true, (object)"淇敼瀵嗙爜鎴愬姛锛�");
+    }        
+        
+    //鏍规嵁鏁扮粍瀛楃涓茶浆鎹㈠瓧鍏�
+    private JsonPageResult ArrayStrToDict(PageContext<Model.SysUser> context)
+    {
+        string userId = context.GetString("userId");
+        string userType = context.GetString("userType");
+            
+        Dictionary<string, object> dictionary = new Dictionary<string, object>();
+
+        List<object> list = DataConverter.stringToList(userType);
+        for (int i = 0; i < list.Count; i++)
+        {
+            //dictionary[userId.ToString()] = list[i];
+            dictionary[list[i].ToString()] = list[i];
+        }
+
+        return new JsonPageResult(true, dictionary.Keys);
     }
+
 }
diff --git a/web/web/SysUser.aspx b/web/web/SysUser.aspx
index 5697391..1cf539a 100644
--- a/web/web/SysUser.aspx
+++ b/web/web/SysUser.aspx
@@ -131,6 +131,13 @@
                 var isVerification = $("#userDialog #isVerification").prop("checked");
 
                 var clientIp = $("#userDialog #clientIp").val();
+                var userRoleArray = [];
+                $("#userDialog #_UserRole").each(function () {
+                    if ($(this).is(":checked")) {
+                        userRoleArray.push($(this).val());
+                    }
+                });
+                userType = $.toJSON(userRoleArray);
 
                 $.post("sysuser.ashx", { action: "saveUser", userid: userid, account: account, password: password, userName: userName, userType: userType, mobile: mobile, email: email, mobileFlag: mobileFlag, emailFlag: emailFlag, isVerification: isVerification, clientIp: clientIp },
              function(result) {
@@ -149,7 +156,9 @@
                 $("#userDialog #account").val("");
                 //$("#userDialog #password").val("");
                 $("#userDialog #userName").val("");
-                $("#userDialog #userType").val("");
+                //$("#userDialog #userType").val("");
+                $("#userDialog #_UserRole").iCheck("uncheck");
+
                 $("#userDialog #mobile").val("");
                 $("#userDialog #email").val("");
                 $("#userDialog input[name=isVerification]").iCheck("uncheck");
@@ -170,9 +179,9 @@
                     }
                     else {
                         $("#permissionDialog").data("id", id);
-                        $("#permissionDialog #MenuID").prop("checked", false);
+                        $("#permissionDialog #MenuID").prop("checked", false).attr("disabled", "disabled");
                         $.each(result.Message, function(i) {
-                            $("#permissionDialog #MenuID[value='" + this + "']").prop("checked", true);
+                            $("#permissionDialog #MenuID[value='" + this + "']").prop("checked", true).attr("disabled", "disabled");
                         });
                     }
                     $("#permissionDialog").modal("show");
@@ -232,13 +241,26 @@
                     //缂栬緫鏃跺瘑鐮佹闅愯棌
                     $(".pwdCss").hide();
                     $("#userDialog #userName").val(user.UserName);
-                    $("#userDialog #userType").val(user.UserType);
+                    //$("#userDialog #userType").val(user.UserType);
+                    $.get("sysuser.ashx", { action: "arrayStrToDict", "userId": id, "userType": user.UserType  }, function (r) {
+                        if (!r.OK) {
+                            mytek.alert(r.Message, r.OK);
+                        }
+                        else {
+                            $("#userDialog #_UserRole").prop("checked", false);
+                            $.each(r.Message, function (i) {
+                                $("#userDialog #_UserRole[value='" + this + "']").prop("checked", true);
+                            });
+                        }
+                    }, "json");
+
                     $("#userDialog #mobile").val(user.Mobile);
                     $("#userDialog #email").val(user.Email);
                     $("#userDialog #emailFlag").val(user.EmailFlag);
                     $("#userDialog #mobileFlag").val(user.MobileFlag);
                     $("#userDialog #isVerification").iCheck(user.IsVerification == 1 ? "check" : "uncheck");
                     $("#userDialog #clientIp").val(user.ClientIp);
+
                     $("#userDialog").modal("show");
                 }, "json");
             });
@@ -415,17 +437,18 @@
                         <label class="col-sm-2 control-label">
                             璐︽埛绫诲瀷 <span style="color:red">*</span>
                         </label>
-                        <div class="col-sm-4">
+                        <div class="col-sm-10">              
+                            <%=UserRoleList() %>
+                            <!--
                             <select name="userType" id="userType" class="form-control">
                                 <option value=""></option>
                                 <option value="1">绠$悊鍛�</option>
                                 <option value="2">涓氬姟鍛�</option>
-                                <option value="3">涓氬姟涓荤</option>
-                                <option value="4">涓氬姟鎬荤洃</option>
-                                <option value="5">瀹㈡湇浜哄憳</option>
-                                <option value="6">璐㈠姟浜哄憳</option>
-                                <option value="99">鍏朵粬</option>
+                                <option value="3">瀹㈡埛缁忕悊</option>
+                                <option value="4">瀹㈡湇浜哄憳</option>
+                                <option value="5">璐㈠姟浜哄憳</option>
                             </select>
+                            -->
                         </div>
                     </div>
                     <div class="form-group">
@@ -497,7 +520,7 @@
         <div class="modal-dialog">
             <div class="modal-content animated bounceInRight">
                 <div class="modal-header">
-                    <span class="title">璁剧疆璐︽埛鏉冮檺</span><a class="close" data-dismiss="modal" aria-hidden="true">脳</a></div>
+                    <span class="title">鏌ョ湅璐︽埛鏉冮檺</span><a class="close" data-dismiss="modal" aria-hidden="true">脳</a></div>
                 <div class="modal-body">
                    
           <%=RenderFunctionTree() %>
@@ -505,8 +528,10 @@
                 <div class="modal-footer">
                     <button class="btn-default btn" data-dismiss="modal" aria-hidden="true">
                         鍙栨秷</button>&nbsp;&nbsp;
+                    <!--
                     <button class="btn btn-primary action-update-permission">
                         淇濆瓨</button>
+                    -->
                 </div>
             </div>
         </div>
diff --git a/web/web/SysUser.aspx.cs b/web/web/SysUser.aspx.cs
index 691db68..f47eda3 100644
--- a/web/web/SysUser.aspx.cs
+++ b/web/web/SysUser.aspx.cs
@@ -11,14 +11,16 @@
 
 public partial class _SysUser : PageBase<SysUser>, IRequiresSessionState
 {
-    
 
+
+    public List<SysDictData> userRoleList { get; set; } //璐﹀彿绫诲瀷鎴栫О鐢ㄦ埛瑙掕壊銆�
     public string IP { get; set; }
 
     protected void Page_Load(object sender, EventArgs e)
     {
         this.IP = this.Request.UserHostAddress;
         this.CheckRight("104", FailedOperation.PromptOnly);
+
     }
 
     private string GenerateTextPadding(SysMenu menu)
@@ -39,4 +41,48 @@
             return stringBuilder.ToString();
         }
     }
+
+    //鎵�鏈夌敤鎴疯鑹诧紙瀛楀吀绫诲瀷涓猴細USER_ROLE锛�
+    protected string UserRoleList()
+    {
+        using (SysDictDataDao sysDictDataDao = new SysDictDataDao())
+        {
+            SysDictData sysDictData = new SysDictData();
+            sysDictData.DictType = "USER_ROLE"; //瀛楀吀绫诲瀷锛氱敤鎴疯鑹�
+            sysDictData.Status = 1; //鐘舵�侊細1-鍚敤
+            List<SysDictData> userRoleList = sysDictDataDao.getAllList(sysDictData);
+
+            //List<GwProduct> list = gwProductDao.getAllList(gwProduct);
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("<table cellpadding='5'>");
+            if (userRoleList.Count > 0)
+            {
+                for (int i = 0; i < userRoleList.Count; i++)
+                {
+                    SysDictData bean = (SysDictData)userRoleList[i];
+
+                    //琛屽紑濮嬬
+                    if (i % 5 == 0)
+                    {
+                        stringBuilder.Append("<tr>");
+                    }
+
+                    //琛屽崟鍏冩牸
+                    stringBuilder.AppendFormat("<td><input  type=\"checkbox\" id=\"_UserRole\"  name=\"_UserRole\" value=\"{0}\" /><span  style='padding:5px;'>{1} </span>  \r\n         </td>", (object)bean.DictValue, (object)bean.DictLabel);
+
+                    //琛岀粨鏉熺
+                    if (i % 5 == 4 || i == (userRoleList.Count - 1))
+                    {
+                        stringBuilder.Append("</tr>");
+                    }
+
+                }
+            }
+            stringBuilder.Append("</table>");
+
+            return stringBuilder.ToString();
+        }
+    }
+
 }
diff --git a/web/web/gwspupdate.aspx.cs b/web/web/gwspupdate.aspx.cs
index 75f2237..8f9eaf0 100644
--- a/web/web/gwspupdate.aspx.cs
+++ b/web/web/gwspupdate.aspx.cs
@@ -15,7 +15,7 @@
     protected List<GwProduct> GwProductList;
 
     private int _userId = -1;
-    private int _userType = -1;
+    private string _userType = "";
     private string _account = "";
 
 

--
Gitblit v1.9.1