本章介绍功能模块菜单、按钮、列表栏位如何配置。
运行框架,进入“系统管理-模块管理”页面,点击左侧上级模块,点击【新增】按钮
勾选模块点击【复制】或【复制】按钮,弹出窗口,选择上级菜单,将所选模块复制或移动到指定菜单
弹出新增或编辑模块界面,输入代码,名称、图标,配置按钮、栏位等信息
说明:
图标 默认支持Font Awesome,其他图标需要在wwwroot下添加引用
描述 将显示在模块页面顶部,用于简单介绍模块功能
目标 指向的页面类全称,页面类可以是程序集内部类,无需公开
为UI页面写测试用例时(比如web页面,移动端页面),测试用例会存在大量元素和操作细节。当UI变化时,测试用例也要跟着变化,PageObject很好的解决了这个问题!使用UI自动化测试工具时(包括selenium,appium等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而PageObject让自动化脚本井井有序,将page单独维护并封装细节,可以使testcase更稳健,不需要大改大动。具体做法:把元素信息和操作细节封装到Page类中,在测试用例上调用Page对象(PageObject),比如存在一个功能“选取相册标题”,需要为之建立函数selectAblumWithTitle(),函数内部是操作细节findElementsWithClass(‘album’)等: 以选“取相册标题”举例,伪代码如下:selectAblumWithTitle(){ #选取相册 findElementsWithClass('album') #选取相册标题 findElementsWithClass('title-field') #返回标题内容 re
作者:http://www.cnblogs.com/cathsfz/Ajax的长连接,或者有些人所说的Comet,就是指以XMLHttpRequest的方式连接服务器,连接后服务器并非即时写入相应并返回。服务器会保持连接并等待一个需要通知客户端的事件,该事件发生后马上将数据写入响应,这时候客户端就以相当“实时”的方式接收到事件通知。具体的通信模型,请参考这篇文章:《Comet:基于HTTP长连接的“服务器推”技术》,里面已经说得非常详细了,我就不再复述了。我们接着开始讨论如何使用.NET实现这个模型。首先我们能想到的是,我们需要一个WebService,可以是ASP.NETWebService,也可以是WCFWebService,ASP.NETAJAXLibrary两者都支持。在这里,为了简单起见,就选择大家更熟悉的ASP.NETWebService举例。然后,我们写下以下两个函数签名:publicvoidSend(Messagemessage); publicMessageWait();其中,Send函数用来发送一个Message对象,而Wait函数用来等待一个Message对象。然
零、新建Python文件在你喜欢的地方新建一个名为first_python.py的文件,然后利用Atom打开(具体Atom怎么配置Python开发环境,这里就不详述,大家可以在网上搜索相关的教程) 在文件中输入如下代码:defSayHello(): print('HelloPython!') if__name__=='__main__': SayHello()复制一、运行Python文件打开windows命令行,切换到文件所在的目录下,输入如下代码:pythonfirst_python.py复制输出内容如下图: 二、发生了什么当运行该py文件时,该文件将被视为主模块,所以当代码运行到***ifname==‘main’***时,将调用 **SayHello()函数,该函数将打印出HelloPython!三、小结本节主要介绍了python文件的创建和运行方法,对于我们学习来说,通过命令行的形式运行文件无可厚非,但是 对于项目来说此种方法不可取,后面在涉及到实战项目的时候,我将是用另一种方法运行主函数。
内容一览?:正则常见函数实现千分位标注全局匹配与lastIndex字符串第一个出现一次的字符正则常见函数正则表达式常用的方法分为2类:字符串上调用,进行正则规则匹配。操作对象是正则表达式正则表达式上调用。操作对象是字符串。准备了下面代码:constpattern=/runoob/gi;//正则表达式 conststr="VisitRunoob!runoob";//待匹配字符串复制①字符串上调用的方法,常见的有:search/match/replace//Return:Number代表搜索到的开始地址 console.log(str.search(/Runoob/i)); //Return:Array匹配出来的所有字符串 console.log(str.match(/run/gi)); //Return:新的string对象 console.log(str.replace(/visit/i,"visit"));复制②正则表达式对象上的方法,常见的有:test/exec//Return:Boolean代表是否符合匹配 console.log(pa
1、什么是线程?2、什么是线程安全和线程不安全?3、什么是自旋锁?4、什么是Java内存模型?5、什么是CAS?6、什么是乐观锁和悲观锁?7、什么是AQS?8、什么是原子操作?在JavaConcurrencyAPI中有哪些原子类(atomicclasses)?9、什么是Executors框架?10、什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?11、什么是Callable和Future?12、什么是FutureTask?13、什么是同步容器和并发容器的实现?14、什么是多线程?优缺点?15、什么是多线程的上下文切换?16、ThreadLocal的设计理念与作用?17、ThreadPool(线程池)用法与优势?18、Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。19、synchronized和ReentrantLock的区别?20、Semaphore有什么作用?21、JavaConcurrencyAPI中的Lock接口(Lockinterface)是什么?对比同步它有什么优势?22、Hashtable的size(
这是曾经的一个面试题,正好引出状态机编程思想。挺不错的一个例子。题目描述给定一个字符串,它由以下字符组成:左括号“(”右括号“)”下划线“_” 大小写字母构成的字符串(单字母也算作字符串)该字符串组成有以下规则限定:括号成对出现且不会嵌套,保证语法正确字符串可以出现在括号内,也可以出现在括号外各个字符串之间必须用下划线“_”隔开括号外的字符串必须以下划线“_”为边界;括号内字符串的边界可以是下划线“_”,也可以是括号“(”、“)”请解决问题:括号内字符串个数统计括号外最长字符串的长度 传统思路我们拿到这个问题时,第一感觉往往是顺序遍历字符串,并检测左右相邻字符是否满足边界条件,从而进行分支处理。但是这样做有以下棘手之处:判定括号边界时需要保存之前的状态,而处理程序和判定状态逻辑往往混乱成一锅粥,难解难分不同状态下的处理逻辑不同,这样对于大型问题,逻辑之间有可能产生耦合,甚至在不同状态间跳来跳去还有效率问题,每次处理当前字符时还有同时处理左右相邻字符,工作量有冗余,效率降低嗯,不信的话,可以自己按照上述最简单的思路实现一下,你就明白了。有人说,复杂逻辑我不怕啊,细心就好。So...是时候
作者:尹非凡隆冬马上来临了,欢迎大家把4件套带回家。在北京接近0度的严寒中,企业微信终于迎来了自己第一次强势发声,「企业微信合作伙伴大会」在2017年末压轴出场了。在继续坚持连接、开放的理念之下,企业微信高调发布了两个4件套。4项开放能力:开放130多个API接口提供更多微信插件提供注册定制化开放硬件设备接入4类支持措施:创建「第三方应用市场」,提供优质应用推荐设立亿元服务奖励基金成立企业微信「合作伙伴学院」开展产品联合宣传而此前,11月19日,「阿里钉钉秋季发布会」结束之后,当时一片打call声中已经有论调说「战争提前结束了」。但现在来看,移动办公市场的战争才刚刚开始。尽管,双方都并不愿意过分强化竞争关系,但必须看到,围绕企业服务,腾讯和阿里又在开展一场旷日持久的争夺。从云服务,到第三方支付,如今,新的竞争焦点变成了移动办公。钉钉成为阿里的战略级产品,团队受到内部特殊礼遇,搬进了阿里巴巴诞生之地「湖畔花园」,足见重视程度。如今,姗姗来迟的企业微信,也在刚刚过去的11月,正式成立企业微信产品部,超过200人的编制在微信1000多人的整体规模里面,已经自承其重。而后者,同时还在今年6月,
开发WordPress主题或插件的时候,有很多比较常用的功能,例如边栏、自定义菜单、自定义文章类型等等,都需要手动书写或者复制,需要大量的时间和精力,但是有人专门做了一些工具来生成这些代码-GenerateWP.com。简介官方地址:http://generatewp.com/GenerateWP是一个可以在线自动生成WordPress功能代码的网站,有国外牛人创建的。GenerateWP上面提供了12种常用功能的代码生成工具,甚至还可以生成查询代码,只需要点击对应的工具然后按照表单填写,最后点击生成即可生成一段功能代码,复制到主题对应位置就可以了。当然,要使用这个工具,前提你是对相关开发内容熟悉,工具只是个提高效率的工具而已。GenerateWP工具和生成器内容TaxonomyGenerator使用register_taxonomy()功能创建自定义分类PostTypeGenerator使用register_post_type()功能创建自定义日志PostStatusGenerator使用register_post_status()功能创建自定义日志状态ThemeSupportGen
迁移到:http://www.bdata-cap.com/newsinfo/1741432.html 本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cossimliarity) 推荐算法以及数据挖掘算法,计算“距离”是必须的~最近想搭一个推荐系统,看了一些资料和书《写给程序员的数据挖掘指南》,此书不错,推荐大家看看,讲解得很透彻,有理论有代码,还有相关网站。看完后,你立刻就能把推荐算法应用在你的项目中~ 本文先主要说明如何计算物品或用户之间的“距离”,陆续会介绍推荐算法本身~ 用户评分表 大体上,推荐算法可以有两种简单的思路:一是相似的用户,二是相似的物品。 前者,把与你相似的用户喜欢(或购买或评价高)的商品推荐给你,也就是说,如果你跟某个用户的喜好比较接近,那么就可以把这个用户喜欢的,而你不知道(或没浏览过,或没购买过等等)的物品推荐给你。什么叫“喜好接近”,就是对某些物品的评价也好,购买也罢,都比较接近,就认为,你和他喜好相同~ 前者的缺陷在于,用户的评价毕竟是少数,想想,你评价过(显式评价)的物品有多少!大多数还
在移动端开发的时候经常会碰到区域滚动的需求,当然实现起来也是非常简单的,给需要滚动的元素定高然后添加一个overflow-y:scorll自然就可以滚动了,但是添加这个属性之后,使用chrome或者其他浏览器工具调试时是支正常的,但是到手机上时滚动效果就十分的奇怪,滚动会让人感觉有卡顿感。这个时候使用一个属性就可以解决这个问题。-webkit-overflow-scrolling:touch,这个属性会让滚动条产生回弹效果,让滚动没有那么生硬。 在MDN上是这么定义这个属性的: -webkit-overflow-scrolling属性控制元素在移动设备上是否使用滚动回弹效果.auto:使用普通滚动,当手指从触摸屏上移开,滚动会立即停止。touch:使用具有回弹效果的滚动,当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果。继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文。 然而是不是设置了这个属性之后就万事大吉了呢?也不全是这样子的,其实这个属性也还是有一些坑的。 偶尔会卡住或不能滑动 比较常见的问题有: 在safari上,使用了-we
并不是什么新鲜东西,很多JS库都使用这种方式进行模块化封装,便于各种情况下的引用。 假设开发完成的JS库(模块):myjssdk.js,使用原生及AMD的引用方式如下: 1、原生方式: <scriptsrc="//www.test.com/myjssdk.js"></script> 复制 2、AMD方式: <!--需要先引入requirejs库,并在config文件中注册“myjssdk”--> <script> require(['myjssdk'],function(jssdk){ jssdk.info(); }); </script>复制 实现方式: (function(global,factory){ if(typeofdefine==='function'&&define.amd){ //AMD规范 define(factory); }else{ //浏览器注册全局对象,自定义对象名:MyJSSDK global.MyJSSDK=factory(); } })(this,(fun
业务场景:在某些特定时刻,我们需要重新利用data中的初始值,但页面一旦经过操作,数据一般都是实时更新之后的,那么如何重置data中的初始值呢? 方法一:逐个重新赋值: this.xxx="" this.yyy="" ....复制 这种方式肯定是能够实现的,但是未免显得有些傻,是吧?再看第二种方法 方法二:this.$options.data() 在vue中:this.$data获取当前状态下的datathis.$options.data()获取该组件初始状态下的data 然后我们利用如下方法实现: Object.assign(this.$data,this.$options.data())复制 ps: Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。用法:Object.assign(target,...sources)第一个参数是目标对象,第二个参数是源对象,就是将源对象属性复制到目标对象,返回目标对象
任务锁和中断锁 https://blog.csdn.net/qq2012qiao/article/details/37561797 任务状态转换 https://blog.csdn.net/laoqiuge/article/details/78468447 今天看到关于是否能在中断中semTake的表述,感觉很不错。不过如果semtake不用等待的信号,应该也是可以的,不会导致调用者切换到blocking态 VxWorks的中断服务程序(ISR)运行在特定的空间。不同于一般的任务,中断服务程序没有任务上下文,不包含任务控制块,所有的中断服务程序使用同一中断堆栈。ISR中不能调用可能导致blocking的函数,例如:(a)不能以semTake获取信号量,因如果该信号量不可利用,内核会试图让调用者切换到blocking态;(b)malloc和free可能导致blocking,因此也不能使用;(c)应避免进行VxWorksI/O系统操作(除管道外);引伸:1,在Vxworks里,任务调度器
1、打开PHPStudy并启动 2、打开数据库管理工具、新建本地数据库(如果已经新建过就跳过这一步) (新建MySQL连接) 3、写控制器 application\index\controller\Index.php <?php namespaceapp\index\controller; //引入系统数据类 usethink\Db; //引入系统控制器类 usethink\Controller; classIndexextendsController { publicfunctionindex() { //从数据库中读取数据 $data=Db::table('user')->select(); //var_dump($data); $this->assign('data',$data); returnview(); //return'<styletype="text/css">*{padding:0;margin:0;}.think_default_text{padding:4px48px;}a{c
文章非原创,转载自:http://369369.blog.51cto.com/319630/833234 Memcache知识点梳理 Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-value对的方式存在内存中。官网下载地址:http://www.memcached.org/运行环境:linux,BSD,windows都可跑协议理论:http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt(英文) 操作流程: 1、检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。2、如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥
一、CentOS7快速开放端口: CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,baidu之后发现Centos7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口: 开启端口 [root@centos7~]#firewall-cmd--zone=public--add-port=80/tcp--permanent 查询端口号80是否开启: [root@centos7~]#firewall-cmd--query-port=80/tcp 重启防火墙: [root@centos7~]#firewall-cmd--reload 查询有哪些端口是开启的: [root@centos7~]#firewall-cmd--list-port 命令含义: --zone#作用域--add-port=80/tcp#添加端口,格式为:端口/通讯协议--permanent#永久生效,没有此参数重启后失效 不积跬步,无以至千里;不积小流,无以成江海。
如何导出超链接: 用visualbasic处理 在excel中:Alt+F11-->F7-->粘贴下面代码-->F5(运行),则会在原列接右侧出现超链 SubExtractHL() DimHLAsHyperlink ForEachHLInActiveSheet.Hyperlinks HL.Range.Offset(0,1).Value=HL.Address Next EndSub 如何取消超链接: 方法1:点击一个单元格,右键取消超链接,然后格式刷下拉。 方法2:选中要取消的列,复制,选择性粘贴(数值),即可取消。 如何加入超链接: 1.excel:假设A2是url前缀,如:http://www.baidu.com/s?wd=,B2是要查询的query, 在C2设置为如下就可以了;=HYPERLINK(A2&
先看效果演示 接下来手把手教你实现这样的效果。 minicap简介 minicap是一个可以远程获取android屏幕画面的开源库,它在低版本的Android系统上采用截屏的方式获取画面,在Android4.2以上系统上采用创建VirtualDisplay的方式来获取画面、性能大大提高。 minicap的核心功能都在minicap.so中实现,如果要进行二次开发直接引用即可。 1.mincap下载 1.1clone代码 gitclonehttps://github.com/openstf/minicap.git cdminicap gitsubmoduleinit//初始化jni/vendor/libjpeg-turbo子仓库配置 gitsubmoduleupdate//更新jni/vendor/libjpeg-turbo子仓库代码复制 1.2minicap仓库目录结构 minicap |-example简单的示例客户端,连接minicap服务端,转换为web显示 |-jni源代码,minicap为纯c/c+
filter&map 1.filter函数 filter()函数用于过滤序列,过滤掉不符合条件的元素,Python3以后返回一个迭代器对象(可以用list()转化为列表查看)。 filter()函数接受两个参数,第一个为函数或者None,第二个为序列。 如果第一个参数是函数,则把序列里的每一个元素传到函数里进行判断,返回True的元素被放到新的列表中。 如果第一个参数是None,则返回序列中为True的元素。 defodd(x): returnx%2 tmp=range(10) show=filter(odd,tmp) show1=filter(None,tmp) print(show)#返回迭代器对象 print(list(show))#返回True,即是奇数的数 print(list(show1))#返回True,即非零数复制 输出:<filterobjectat0x000001FB6E020128> [1,3,5,7,9] [1,2,3,4,5,6,7,8,9]复制 2.map函数 map()函数根据提供函数对指定序列做映射。 map()函数接受两