掌桥专利:专业的专利平台
掌桥专利
首页

一种动态菜单的实现方法及系统及装置及介质

文献发布时间:2023-06-19 19:28:50


一种动态菜单的实现方法及系统及装置及介质

技术领域

本发明涉及树形菜单技术领域,具体地,涉及一种动态菜单的实现方法及系统及装置及介质。

背景技术

在当前的中后台前端项目中,常常会涉及到不同用户对应不同菜单显示的需求,常用的方式是后端构建菜单树,再按照不同的用户权限逻辑进行菜单树的筛选然后将经过筛选后的完整菜单树结构返回给前端,前端再去获取完整的菜单树并进行渲染显示,采用此方式进行菜单树的显示,主要由后端构建菜单树并控制菜单树的动态渲染逻辑,增加了对后端接口请求的依赖程度和数据请求复杂度。

发明内容

为减少菜单树在显示渲染过程中对后端接口请求的依赖度和数据请求的复杂度,本发明提供了一种动态菜单的实现方法,所述方法包括:

S1.获取第一用户的登录数据;

S2.基于所述第一用户的登录数据,获取所述第一用户的角色数据;

S3.将所述第一用户的角色数据与预设角色数据进行匹配,若匹配失败,则进行步骤S4,若匹配成功,则进行步骤S7;

S4.通过前端构建第一初始菜单树,所述第一用户的角色数据中与所述预设角色数据匹配失败对应的用户为第二用户,所述第二用户拥有所述第一初始菜单树的非空真子集;

S5.基于所述第二用户拥有所述第一初始菜单树的非空真子集,后端获取所述第二用户对应的菜单权限标识数组并返回至所述前端;

S6.基于所述第二用户对应的菜单权限标识数组,所述前端对所述第一初始菜单树进行过滤得到第一子菜单树;

S7.通过前端构建多个第一菜单树,多个所述第一菜单树与多个用户角色形成一一映射关系,所述第一用户的角色数据中与所述预设角色数据匹配成功对应的用户为第三用户;

S8.基于多个所述第一菜单树与多个所述用户角色的映射关系,所述前端获取所述第三用户对应的第二子菜单树。

本发明原理:通过获取第一用户的登录数据得到第一用户的角色数据,再基于第一用户的角色数据与预设角色数据的匹配结果将第一用户分为第二用户和第三用户(匹配失败为第二用户,匹配成功为第三用户),对于获得第二用户对应的菜单树,首先通过前端构建一个完整的菜单树即第一初始菜单树,第二用户拥有该第一初始菜单树的非空真子集,再通过后端去获取第二用户对应的菜单权限标识数组并返回至前端,前端再基于返回的第二用户对应的菜单权限标识数组对第一初始菜单树进行过滤,得到第二用户对应的第一子菜单树。对于获得第三用户对应的菜单树,首先通过前端构建多个第一菜单树,并且多个第一菜单树与多个用户角色是一一映射关系,基于第三用户的角色数据得到该角色对应的菜单树,即得到第三用户对应的第二子菜单树。第二用户对应菜单树的获得,实现了前端去控制菜单树的生成及筛选,而后端只需要返回第二用户对应的菜单权限标识数组,不需要后端再去构建菜单树并将完整的菜单树返回给前端,减少了数据请求的复杂度;第三用户对应菜单树的获得,对于一些特殊的用户权限系统拥有固定的角色权限,每个角色权限拥有固定的菜单权限,通过控制角色权限与菜单权限的一一映射关系,再通过前端去获取第三用户对应的角色权限获得其对应的菜单权限从而得到对应的菜单树,而不用进行后端请求,减少了对后端接口请求的依赖度。

优选的,通过前端构建第一初始菜单树包括:将菜单数据库中的数据分级放入N个数组中,其中N为≧2的正整数;获取第1级数组中的第1数据;获取第2级数组中的第2数据,并与所述第1数据中对应的数据进行拼接;持续获取所述N个数组中的数据,直至获取到第N级数组中的第N数据,并与所述第N-1数据中对应的数据进行拼接。

其中,菜单树是一种数据结构,它是由n个有限节点组成一个具有层次关系的集合以及在该集合上定义的一种关系构成的,集合中的元素称为树的节点,所定义的关系称为父子关系,父子关系在树的节点之间建立了一个层次结构,按照菜单树中元素的层次结构将菜单数据库中的数据分级放入N个数组中,每个数组中的数据都为同一级别,第1级数组中的第1数据就为根节点,再通过菜单树中数据之间的父子关系,获取第2级数组中的第2数据并与第1数据中对应的数据进行拼接(可通过树形菜单插件实现),按照上述方式对菜单数据库中的数据进行处理得到第一初始菜单树。

优选的,所述前端对所述第一初始菜单树过滤得到第一子菜单树包括:基于所述第二用户对应的菜单权限标识数组,对所述第一初始菜单树中的数据均添加过滤标识;基于所述过滤标识,对所述第一初始菜单树进行递归过滤。

其中,菜单权限标识数组指的是由菜单权限唯一标识组成的数组数据,菜单权限标识即Permission(许可)是控制权限的关键字段,系统根据该权限标识与Controller(控制器)内指定的@RequiresPermissions注解进行对应,匹配成功后才可以访问该URL地址(统一资源定位符,即通过访问该URL地址来获取该权限标识对应的菜单数据)。基于第二用户的菜单权限标识数组对第二用户对应的菜单数据进行访问,基于访问结果对第一初始菜单树中的数据添加过滤标识(如visible:true和visible:false),再基于添加的过滤标识对第一初始菜单树进行递归过滤得到第一子菜单树。

优选的,对所述第一初始菜单树进行递归过滤包括:所述过滤标识包括第一过滤标识和第二过滤标识;将所述第一初始菜单树中数据的过滤标识与所述第一过滤标识和所述第二过滤标识进行匹配;当所述第一初始菜单树中数据的过滤标识与所述第一过滤标识匹配成功,则保留与所述第一过滤标识匹配成功对应的所述第一初始菜单树数据;当所述菜单树中数据的过滤标识与所述第二过滤标识匹配成功,则删除与所述第二过滤标识匹配成功对应的所述第一初始菜单树数据。

其中,第一过滤标识的作用在于将第一初始菜单树中属于第二用户对应的菜单树数据进行保留,第二过滤标识的作用在于将第一初始菜单树中不属于第二用户对应的菜单树数据进行删除,最后经过第一过滤标识和第二过滤标识对第一初始菜单树的过滤得到第二用户对应的第一子菜单树。

优选的,通过前端构建多个第一菜单树包括:

a1.通过所述前端构建第二初始菜单树;

a2.基于所述第三用户的角色权限为所述第二初始菜单树的每一个节点分配权限值,所述每一个节点的权限值为0或者1;

a3.对所述第二初始菜单树的每一个节点的权限值进行判断,将权限值为0对应的节点从所述第二初始菜单树中删除,将权限值为1对应的节点保留;

a4.重复步骤a2至步骤a3,得到多个用户一一对应的多个所述第一菜单树。

其中,对于特殊的角色权限系统,每个角色权限都对应了其相应的菜单权限,在通过前端去构建每个角色所对应的第一菜单树时,首先通过前端构建包括了所有角色对应菜单权限的第二初始菜单树,然后基于第三用户的角色权限对第二初始菜单树中的每个节点分配权限值0或者1,对权限值为0的节点进行删除,对权限值为1的节点进行保留,就得到了基于用户角色权限所对应的第一菜单树,重复上述步骤,就能得到每个角色所对应的菜单树即得到多个第一菜单树。前端通过获取用户的角色信息从而得到对应的第一菜单树,而不用进行后端请求,减少了对后端接口的依赖程度。

优选的,所述方法还包括:所述前端对所述第一子菜单树和所述第二子菜单树进行优化处理,包括获取所述第二用户对所述第一子菜单树中各个节点进行选择操作的操作次数并与预设操作次数进行对比,将超过所述预设操作次数对应的菜单树节点收缩至所述第一子菜单树节点对应的父节点下的隐藏节点;还包括获取所述第三用户对所述第二子菜单树中各个节点进行选择操作的操作次数并与所述预设操作次数进行对比,将超过所述预设操作次数对应的菜单树节点收缩至所述第二子菜单树节点对应的父节点下的隐藏节点。

其中,终端对多级菜单树进行显示时,用户需要逐个节点展开以查找所需要的节点,而当用户需要查找菜单树中距离根节点较远的节点数据时,如果选择逐个节点展开,就会导致菜单树展开时占用大量的显示空间,因此通过设置隐藏节点来对需要展开但不需要进行下一步操作的节点进行隐藏,再利用对节点的操作次数是否超过预设操作次数来判定菜单树从第几级节点开始设置隐藏节点,减少因为菜单树展开而导致占用大量显示空间。

优选的,所述方法还包括:所述前端对经过优化处理后的所述第一子菜单树和所述第二子菜单树进行渲染得到对应的动态菜单。其中,前端接收经过优化处理后的第一子菜单树和第二子菜单树的相关数据,然后进行页面渲染以菜单树的形式呈现给用户。

为减少菜单树在显示渲染过程中对后端接口请求的依赖度和数据请求的复杂度,本发明还提供了一种动态菜单的实现系统,所述系统包括:

第一获取单元,用于获取第一用户的登录数据;

第二获取单元,用于基于所述第一用户的登录数据,获取所述第一用户的角色数据;

匹配单元,用于将所述第一用户的角色数据与预设角色数据进行匹配,若匹配失败,则到第一构建单元,若匹配成功,则到第二构建单元;

第一构建单元,用于通过前端构建第一初始菜单树,所述用户的角色数据中与所述预设角色数据匹配失败对应的用户为第二用户,所述第二用户拥有所述第一初始菜单树的非空真子集;

第三获取单元,用于基于所述第二用户拥有所述第一初始菜单树的非空真子集,后端获取所述第二用户对应的菜单权限标识数组并返回至所述前端;

过滤单元,用于基于所述第二用户对应的菜单权限标识数组,所述前端对所述第一初始菜单树进行过滤得到第一子菜单树;

第二构建单元,用于通过前端构建多个第一菜单树,多个所述第一菜单树与多个用户角色形成一一映射关系,所述用户的角色数据中与所述预设角色数据匹配成功对应的用户为第三用户;

第四获取单元,用于基于多个所述第一菜单树与多个所述预设角色的映射关系,前端获取与所述第三用户对应的第二子菜单树。

本发明还提供了一种动态菜单的实现装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述动态菜单的实现方法的步骤。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述动态菜单的实现方法的步骤。

本发明提供的一个或多个技术方案,至少具有如下技术效果或优点:

本发明通过前端去控制菜单树的生成及筛选,后端只需要返回对应的菜单权限标识数组即可,减少了数据请求复杂度;对一些特殊的用户权限系统,通过前端来设置角色权限与菜单权限一一对应,直接将用户菜单权限交由前端控制不用进行后端请求,减少对后端接口请求的依赖程度。

附图说明

此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,并不构成对本发明实施例的限定;

图1是本发明中一种动态菜单的实现方法流程示意图;

图2是本发明中一种动态菜单的实现系统组成示意图。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

实施例一

请参考图1,为本发明中一种动态菜单的实现方法流程示意图,所述方法包括:

S1.获取第一用户的登录数据;

S2.基于所述第一用户的登录数据,获取所述第一用户的角色数据;

S3.将所述第一用户的角色数据与预设角色数据进行匹配,若匹配失败,则进行步骤S4,若匹配成功,则进行步骤S7;

S4.通过前端构建第一初始菜单树,所述第一用户的角色数据中与所述预设角色数据匹配失败对应的用户为第二用户,所述第二用户拥有所述第一初始菜单树的非空真子集;

S5.基于所述第二用户拥有所述第一初始菜单树的非空真子集,后端获取所述第二用户对应的菜单权限标识数组并返回至所述前端;

S6.基于所述第二用户对应的菜单权限标识数组,所述前端对所述第一初始菜单树进行过滤得到第一子菜单树;

S7.通过前端构建多个第一菜单树,多个所述第一菜单树与多个用户角色形成一一映射关系,所述第一用户的角色数据中与所述预设角色数据匹配成功对应的用户为第三用户;

S8.基于多个所述第一菜单树与多个所述用户角色的映射关系,所述前端获取所述第三用户对应的第二子菜单树。

其中,前端可选择Bootstrap、Layui或者Angular等其他前端,后端可选择Laravel、CakePHP或者Django等其他后端,对于前端和后端的选择,可根据实际需求进行调整,本发明不做具体限定。

其中,通过前端构建第一初始菜单树包括:将菜单数据库中的数据分级放入N个数组中,其中N为≧2的正整数;获取第1级数组中的第1数据;获取第2级数组中的第2数据,并与所述第1数据中对应的数据进行拼接;持续获取所述N个数组中的数据,直至获取到第N级数组中的第N数据,并与所述第N-1数据中对应的数据进行拼接。例如第一初始菜单树包括有4级菜单,菜单数据库包括数据有(A、B、C、D、E、F、G),因此构建第一初始菜单树时,需要将菜单数据库中的数据分级放入4个数组中(A放入第1级数组,B和C放入第2级数组,D、E和F放入第3级数组,G放入第4级数组),将第1级数组中的第1数据(A)作为菜单树的根节点,将第2级数组中的第2数据(B和C)与第1数据中对应的数据(A)进行拼接,将第3级数组中的第3数据与第2数据中对应的数据进行拼接(D、E和B拼接,F和C拼接),将第4级数组中的第4数据与第3数据中对应的数据进行拼接(G和D拼接),从而完成第一初始菜单树的构建。上述数据只是起到解释说明的作用,可根据实际需求进行调整,本发明不做具体限定。

其中,所述前端对所述第一初始菜单树过滤得到第一子菜单树包括:基于所述第二用户对应的菜单权限标识数组,对所述第一初始菜单树中的数据均添加过滤标识;基于所述过滤标识,对所述第一初始菜单树进行递归过滤。菜单权限标识即Permission(许可)是控制权限的关键字段,系统根据该权限标识与Controller(控制器)内指定的@RequiresPermissions(需要许可)注解进行对应,匹配成功后才可以访问该URL地址(统一资源定位符,即通过访问该URL地址来获取该权限标识对应的菜单数据),基于第二用户的菜单权限标识数组对第二用户对应的菜单数据进行访问,基于访问结果对第一初始菜单树中的数据均添加过滤标识(如visible:true和visible:false),再基于添加的过滤标识对第一初始菜单树进行递归过滤得到第一子菜单树。

其中,对所述第一初始菜单树进行递归过滤包括:所述过滤标识包括第一过滤标识和第二过滤标识;将所述第一初始菜单树中数据的过滤标识与所述第一过滤标识和所述第二过滤标识进行匹配;当所述第一初始菜单树中数据的过滤标识与所述第一过滤标识匹配成功,则保留与所述第一过滤标识匹配成功对应的所述第一初始菜单树数据;当所述菜单树中数据的过滤标识与所述第二过滤标识匹配成功,则删除与所述第二过滤标识匹配成功对应的所述第一初始菜单树数据。例如第一过滤标识为visible:true,第二过滤标识为visible:false,将第一初始菜单树中数据的过滤标识与第一过滤标识和第二过滤标识进行匹配,当第一初始菜单树中数据的过滤标识与第一过滤标识visible:true匹配成功,则将其对应的第一初始菜单树数据进行保留,当第一初始菜单树中数据的过滤标识与第二过滤标识visible:false匹配成功,则将其对应的第一初始菜单树数据进行删除。上述举例只是起到解释说明作用,对于过滤标识可根据实际需求进行选择,本发明不做具体限定。

其中,通过前端构建多个第一菜单树包括:

a1.通过所述前端构建第二初始菜单树;

a2.基于所述第三用户的角色权限为所述第二初始菜单树的每一个节点分配权限值,所述每一个节点的权限值为0或者1;

a3.对所述第二初始菜单树的每一个节点的权限值进行判断,将权限值为0对应的节点从所述第二初始菜单树中删除,将权限值为1对应的节点保留;

a4.重复步骤a2至步骤a3,得到多个用户一一对应的多个所述第一菜单树。

例如第二初始菜单树包括有根节点H,I节点和J节点与H节点连接,K节点与I节点连接,L节点与J节点连接,M节点和N节点与K节点连接,O节点与L节点连接。第三用户的角色权限包括了对H、I、K和N节点的操作权限,因此对H、I、K和N节点分配权限值为1,对J、L、N和O节点分配权限值为0,将权限值为1的H、I、K和N节点进行保留,将权限值为0的J、L、N和O节点进行删除,得到第三用户的第二子菜单树,即基于用户的角色权限得到其对应的第一菜单树,当用户的角色权限发生变化时,其对第二初始菜单树每个节分配的权限值也随之变化,从而得到多个用户角色一一对应的多个第一菜单树。上述数据只是起到解释说明的作用,可根据实际情况进行调整,本发明不做具体限定。

其中,所述方法还包括:所述前端对所述第一子菜单树和所述第二子菜单树进行优化处理,包括获取所述第二用户对所述第一子菜单树中各个节点进行选择操作的操作次数并与预设操作次数进行对比,将超过所述预设操作次数对应的菜单树节点收缩至所述第一子菜单树节点对应的父节点下的隐藏节点;还包括获取所述第三用户对所述第二子菜单树中各个节点进行选择操作的操作次数并与所述预设操作次数进行对比,将超过所述预设操作次数对应的菜单树节点收缩至所述第二子菜单树节点对应的父节点下的隐藏节点。例如第一子菜单树包括有7级菜单,当用户查找第n级菜单的某个节点时,需要进行n-1次操作,设置预设操作次数为3次,如果需要查找第7级菜单的某个节点,就需要从第5级菜单开始设置隐藏节点,将第5、第6和第7级菜单中不需要操作的节点收缩至其对应的隐藏节点中,避免因为菜单树展开而导致占用大量显示空间的问题。上述数据只是起到解释说明的作用,可根据实际需求进行调整,本发明不做具体限定。

其中,所述方法还包括:所述前端对经过优化处理后的所述第一子菜单树和所述第二子菜单树进行渲染得到对应的动态菜单。页面渲染也就是对数据解析后展示在页面的过程,比如在浏览器中从输入地址到展现出页面大致有以下步骤,最开始获取HTML(超文本标记语言),在下载完成后开始解析,在解析HTML的过程中如遇到css、js等外部资源时,浏览器会立即下载这些资源,然后浏览器会把解析出来的HTML转为DOM对象并组装DOM树(css也是同理,会把css解析成css对象并组装成CSSOM树),在构建好DOM树和CSSOM树后,浏览器会根据DOM树和CSSOM树构建渲染树,在构建后渲染树后,就确定了所有元素的位置与样式,浏览器再对所有元素的位置、样式和大小进行计算,最后将页面呈现给用户。同理,前端对经过优化处理后的第一子菜单树和第二子菜单树进行渲染得到动态菜单视图呈现给用户。

在本发明实施例中,首先获取用户的登录数据,从而得到用户的角色数据,预设角色数据为管理员和一般用户,当用户的角色数据为游客用户时,此时用户的角色数据与预设角色数据匹配失败,则通过前端构建完整的初始菜单树,而游客用户只拥有当前初始菜单树的某个子集,通过后端获取游客用户的菜单权限标识数组并返回给前端,前端再基于返回的菜单权限标识数组为初始菜单树中的数据添加过滤标识,再基于添加的过滤标识对初始菜单树中的数据进行递归过滤得到该游客用户的子菜单树,最后通过前端对该子菜单树进行渲染得到动态菜单,采用此方式得到游客用户的子菜单树,只需要通过前端去控制菜单树的生成及筛选,后端只需要返回对应的菜单权限标识数组,不需要后端构建菜单树(如果后端处理,请求需要返回完整的菜单树结构,前端获取并显示),减少了数据请求复杂度;当用户的角色数据为管理员时,用户的角色数据与预设角色数据匹配成功,则通过前端分别构建管理员的菜单树和一般用户的菜单树,此时基于用户的角色数据为管理员,通过前端直接获取已经构建好的管理员的菜单树,再对获取的菜单树进行渲染得到管理员的动态菜单,采用此方式得到管理员的菜单树,是由前端来控制用户的菜单权限,不再需要通过后端接口进行请求,减少了对后端接口的依赖程度。

实施例二

请参考图2,为本发明中一种动态菜单的实现系统组成示意图,所述系统包括:

第一获取单元,用于获取第一用户的登录数据;

第二获取单元,用于基于所述第一用户的登录数据,获取所述第一用户的角色数据;

匹配单元,用于将所述第一用户的角色数据与预设角色数据进行匹配,若匹配失败,则到第一构建单元,若匹配成功,则到第二构建单元;

第一构建单元,用于通过前端构建第一初始菜单树,所述用户的角色数据中与所述预设角色数据匹配失败对应的用户为第二用户,所述第二用户拥有所述第一初始菜单树的非空真子集;

第三获取单元,用于基于所述第二用户拥有所述第一初始菜单树的非空真子集,后端获取所述第二用户对应的菜单权限标识数组并返回至所述前端;

过滤单元,用于基于所述第二用户对应的菜单权限标识数组,所述前端对所述第一初始菜单树进行过滤得到第一子菜单树;

第二构建单元,用于通过前端构建多个第一菜单树,多个所述第一菜单树与多个用户角色形成一一映射关系,所述用户的角色数据中与所述预设角色数据匹配成功对应的用户为第三用户;

第四获取单元,用于基于多个所述第一菜单树与多个所述预设角色的映射关系,前端获取与所述第三用户对应的第二子菜单树。

实施例三

本发明实施例三提供了一种动态菜单的实现装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述动态菜单的实现方法的步骤。

其中,所述处理器可以是中央处理器(CPU,Central Processing Unit),还可以是其他通用处理器、数字信号处理器(digital signal processor)、专用集成电路(Application Specific Integrated Circuit)、现成可编程门阵列(Fieldprogrammablegate array)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的数据,实现发明中动态菜单的实现装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等。此外,存储器可以包括高速随机存取存储器、还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡,安全数字卡,闪存卡、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

实施例四

本发明实施例四提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述动态菜单的实现方法的步骤。

所述动态菜单的实现装置如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序可存储于一计算机可读存介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码、对象代码形式、可执行文件或某些中间形式等。所述计算机可读取介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存储器、点载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。

本发明已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。

同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。

此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。

计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。

本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。

此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。

同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。

针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。

最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

技术分类

06120115927510