分类: 未分类

  • 快速搭建私人网盘-Cloudreve

    github地址:

    https://github.com/cloudreve/Cloudreve

    简介

    Cloudreve是个公有网盘程序,你可以用它快速搭建起自己的网盘服务,公有云/私有云都可。Cloudreve底层支持 本机存储、从机存储、阿里云OSS、又拍云、腾讯云COS、七牛云存储、OneDrive(国际版/世纪互联版),每种存储方式的上传下载都是客户端直传。具有以下特性:

    • 支持本机、从机、七牛、阿里云OSS、腾讯云COS、又拍云、OneDrive (包括世纪互联版) 作为存储端
    • 上传/下载 支持客户端直传,支持下载限速
    • 可对接Aria2离线下载(支持所有存储策略,下载完成后自动中转)
    • 在线压缩/解压缩、多文件打包下载(支持所有存储策略)
    • 覆盖全部存储策略的WebDAV协议支持
    • 文件拖拽管理,拖拽上传、目录上传、流式上传处理
    • 多用户、用户组
    • 创建文件、目录的分享链接,可设定自动过期
    • 视频、图像、音频、文本、Office文档在线预览
    • 自定义配色、黑暗模式、PWA应用、全站单页应用
    安装
    #解压获取到的主程序 
    tar -zxvf cloudreve_VERSION_OS_ARCH.tar.gz 
    # 赋予执行权限 
    chmod +x ./cloudreve 
    # 后台启动 Cloudreve并在当前目录下输出nohup.out日志文件 
    nohup ./cloudreve &
    查看日志文件查看初始化的账号和密码
    tail -f nohup.out

     

    loudreve 在首次启动时,会创建初始管理员账号,请注意保管管理员密码,此密码只会在首次启动时出现。如果您忘记初始管理员密码,需要删除同级目录下的cloudreve.db,重新启动主程序以初始化新的管理员账户。

    Cloudreve 默认会监听5212端口。你可以在浏览器中访问http://服务器IP:5212进入 Cloudreve。以上步骤操作完后,最简单的部署就完成了。

    文章来源:https://www.51cto.com/article/686657.html

  • python:pandas中dataframe的基本用法汇总

    python:pandas中dataframe的基本用法汇总

    https://www.cnblogs.com/timotong/p/9678490.html

    删除指定的行

    https://verytoolz.com/blog/380cf7b3a1/

  • uniapp学习记录

    如何引入iconfont?
    https://www.bilibili.com/video/BV1er4y1w7ao?p=9&spm_id_from=pageDriver&vd_source=1daa8b3ed9fa55a6abbdd09565d8d635
    此课程的p8讲到了引入官方css样式库,p9讲到了引入自定义图标库,p10讲了引入css动画库。
    黑马的项目可以小白学习
    https://www.bilibili.com/video/BV1BJ411W7pX?p=6&spm_id_from=pageDriver&vd_source=1daa8b3ed9fa55a6abbdd09565d8d635
    前几个p讲到了如何添加tabBar

    一个vue页面(vue文件)只能有一个根节点,比如只能有一个最外面的view组件
    <template>
    <view>
    //只能有一个最外面的view
    </view>
    </template>
    最外面的view不能有多个,例如:
    <template>
    <view>
    </view>
    <view>
    </view>
    </template>

     

    数据绑定使用v-bind。

    平常使用可以直接使用:关键字代替v-bind:关键字,

    :key=””

    :src=””

    使用v-for时,请注意同时需要绑定一个key,

    为什么使用v-for时必须添加唯一的key?

    https://juejin.cn/post/6844903577215827982

    绑定数据自然页可能需要绑定事件,使用v-on绑定事件,

    v-on:=”事件函数名”

    事件函数定义在method块里面。

    如果事件里传递了参数,就需要加括号加参数了,

    v-on:”事件函数名(参数)”

    mthods块里也当然有括号有参数了,

    事件函数名(参数){

    功能…

    }

    若只传递一个事件对象,v-on可以不用加括号

    v-on:”事件函数名(e)”

    事件函数名(e){

    console.log(‘clicked me’,e)

    }

     

    若想传递参数又想把事件对象传递过去,在v-on里则需要使用事件对象的别名$event,

    v-on:”事件函数名(参数,$event)”

    事件函数名(参数,$event){

    console.log(‘clicked me’,参数,$event)

    }

    一般使用v-on时,可以使用@符号代替,分号也不需要了,

    @”事件函数名(e)”

     

    uni生命周期

    https://uniapp.dcloud.net.cn/collocation/App.html

     

    页面的生命周期

    https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle

     

    下拉刷新可以用来阻止太频繁的加载数据,

    页面触底可以用来加载下一页的数据,

     

    发送get请求,

     

  • 书源制作学习

    https://alanskycn.gitee.io/teachme/

     

    语法规则

    比如书籍列表规则,一般直接查看元素,把书籍最外面的那个class获取出来即可,如class=”container search-card“,填写规则时,把等号换成英文下的“.”,然后把后面的class名称前后的引号删除即可,

    class.container search-card

    tag是获取标签的意思,比如封面规则,封面一般是img标签,要想获取它,就tag.标签名即可,

    tag.img

    要想获取img标签的元素属性,则可以使用@符合,如获取img标签下的alt属性,tag.img@alt即可,

    tag.img@alt

    你也可以获取某个class下面的一个a标签的某个标签属性,比如我想获取封面,

    标签的下一级标签使用@分割

    class.container search-card@tag.a@href

    根据上面的使用案例,若获取作者名称出现多余的文字之类的东西,可以使用正则表达式处理文字,比如我获取出来的作者名称的两边有中括号,我想把中括号去掉,可以使用##号来分割,以##号来结束,双#号之间添加正则表达式,双##结束后面添加要替换的字符即可,

    获取了作者名称

    class.sc-title@tag.a@title

    若一个标签下出现了多个a标签,我怎么获取其中一个呢?我们可以指定位置,若获取第一个a标签可以使用0,若最后一个可以使用-1,若第二个可以使用2,语法是a.数字,比如

    class.sc-title@tag.a.2@title

    添加正则表达式

    class.sc-title@tag.a@title##正则表达式内容##

    因为这次获取到的作者名称两边是中括号,并且作者名两边各有一个空格,再次才是中括号,所以,我们直接把它转义掉空白即可,

    若转移成空白的话,双##结束后面甚至都不用写,默认为##正则表达式内容##空白内容

    中间想要添加多个正则表达式的话,使用“|”符号即可。

    class.sc-title@tag.a@title##\[ | \]

    目录列表规则

    若出现多个class名称全部一样,一个class里面有两个名字,我们可以只取后面的那个名字,

    <div class=”border-b chapter-list”>

    只取后面的那个即可

    class.chapter-list

    章节名称规则

    查看元素时发现有两个span标签,有章节名字标签的span是第一个,我们可以获取第一个span的text,

    tag.span.0@text

    正文规则

    查看任意一段文字的元素时,我们可以发现正文的一般都在p标签里面,正文的父标签是id=”chapter-content“,我们可以获取正文父标签下的所有p标签内的文字内容,

    id.chapter-content.tag.p@text

    我们也可以使用另一种方式获取正文里所有的p标签,

    id.chapter-content.tag.p@html

    但是总有一些我们不要的内容,比如第一个p标签里面的内容不是我们想要的,那么我们可以排除掉第一个p标签,使用!号可以排除标签,语法:!数字,这样就可排除指定的标签了,

    id.chapter-content.tag.p!0@html

    但是发现还有2各p标签不是我们想要的,可以使用:号分割,语法!0:3:5,比如我们现在不想要第1、第4、第6个个p标签,

    id.chapter-content.tag.p!0:3:5@html

    突然发现所有我们不想要的文字虽然都在p标签里面,但是那些文字的外面又包裹了一层标签,那就是说,我们需要的文字其实只是p标签内的文字,p标签下有其他标签的内容我们不要,我们可以直接获取p标签的直系文本,语法@textNodes,

    id.chapter-content.tag.p@textNodes

    若只想获取标签自己的内容,不获取下级标签里的内容,可以使用@ownText方法,

    id.chapter-content.tag.p@ownText

    若网站编码格式为gbk的话,那我们在书源搜索规则里的最后面要加上{“charset”,”gbk”},只要网站上的编码类型有gbk三个字,都填写gbk。

    若想获取目录的话,还有一种方法,比如获取小说目录,我们可以直接找关键字,然后获取该文字所在的href属性,

    text.章节目录.href

    比如某些网站的下一页变来变去的,可以使用这种方法来获取其中的下一页链接。

     

    若网站的搜索类型是post类型的,可以审查元素找到搜索框input的整个div,然后获取搜索框的name值,和后面的name值,搜索地址那里填上当前网站的网址后,加上刚才获取的name值和type值,

    https://b.8bqg.net/s.php.(“charset”:”gbk”,”method”:”POST”,”body”:”s={(key)&type=articlename”}

    还有类似的搜索框可以选择书名和作者的,

    <select id=”searchType”name=”searchtype’
    style=”display:none”><option
    value=”articlename”></option><option
    value=”author”></option></select>
    <td style=”background-color:#fff;border:1px
    solid #CCC;”><input id=”s_key”name=”searchkey”
    type=”text”class=”key”></td>
    <input name=”t_btnsearch”type=”submit”value=””
    class=”go”onclick=”check()”></td>
    </tr>

    我们可以选择其中的标签id和下级搜索框的name

    searchtype=articlename&searchkey={{key}}&t_btnsearch=

    searchtype=articlename是指整个select标签的name等于value用来确定一个标签,

    searchkey={{key}}是指select下面的option下的input的name值等于value用来确定使用搜索书名,而不是使用作者搜索。并且按下下面的提交按钮的,提交按钮的name值是t_btnsearch。

    若发现规则不填的话,就会调用搜索规则,若发现规则和搜索规则一样的话,就可以这样用了,或者直接把搜索规则里添加上发现规则即可,规则分割可以使用|符号。

     

    @js:java.log(result)

    可以获取查看整个网页的源码

     

    @js:后面可以写js代码

  • jsp学习

    设置cookie:

    https://www.cnblogs.com/binwine/p/14319818.html

     

    同时设置客户端和服务端的编码格式:

    response.setContentType(“text/html;charset=utf-8”);

     

    设置服务端的编码格式:

    response.setCharacterEncoding(“UTF-8”);

    设置客户端的编码格式和响应的MIME类型:

    response.setHeader(“Content-type”, “text/html;charset=UTF-8”);

    https://www.cnblogs.com/sevents/articles/15708945.html

     

     

    JSP(全称:Java Server Page)

    idea编译器jsp环境配置,需要先安装jdk和tomcat,并配置jdk和tomcat的环境变量,然后再去idea新建jsp项目

    (你的tomcat最好没有配置过其他的项目,若配置过其他项目,就整一个新的tomcat,把环境变量配置成新的tomcat路径。不干净的tomcat可能会导致idea的jsp项目运行之后,不会自动跳转到浏览器)

    https://blog.csdn.net/llplllll/article/details/116903198

    https://www.likecs.com/show-203515634.html

    idea 2020 如何创建jsp项目?

    https://blog.csdn.net/weixin_44797182/article/details/124745744

    新创建的jsp文件防止乱码?

    https://blog.csdn.net/hb1993/article/details/122837790

    JSP++IDEA+Servlet+Tomcat应用开发,Servlet全解与案例实战

    https://www.bilibili.com/video/BV18b4y1Z7qA

    jsp 引入vue

    https://blog.csdn.net/chenlim87/article/details/109629076

     

     

    三类脚本元素

    脚本标签(可定义局部变量、编写语句等) <% java source code %>

    表达式标签 <%= statement %>

    声明标签(全局变量、方法、类等) <%! field or method declaration %>

     

    普通脚本可以使用所有java语法,除了定义函数。

    脚本与脚本之间不可嵌套,脚本与html标签不可嵌套。

    声明脚本声明的变量是全局变量。

    声明脚本的内容必须在普通脚本<% %>中调用。

    如果声明脚本中的函数具有返回值,使用输出脚本调用<%= %>。

    输出脚本可以输出带有返回值的函数

    输出脚本中不能加;

     

    jsp注释(注释内容不会被发送至浏览器甚至不会被编译)

    <%– 注释 –%>

    html注释(通过浏览器查看网页源代码可以看见注释内容)

    <!– 注释 –>

     

    jsp指令

    用来设置与整个jsp页面相关的属性。

    <%@page…%> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等

    <%@include…%> 包含其他文件

    <%@taglib…%> 引入标签库的定义,可以是自定义标签

    属性及描述

    https://blog.csdn.net/pengmm1990/article/details/63684965

    page指令语法:

    <%page attribute1=”value1″ attribute2=”value2″%>

    page指令为容器提供当前页面的使用说明。一个jsp页面可以包含多个page指令。

    <%@include file=”要包含的文件路径(相对路径)” %>

    例如

    静态包含

    <%@include file=”include.jsp” %>

    <%@include file=”include.html” %>

    静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样,是在servlet引擎转译时,就把此文
    件内容包含了进去(两个文件的源代码整合到一起,全部放到jspService方法中),所以只生成了一个servlet,
    所以两个页面不能有同名的变量。运行效率高一点点。耦合性较高,不够灵活。

    动态包含

    <jsp:include page=”04-herder.jsp”><jsp:include>

    <jsp:include page=”05-footer.jsp”><jsp:include>

    特点:

    1.动态包含相当于方法的调用

    2.动态包含会生成多个源码文件

    3.可以定义同名变量

    4.效率高,耦合度高

    注:

    当动态包含不需要传递参数时,include双标签之间不要有任何内容,包含换行和空格。

    使用动态包含传递参数

    <jsp:include page=”要包含的页面路径”>

    注:page不能为空,否则报错

     

    <jsp:param name=”参数名” value=”参数值”/><jsp:include>

    注:name属性不支持表达式,value属性支持表达式

    获取参数:

    request.getParameter(name);通过指定参数名获取参数值

     

     

    jsp隐式对象

     

     

    jsp四大作用域

    page 表示在当前作用于有效

    request 表示在一次请求中有效

    session 表示在一次会话中有效

    application 表示在整个应用程序中有效

     

    jsp EL表达式

    可以操作域对象,获取域对象的值

     

    JSTL

    常用标签

    if标签

    choose、when和otherwise标签

    forEach标签

    foramtDate标签

  • fr-js

    js插入行

    var id = $("td[id^=A]:last").attr("id");
    //获取A列最后一行的单元格编号
    //id^=A代表A列,last代表最后一行
    _g().appendReportRC(1, id);
    //插入1行

     

    自由调整单元格插件调整顺序后按照调整后的序号入库,需要在填报Web属性里设置加载结束事件

    //const tableBody = document.querySelector('.rows-height-counter')
    
    const tableBody = document.querySelector('#frozen-center>.x-table>tbody');
    new Sortable(tableBody, {
    	sort: true,
         animation: 150,
         onEnd: function (evt) {
          			console.log(evt);
                        var itemEl = evt.item; 
                        evt.to;    
                        evt.from;  
                        evt.oldIndex;  
                        evt.newIndex;  
                        evt.clone 
                        evt.pullMode;  
    var $tds =$('.x-table td[col=1][idx=0]:visible:not([fmt="T"])');
    //获取第1列中可见的序号单元格(A列) 
    var n = 0;
    $tds.each(function(i, e) {
    	n = n + 1;
    	var row = $(e).attr("row");
    	//获取行号
    	_g().setCellValue(0, 1, row, n);
    	//将当前编号重新设置
    //	需要将td[col=1]和_g().setCellValue(0, 1, row, n)中的1对应,两个数字需要相同。对应单元格的索引,填报单元格索引从0开始
    })
                                        }
       
    });

     

     

    普通报表-填报预览-获取控件单元格所在位置

    var city=contentPane.getWidgetByName("txt3").options.location;
    alert(city);
    返回值:A5

     

    设置uuid为主键,智能提交,在uuid那一列上,加条件属性:如果当前值($$$)的长度为0,则生成一个uuid,否则就是当前值($$$)。

     

    获取数据集P_S_FMEA_DETAIL_V与B3单元格对应的字段TASKID所对应的值

    value('P_S_FMEA_DETAIL_V', 'TASKID', B3);
    /**
    * 发起流程
    * accountid VALUE('SYS_BPMUSER',1,2,$fine_username)
    * fabid $doc_fab
    * versionnum $doc_version
    * txt1 'http://crm-finereport.crmicro.com/webroot/decision/view/report?viewlet=TEST%252F1.frm'
    * fmeadomian $fmeadomain
    */
    let sid;
    var accountid = accountid.toString();
    try {
    // 获取frm里网页框里的cpt的单元格的值
    sid = top.document.getElementsByName('RHIFRAME0')[0].contentWindow._g().getCellValue(0, 1, 0)
    }
    catch {
    sid = $(".bi-iframe:visible", window.top.document)[0].contentWindow.document.getElementsByName('RHIFRAME0')[0].contentWindow._g().getCellValue(0, 1, 0);
    }
    var nurl = fmeadomian + decodeURIComponent(decodeURIComponent(txt1)).replace(/^(?:[^/]*\/){3}(.*)$/, "$1");
    var conf = '<MyField><uuid>' + sid + '</uuid><fabid>' + fabid + '</fabid><pstatus>' + 1 + '</pstatus><fstatus>' + 2 + '</fstatus><txt1>' + '<![CDATA[' + nurl + ']]>' + '</txt1><versionnum>' + 1 + '</versionnum></MyField>';
    //alert(conf);
    send(accountid, 'P_A_EXPORT001', conf);
    frm点击网网页框中的cpt的按钮控件(cpt中的按钮控件需要设置控件名称)
    let a = _g().getWidgetByName('doc_export_type').getValue().toString();
    try {
      if (a == 'PDF') {
        top.document.getElementsByName('RHIFRAME0')[0].contentWindow.contentPane.getWidgetByName('btn_export_pdf').fireEvent("click");
      } else {
        top.document.getElementsByName('RHIFRAME0')[0].contentWindow.contentPane.getWidgetByName('btn_export_excel').fireEvent("click");
      }
    
    
    } catch {
      if (a == 'PDF') {
        $(".bi-iframe:visible", window.top.document)[0].contentWindow.document.getElementsByName('RHIFRAME0')[0].contentWindow.contentPane.getWidgetByName('btn_export_pdf').fireEvent("click");
      } else {
        $(".bi-iframe:visible", window.top.document)[0].contentWindow.document.getElementsByName('RHIFRAME0')[0].contentWindow.contentPane.getWidgetByName('btn_export_excel').fireEvent("click");
    
    
      }
    }
    //关闭当前弹窗
    window.top.layer.closeAll("iframe");

     

    frm内使用url向网页框传值

    var paras = _g().getWidgetByName('doc_more_paras').getValue();
    var fab = _g().getWidgetByName('doc_fab').getValue();
    var fmea_code = _g().getWidgetByName('doc_fmea_code').getValue();
    var product = _g().getWidgetByName('doc_product').getValue();
    var process_platform = _g().getWidgetByName('doc_process_platform').getValue();
    var core_team = _g().getWidgetByName('doc_core_team').getValue();
    var owner = _g().getWidgetByName('doc_owner').getValue();
    var date_start = _g().getWidgetByName('doc_date_start').getValue();
    var date_modify = _g().getWidgetByName('doc_date_modify').getValue();
    var status = _g().getWidgetByName('doc_status').getValue();
    var colname = _g().getWidgetByName('r_btn_select_col_1').getValue();
    _g().getWidgetByName('rHIframe0').setValue(url + '&colname=' + paras + colname + '&doc_fab=' + fab + '&doc_fmea_code=' + fmea_code + '&doc_product=' + product + '&doc_product=' + product + '&doc_process_platform=' + process_platform + '&doc_core_team=' + core_team + '&doc_owner=' + owner + '&doc_date_start=' + date_start + '&doc_date_modify=' + date_modify + '&doc_status=' + status);

     

     

    frm网页框里的cpt向上传值

    parent._g().getWidgetByName('doc_export_flow_conf').setValue(conf);

     

     

    获取组件的可见与不可见状态

    _g().getWidgetByName('r_btn_select_col_1').isVisible();

     

     

    js点击网页框里的按钮

    document.getElementById('rHIframe0').contentWindow._g().getWidgetByName('btn_export_pdf').fireEvent('click');

     

    导出插件的语法示例(会把你的文件存到指定的目录里,文件名自定义,文件路径自定义。目前语法只能放在cpt里用,只支持pdf和excel)

    FR.backExport(sessionID, "excel", "D://tomcat//webapps//webroot//fmea_file//", "创建FMEA (1).xlsx");

     

    获取网页框的url

    alert(_g().getWidgetByName("rHIframe0").getValue());

     

     

    获取当前url-导出表-显示URL(字段)

    alert(window.location.href);

     

     

    按钮点击事件-设置回调函数(提示 成功或失败)

    if (fr_submitinfo.success) {
    	FR.Msg.toast('提交成功');
    } else {
    	FR.Msg.toast('提交失败,错误信息为:' + fr_submitinfo.failinfo);
    }

    当前列全选

    var flag = this.getValue();
    //获取当前值
    var boxes = _g().getWidgetsByName("box");
    //获取当前页的复选按钮控件数组
    if (typeof(boxes[0]) != "undefined") {
    	var configs = [];
    	for (i = 0; i < boxes.length; i++) {
    		var cr=FR.cellStr2ColumnRow(boxes[i].options.location);
    		//获取行列号对象
    		configs.push({reportIndex:0,col:cr.col,row:cr.row,value:flag});
    		//如果控件大于1个,则遍历将行列号以及值信息插入数组中
    		_g().setCellsQuick(configs);
    		//批量赋值
    		//如果模板存在冻结,且被赋值单元格的行高列宽会改变,则需要替换此句为:_g().setCellsValueInBatch(configs);
    	}
    } else {
    	var cr=FR.cellStr2ColumnRow(boxes.options.location);
    	//获取行列号对象
    	_g().setCellValue(0,cr.col,cr.row,flag);
    	//如果控件只有1个,则直接赋值
    }

     

     

     

    消除选中黑色边框线

    //消除选中黑色边框线。在填报WEB属性-事件编辑-加载结束
    _g().curLGP.hideSelectFrame();

     

    使用js点击填报报表的提交按钮(已经确定,元素固定):

    //点击网页框1里面的cpt提交按钮
    document.getElementsByName('RHIFRAME0')[0].contentWindow._g().verifyAndWriteReport(true);
    //点击网页框2里面的cpt提交按钮
    document.getElementsByName('RHIFRAME0_C')[0].contentWindow._g().verifyAndWriteReport(true);
    相关链接:
    https://help.fanruan.com/finereport/doc-view-4279.html
    (链接里主要关注,右边的目录,比如函数verifyAndWriteReport(true))
    
    
    //弃用,能不用就不用DOM元素
    $(function(){
       document.querySelector("#fr-btn-Submit > div > em > button").click();
    });

    隐藏工具栏(创建一个js文件,在模板Web属性中引入即可)

    (因为要调用cpt的提交按钮,但是帮助文档里的隐藏工具栏的方法都是直接整个div没了,网页中连工具栏的元素都找不到了,就没办法使用提交按钮了)

    / * 通过高度为0隐藏工具栏,但是页面上还是有工具栏的元素 * /
    $(function () {
    	setTimeout(function(){
    		document.querySelector("#id_container > div.x-toolbar.ui-state-enabled.fs-tab-content-top-toolbar").style.height=0;
    	},50)
    })

     

    隐藏组件-设置组件事件

    _g().getWidgetByName('report0').setVisible(false);

    JS实现点击超链切换Tab块

    _g().getWidgetByName("tabpane0").showCardByIndex(0);

    跑马灯并隐藏滚动条

    setTimeout(function(){
    _g().getWidgetByName('report1').setVScrollBarVisible(false);//滚动条自动隐藏
    _g().getWidgetByName('report1').startMarquee({//跑马灯
    offset: 2,
    interval: 0.2
    })
    }, 500)

    使时间刷新不会有间隙

    FR.HtmlLoader.loadingEffect=function(){}

    使组件透明度为50%

    setTimeout(function() {
    $("div[widgetname=R_1_2]").css({
    'opacity': '0.5'
    });
    }, 50);

    js调用背景图片

    setTimeout(function() {
    $('.content-container').css({"background": "url(/webroot/help/image/INDEX/body.png)no-repeat","background-size":"100% 100%"});//body背景
    $("div[widgetname=R_1_1]").css({"background","url(/webroot/help/image/INDEX/R_1_1.png;)center center / 100% 100% no-repeat"}); //顶部标题-背景
    $("div[widgetname=R_1_2]").css({"background","url(/webroot/help/image/INDEX/R_1_2.png;)center center / 100% 100% no-repeat"}); //顶部标题-小图片标题
    }, 1000);

    Tomcat下通过IP直接访问数据决策系统后,报表块如何调用图片,比如你按照帆软教程设置的话,那么报表块调用图片时,图片的路径把webroot删掉即可。

    $("div[widgetname=R_1_1]").css({"background","url(/help/image/INDEX/R_1_1.png;)center center / 100% 100% no-repeat"});

    关于window.location.href的用法

    javascript中的location.href有很多种用法,主要如下。
    
    self.location.href="/url" 当前页面打开URL页面location.href="/url" 当前页面打开URL页面windows.location.href="/url" 当前页面打开URL页面,前面三个用法相同。this.location.href="/url" 当前页面打开URL页面parent.location.href="/url" 在父页面打开新页面top.location.href="/url" 在顶层页面打开新页面
    
    如果页面中自定义了frame,那么可将parent self top换为自定义frame的名称,效果是在frame窗口打开url地址
    
    此外,window.location.href=window.location.href;和window.location.Reload()和都是刷新当前页面。区别在于是否有提交数据。当有提交数据时,window.location.Reload()会提示是否提交,window.location.href=window.location.href;则是向指定的url提交数据
    
    资料来源:https://www.cnblogs.com/huifeidezhuzai/p/10334813.html

    点击组件跳转页面

    window.open('/webroot/..............','_self');

    点击刷新当前页面到新的url(不新建标签页)

    window.location.href="url"

    柱形图点击不同的柱子下钻到不同的页面(特效-交互属性-添加链接-JavaScript,记住要在js界面添加参数)

    if(val == "存货"){
    	window.parent.FS.tabPane.addItem({title:"存货分析",src:"${servletURL}?viewlet=test/存货分析.frm"})
    	}else{
    	window.parent.FS.tabPane.addItem({title:"应收账款分析",src:"${servletURL}?viewlet=test/应收账款分析.frm"})
    }

    获取当前控制值

    this.getValue();
    
    this.options.form.getWidgetByName("c1").getValue();

    获取当前行号

    var widget = _g().getWidgetByCell(FR.columnRow2CellStr({
    col: 2,
    row: ro
    }));

    数据集里的参数为空则查询全部,否则按照条件查询

    SELECT * FROM 销量  ${if(len(area) == 0,"","where 地区 = '" + area + "'")} 

    下拉复选框查询为空显示全部

    SELECT * FROM 订单 where 1=1  ${if(len(area) == 0,"","and 货主地区 in ('" + area + "')")}

    根据账号权限来控制填报工具栏上的按钮是否可用

    (例如,重大事项有一个超级管理员,有若干分块管理员。想让分块管理员无法使用原样导出和增量导入的功能。)

    (原理:根据工具栏上的位置来识别是第几个按钮,然后设置其不可用,工具栏上的按钮位置索引从0开始)

    (特殊提醒:但凡是根据权限控制什么的事情,写js时,设置一个参数获取角色名称用来判断)

    setTimeout(
    	function() {
    		if (user != '纪检管理') {
    			//_g().getToolbar().getWidgetByName("Verify").setEnable(false); 
    			contentPane.toolbar.options.items[2].setEnable(false); //工具栏的第3个按钮 
    			contentPane.toolbar.options.items[3].setEnable(false); //工具栏的第4个按钮 
    		}
    	}, 1000);

    js跳转页面

    window.parent.FS.tabPane.addItem({title:"零部件产销存分析看板",src:"${servletURL}?viewlet=mobile/零部件产销分析看板_mobile.frm"})
    
    window.location = encodeURI(encodeURI("${servletURL}?viewlet=mobile/零部件产销分析看板_mobile.frm"));
    
    window.open('');
    
    FR.doHyperlinkByGet({url:'ReportServer?formlet=mobile/零部件产销分析看板_mobile.frm',title:'TITLE_NAME'});

    横向跑马灯

    当前单元格插入公式、单元格属性-其他-高级-显示内容:用HTML显示内容

    "<marquee id='affiche' style='text-align:center;display:table-cell;vertical-align:middle;' behavior='scroll'  bgcolor='#ffffff' direction='left' height='100%' width='500px' hspace='0' vspace='2' loop='-1' scrollamount='10'   scrolldelay='80' onMouseOut='this.start()' onMouseOver='this.stop()'>" + REPLACE(J10,","," ") + "</marquee>"

    cpt自定义按钮 点击事件 插入行

    _g().appendReportRC(1);//点击按钮新增一行
    contentPane.deleteReportRC();//点击按钮删除一行

    单个组件控件修改样式

    setTimeout(function() {
    $("div[widgetname=TEXTEDITOR0]").find('.fr-texteditor').css('background-color', 'blue');
    $("div[widgetname=TEXTEDITOR0]").find('.fr-texteditor').css('color', 'white');
    }, 100);

     

     

     

  • github-host

    GitHubHoststa
    185.199.108.154 github.githubassets.com
    140.82.112.22 central.github.com
    185.199.108.133 desktop.githubusercontent.com
    185.199.108.153 assets-cdn.github.com
    185.199.108.133 camo.githubusercontent.com
    185.199.108.1 github.map.fastly.net
    199.232.69.194 github. global.ssl.fastly.net
    140.82.113.3 gist.github.com
    140.82.113.5 api.github.com
    185.199.108.133 rawgithubusercontent.com
    185.199.108.133 user-images.githubusercontent.com
    185.199.108.133 favicons.githubusercontent.com
    185.199.108.133 avatars5.githubusercontent.com
    185.199.108.133 avatars4.githubusercontent.com
    185.199.108.133 avatars3.githubusercontent.com
    185.199.108.133 avatars2.githubusercontent.com
    185.199.108.133 avatars2.githubusercontent.com
    185.199.108.133 avatars1.githubusercontent.com
    185.199.108.133 avatars0.githubusercontent.com
    185.199.108.133 avatars.githubusercontent.com
    140.82.112.10 codeload.github.com
    52.217.131.169 github-cloud.s3.amazonaws.com
    52.216.104.43 github-com.s3.amazonaws.com
    52.217.110.196 github-production-release-asset-2e65be.s3.amazonaws.com
    52.217.128.1 github-production-user-asset-6210df.s3.amazonas.com
    52.217.137.41 github-production-repo sitory-file-5claeb.s3.amazonaws.com
    185.199108.133 media.githubusercontent.com

  • 菱形

                    *           (1,4)
                   ***          (2,3)   (2,5)
                  *****         (3,2)   (3,6)
                 *******        (4,1)   (4,7)
                  *****         (5,2)   (6,5)
                   ***          (6,3)   (4,6)
                    *           (7,4)   
    4-1
    3-2
    

     

  • 测试带参数的静态游标

    declare
      cursor c(v_ename varchar2) is select * from emp where ename = v_ename;
      e emp%rowtype;
    begin
      open c('KING'); -- 填写的是谁,最后输出的就是谁的信息
      loop
        fetch c into e;
      exit when c%notfound;
      dbms_output.put_line(e.empno||'  '||e.ename||'  '||e.job||'  '||e.mgr||'  '||e.hiredate||'  '||'  '||e.sal||'  '||'  '||e.comm||'  '||e.deptno);
      end loop;
      close c;
    end;