import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:hyzp_ybqx511505_sanjiang_new_area_launche/config/service_url.dart'; import 'package:hyzp_ybqx511505_sanjiang_new_area_launche/services/EventBus.dart'; import 'commonFun.dart'; ///用户权限管理 // static const String getUserAccessUrl = ServiceUrl + '?s=App.User_User.GetAccess'; //1、根据用户ID获取用户所属角色 // static const String getUserGroupUrl = ServiceUrl + '?s=App.User_User.GetGroup'; //2、获取后台用户角色分组数据 // static const String getUserGroupListUrl = ServiceUrl + '?s=App.User_User.GetGroupList'; //3、获取后台用户角色分组分页列表数据 // static const String getUserAuthUrl = ServiceUrl + '?s=App.User_User.GetAuth'; //4、获取后台功能分类数据 // static const String getUserAuthListUrl = ServiceUrl + '?s=App.User_User.GetAuthList'; //5、获取后台功能分类分页列表数据 //2.2、获取后台用户全部角色分组数据 Future getUserGroupAll({int user_id = -1}) async { if (user_id < 0) { user_id = g_userInfo.mapUserInfo['user_id']; } //1、根据用户ID获取用户所属角色(用户组) getUserAccess(user_id: user_id).then((value) { // I/flutter (15540): g_userInfo.userGroupIDlist = [31, 27] int len = g_userInfo.userGroupIDlist.length; for (int i = 0; i < len; i++) { getUserGroup(group_id: g_userInfo.userGroupIDlist[i]); } print('g_userInfo.userRulesMap = ${g_userInfo.userRulesMap}'); }); } //2.1、获取后台用户指定 group_id 角色分组数据 Future getUserGroup({@required int group_id}) async { var api = ServicePath.getUserGroupUrl; print(api); //I/flutter (15540): http://125.64.218.67:9904/?s=App.User_User.GetGroup String random = RandomBit(6); Map map = { 'random': random, 'sign': GenerateMd5(APPkey + random), 'id': group_id, }; print('开始处理登录请求...'); Response response; Dio dio = Dio(); //返回结果 // 返回字段 类型 说明 // id 整型 角色分组ID // type 整型 角色分组类型:1普通角色 // level 整型 角色分组级次(1-顶级,2-次级) // pid 整型 上级角色分组ID(为0则表示为顶级) // rules 字符串 授权功能ID(如:5,7,112,331),表示此角色拥有相应ID的功能权限 //{ // "ret": 200, // "data": { // "id": 31, // "jgid": 2, // "type": 0, // "title": "监控室", // "level": 0, // "pid": 0, // "sort": 2, // "status": 1, // "rules": "" // }, // "msg": "" // } try { print('response = ${response}'); // I/flutter (15540): response = null response = await dio.post(api, data: map); print('response = ${response}'); //I/flutter (15540): response = {"ret":200,"data":{"id":31,"jgid":2,"type":0,"title":"监控室","level":0,"pid":0,"sort":2,"status":1,"rules":""},"msg":""} if (response.statusCode == 200) { Map _mapRet = await getMapFromJson(response.data); print('_mapRet = ${_mapRet}'); // I/flutter (15540): _mapRet = {ret: 200, data: {id: 31, jgid: 2, type: 0, title: 监控室, level: 0, pid: 0, sort: 2, status: 1, rules: }, msg: } //print('_mapRet[\'data\']["rules"] is a = ${_mapRet['data']["rules"] is String}'); //_mapRet['data']["rules"] is a = true //I/flutter (15540): _mapRet = {ret: 200, data: false, msg: } //I/flutter (15540): 网络请求过程异常e = NoSuchMethodError: Class 'bool' has no instance method '[]'. if (_mapRet['data'] is Map) { String _rules = _mapRet['data']["rules"].trim(); //print('_rules = ${_rules}'); print('_rules.length = ${_rules.length}'); //_rules.length = 0 List _list = []; if (_rules.isNotEmpty) { List _list2 = _rules.split(','); print('_list2 = $_list2'); //I/flutter (15540): _list2 = [1968, 1972, 1973, 1969, 1976, 1977, 2008, 2009, 2011, 2014, // 2015, 2018, 2029, 2030, 2031, 2054, 2055, 2035, 2036, 2037, 2041, 2042, 2043, 2047, 2048, // 2049, 2053, 1970, 1980, 1981, 1971, 1984, 1985, 1992, 1993, 2000, 2001, 2020, 2022] int len = _list2.length; List _list3 = []; for (int i = 0; i < len; i++) { _list3.add(int.parse(_list2[i].trim())); } _list = _list3; } print('_list = $_list'); //I/flutter (15540): _list = [{uid: 135, group_id: 31}, {uid: 135, group_id: 27}] g_userInfo.userRulesMap[_mapRet['data']['id']] = _list; print('g_userInfo.userRulesMap = ${g_userInfo.userRulesMap}'); // I/flutter (15540): g_userInfo.userGroupIDlist = [31, 27] } else { print('获取数据失败!'); } print('网络请求过程正常完成'); } else { throw Exception('后端接口出现异常,请检测代码和服务器情况.........'); } } catch (e) { print('网络请求过程异常e = ${e}'); Fluttertoast.showToast( msg: 'ERROR:======>${e}', toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, ); } } //1、根据用户ID获取用户所属角色(用户组) Future getUserAccess({int user_id = -1}) async { if (user_id < 0) { user_id = g_userInfo.mapUserInfo['user_id']; } var api = ServicePath.getUserAccessUrl; print(api); //I/flutter (15540): http://125.64.218.67:9904/?s=App.User_User.GetAccess String random = RandomBit(6); Map map = { 'random': random, 'sign': GenerateMd5(APPkey + random), 'uid': user_id, }; print('开始处理登录请求...'); Response response; Dio dio = Dio(); //{ // "ret": 200, // "data": [ // { // "uid": 136, // "group_id": 32 // }, // { // "uid": 136, // "group_id": 33 // } // ], // "msg": "" // } try { print('response = ${response}'); // I/flutter (15540): response = null response = await dio.post(api, data: map); print('response = ${response}'); // I/flutter (15540): response = {"ret":200,"data":[{"uid":135,"group_id":31},{"uid":135,"group_id":27}],"msg":""} if (response.statusCode == 200) { Map _mapRet = await getMapFromJson(response.data); print('_mapRet = ${_mapRet}'); // I/flutter (15540): _mapRet = {ret: 200, data: [{uid: 135, group_id: 31}, {uid: 135, group_id: 27}], msg: } List _list = _mapRet['data']; print('_list = $_list'); //I/flutter (15540): _list = [] if (_list.isNotEmpty) { g_userInfo.userGroupIDlist.clear(); int len = _list.length; for (int i = 0; i < len; i++) { g_userInfo.userGroupIDlist.add(_list[i]["group_id"]); eventBus.fire(GroupIdUpdateEvent('g_userInfo.userGroupIDlist 数据已更新')); //这样刷新有效 } } print('g_userInfo.userGroupIDlist = ${g_userInfo.userGroupIDlist}'); //I/flutter (15540): g_userInfo.userRulesMap = {31: []} print('网络请求过程正常完成'); } else { throw Exception('后端接口出现异常,请检测代码和服务器情况.........'); } } catch (e) { print('网络请求过程异常e = ${e}'); Fluttertoast.showToast( msg: 'ERROR:======>${e}', toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, ); } } //3、获取后台用户角色分组分页列表数据 ServicePath.getUserGroupListUrl //5、获取后台功能分类分页列表数据 ServicePath.getUserAuthListUrl //x、获取后台 x 分类分页列表数据 // int pages 为获取的页数, -1 为 All;int perpage 为每页记录数 // 返回: // mapRecordList = { // 'mapRecordListRet': {}, // 'listRecordList': [], // }; Future getRecordList({@required String api, int pages = 3, int perpage = 20}) async { print(api); int _total = 0; //第一页时保存数据库中记录总数 int _counter = 0; //已读取的记录数计数器 int _page = 0; String random = RandomBit(6); Map map = { 'random': random, 'sign': GenerateMd5(APPkey + random), 'page': _page, 'perpage': perpage, }; print('开始处理登录请求...'); Response response; Dio dio = Dio(); Map mapRecordList = { 'mapRecordListRet': {}, 'listRecordList': [], }; try { while (pages < 0 ? true : _page < pages) { map['page']++; response = await dio.post(api, data: map); print('response = ${response.toString()}'); if (response.statusCode == 200) { mapRecordList['mapRecordListRet'] = await getMapFromJson(response.data); print('mapRecordList[\'mapRecordListRet\'] = ${mapRecordList['mapRecordListRet']}'); //第一页时保存数据库中记录总数 if (1 == map['page']) { _total = mapRecordList['mapRecordListRet']['data']['total']; } mapRecordList['listRecordList'].addAll(mapRecordList['mapRecordListRet']['data']['items']); //print('mapRecordList[\'listRecordList\'] = ${mapRecordList['listRecordList']}'); print('map[\'page\'] = ${map['page']}'); _counter = mapRecordList['listRecordList'].length; //已读取的记录数计数器 print('_counter = $_counter'); //I/flutter (23648): _counter = 8 print('_total = $_total'); // I/flutter (23648): _total = 8 //已读取的记录数计数器,超过或等于数据库中记录总数时,则终止循环 if (_counter >= _total) { return mapRecordList; } print('第 ${map['page']} 次网络请求过程正常完成'); } else { throw Exception('后端接口出现异常,请检测代码和服务器情况.........'); } } } catch (e) { print('网络请求过程异常e = ${e}'); Fluttertoast.showToast( msg: 'ERROR:======>${e}', toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, ); } return mapRecordList; } Map mapUserGroupList = { 'mapRecordListRet': { "ret": 200, "data": { "items": [ { "id": 35, "jgid": 2, "type": 0, "title": "局领导", "level": 0, "pid": 0, "sort": 1, "status": 1, "rules": "" }, { "id": 34, "jgid": 2, "type": 0, "title": "系统管理", "level": 0, "pid": 0, "sort": 1, "status": 1, "rules": "" }, { "id": 33, "jgid": 2, "type": 1, "title": "参观者", "level": 0, "pid": 0, "sort": 4, "status": 1, "rules": "1968,1972,1973,1969,1976,1977,2008,2009,2011,2014,2015,2018,2029,2030,2031,2054,2055,2035,2036,2037,2041,2042,2043,2047,2048,2049,2053,1970,1980,1981,1971,1984,1985,1992,1993,2000,2001,2019,2020,2022" }, { "id": 32, "jgid": 2, "type": 0, "title": "演示账户", "level": 0, "pid": 0, "sort": 3, "status": 1, "rules": "1968,1972,1973,1969,1976,1977,2008,2009,2011,2014,2015,2018,2029,2030,2031,2054,2055,2035,2036,2037,2041,2042,2043,2047,2048,2049,2053,1970,1980,1981,1971,1984,1985,1992,1993,2000,2001,2020,2022" }, { "id": 31, "jgid": 2, "type": 0, "title": "监控室", "level": 0, "pid": 0, "sort": 2, "status": 1, "rules": "" }, { "id": 30, "jgid": 2, "type": 0, "title": "中心领导", "level": 0, "pid": 0, "sort": 1, "status": 1, "rules": "1968,1972,1973,1974,1975,1969,1976,1977,1978,1979,1970,1980,1981,1982,1983,1971,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007" }, { "id": 28, "jgid": 2, "type": 1, "title": "审核操作员", "level": 0, "pid": 0, "sort": 3, "status": 1, "rules": "1968,1972,1973,1974,1975,1969,1976,1977,1978,1979,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2029,2030,2031,2054,2055,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,1970,1980,1981,1982,1983" }, { "id": 26, "jgid": 2, "type": 1, "title": "管理员", "level": 0, "pid": 0, "sort": 2, "status": 1, "rules": "1968,1972,1973,1974,1975,1969,1976,1977,1978,1979,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2029,2030,2031,2054,2055,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,1970,1980,1981,1982,1983,1971,1984,1985,1986,1987,1988,1989,1990,1991,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028" } ], "total": 8, "page": 1, "perpage": 20 }, "msg": "" }, 'listRecordList': [], }; Map mapUserAuthList = { 'mapRecordListRet': {}, 'listRecordList': [], }; Map mapRecordList = { 'mapRecordListRet': {}, 'listRecordList': [], }; //用户功能权限索引map,便于直观理解和处理。map_UserAuth.length = 78;1968 - 2069,中间有许多ID没有 Map map_UserAuth = { 1968: '黑烟车初审', 1969: '黑烟车复审', 1970: '推送交警', 1971: '设备管理', 1972: '信息审核', 1973: '查看', 1975: '审核', 1976: '信息审核', 1977: '查看', 1979: '审核', 1980: '推送交警', 1981: '查看', 1983: '审核', 1984: 'LED显示设置', 1985: '查看', 1986: '新增', 1987: '编辑', 1988: '锁定', 1989: '删除', 1990: '导出', 1991: '导入', 1992: '设备管理', 1993: '查看', 1994: '新增', 1995: '编辑', 1996: '锁定', 1997: '删除', 1998: '导出', 1999: '导入', 2000: '点位管理', 2001: '查看', 2002: '新增', 2003: '编辑', 2004: '锁定', 2005: '删除', 2006: '导出', 2007: '导入', 2008: '历史数据', 2009: '查看', 2010: '新增', 2014: '审核', 2015: '打印', 2016: '导出', 2019: '报警信息管理', 2020: '查看', 2023: '锁定', 2025: '审核', 2027: '导出', 2028: '分析', 2029: '查询与统计', 2030: '历史数据查询', 2031: '查看', 2034: '导出', 2035: '分析', 2036: '车辆点位频率分析', 2037: '查看', 2041: '分析', 2042: '车辆轨迹查询', 2043: '查看', 2047: '分析', 2048: '年度数据统计', 2049: '查看', 2053: '分析', 2054: '实时统计', 2055: '实时统计今日抓拍数量', 2056: '历史数据', 2057: '查看', 2059: '审核', 2060: '导出', 2061: '监测点位状态', 2062: '查看', 2063: '分析', 2064: '监测点位状态详情', 2065: '查看', 2066: '分析', 2067: '车流量统计', 2068: '查看', 2069: '分析', }; Future getUserAuthMap({@required String value, String key = 'id'}) { int len = mapUserAuthList['listRecordList'].length; map_UserAuth.clear(); for (int i = 0; i < len; i++) { map_UserAuth[mapUserAuthList['listRecordList'][i][key]] = mapUserAuthList['listRecordList'][i][value]; } map_UserAuth = mapSort(map_UserAuth); print('map_UserAuth.length = ${map_UserAuth.length}'); //print('map_UserAuth = $map_UserAuth'); //输出不全 my_segmentPrint(json_print(map_UserAuth, 1)); } Future getUserAuth() { int len = mapUserAuthList['listRecordList'].length; map_UserAuth.clear(); for (int i = 0; i < len; i++) { map_UserAuth[mapUserAuthList['listRecordList'][i]["id"]] = mapUserAuthList['listRecordList'][i]["title"]; } //按抓拍次数排序,升序 // listHycsGetList2.sort((a, b) => // (a[mapWzxxDataText[_selectedValue]].split(',').length.toString()) // .compareTo(b[mapWzxxDataText[_selectedValue]].split(',').length.toString())); //print('map_UserAuth = $map_UserAuth'); //输出不全 print('map_UserAuth.length = ${map_UserAuth.length}'); my_segmentPrint('map_UserAuth = ${map_UserAuth}'); map_UserAuth = mapSort(map_UserAuth); my_segmentPrint('map_UserAuth = ${map_UserAuth}'); //I/flutter ( 5140): map_UserAuth = {1968: 黑烟车初审, 1969: 黑烟车复审, 1970: 推送交警, 1971: 设备管理, 1972: 信息审核, 1973: 查看, 1975: 审核, 1976: 信息审核, 1977: 查看, 197 // 9: 审核, 1980: 推送交警, 1981: 查看, 1983: 审核, 1984: LED显示设置, 1985: 查看, 1986: 新增, 1987: 编辑, 1988: 锁定, 1989: 删除, 1990: 导出, 1991: 导入, 1992: 设备管理, 1993: // 查看, 1994: 新增, 1995: 编辑, 1996: 锁定, 1997: 删除, 1998: 导出, 1999: 导入, 2000: 点位管理, 2001: 查看, 2002: 新增, 2003: 编辑, 2004: 锁定, 2005: 删除, 2006: 导出, 2007: 导 // 入, 2008: 历史数据, 2009: 查看, 2010: 新增, 2014: 审核, 2015: 打印, 2016: 导出, 2019: 报警信息管理, 2020: 查看, 2023: 锁定, 2025: 审核, 2027: 导出, 2028: 分析, 2029: 查询与统 // 计, 2030: 历史数据查询, 2031: 查看, 2034: 导出, 2035: 分析, 2036: 车 // I/flutter ( 5140): 辆点位频率分析, 2037: 查看, 2041: 分析, 2042: 车辆轨迹查询, 2043: 查看, 2047: 分析, 2048: 年度数据统计, 2049: 查看, 2053: 分析, 2054: 实时统计, 2055: 实时 // 统计今日抓拍数量, 2056: 历史数据, 2057: 查看, 2059: 审核, 2060: 导出, 2061: 监测点位状态, 2062: 查看, 2063: 分析, 2064: 监测点位状态详情, 2065: 查看, 2066: 分析, 2067: 车流量 // 统计, 2068: 查看, 2069: 分析} } mapSort(Map map) { // List keys = map.keys.toList(); // // key排序 // keys.sort((a, b) { // List al = a.codeUnits; // List bl = b.codeUnits; // for (int i = 0; i < al.length; i++) { // if (bl.length <= i) return 1; // if (al[i] > bl[i]) { // return 1; // } else if (al[i] < bl[i]) return -1; // } // return 0; // }); var sortedKeys = map_UserAuth.keys.toList()..sort(); //print('sortedKeys = $sortedKeys'); //输出不全 //segmentPrint('sortedKeys = ${sortedKeys}'); //I/flutter ( 5140): sortedKeys = [1968, 1969, 1970, 1971, 1972, 1973, 1975, 1976, 1977, 1979, 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 199 // 4, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2014, 2015, 2016, 2019, 2020, 2023, 2025, 2027, 2028, 2029, 2030, 2031, 203 // 4, 2035, 2036, 2037, 2041, 2042, 2043, 2047, 2048, 2049, 2053, 2054, 2055, 2056, 2057, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069] //new一个map按照keys的顺序将原先的map数据取出来就可以了。 Map sortedMap = {}; sortedKeys.forEach((element) { sortedMap[element] = map[element]; }); return sortedMap; }