易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
ElementUI form服务端验证

ElementUI form服务端验证

看到标题的时候,估计会很惊讶,服务端验证那不是很方便么,自定义一个rules,杀杀水就达到目标了。

事实上,我是在做一件偷懒的事情,毕竟大家都知道表单验证很多时候为了方便和节约性能,都是客户端先检验,然后再服务端检验,这样用户体验也好,但是在后台的时候,如果你要写两遍,那花的精力就大了。特别是elementUI的rules,还得写自定义的validateFunc,于是我就想着前端不校验,后端校验,然后把error回显到指定的元素上。
比如如果只是弹个窗,提个示,那谁都可以实现了,但如果你不能为指定元素做错误提示,那么在表单过多的情况下,用户也会很苦恼。如果表单有几十个,怎么破?
翻了一下elementui的form和form-item的源码,发现可以额外传递error进去。用来提示该元素出错了。error是一个string,组件中会watch,然后给validateStatus赋值error,给validateMessage赋值error对应的string。
于是,在submit的时候,发现有error时,可以直接this.errors = res.data.error;这时候相应的元素就会飘红。除了没有focus到第一个标红的元素上,其他一切OK
---
如果用的是step 表单,那要注意,如果要去不同的step,需要先设置step ,然后 在 this.$nextTick()中进行赋值。否则,页面出来了。变量会提前赋值,渲染出来的表单元素无法将error赋值进去。被这个折腾了一晚上。
---
用这个的好处是,只有提示,不会象他原来的rules会阻止下一步的进行。现在就感觉轻松多了。
本来是准备切到andtv的,结果 发现elementUI的2.15,把andtv中的几个额外的组件也加全了。比如description-item和 骨架屏。。确实666
----
再忍忍,现在还得用VUE2.。。。
Avoid mutating a prop directly since the value will be overwritten whenever the parent

Avoid mutating a prop directly since the value will be overwritten whenever the parent

InertiaJS和VueNestable共用时,遇到的Avoid mutating a prop directly since the value will be overwritten whenever the parent.

因为在使用InertiaJS时,所有的变量都是通过props传递进去的。比如分类的数据。这时候用vue-nestable,就会出现上面的错误:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: xxxx

因为xxxx变量是props传过来的。因此不能在子组件再通过组件来修改xxxx变量。要偷懒直接在data变量中定义一个中间变量,这时候就方便了。

data(){
return {
yyyy: this.xxxx
}
}

然后vue-nestable的v-model可以直接用this.yyyy,报错信息解除。

-----

这个问题主要是出在inertiaJS上。毕竟其他完整的页面demo,变量都是当前页直接给出来的,所以就不会出错了,但遇到问题还是要看本质,才知道怎么改

Failed to decode downloaded font:

Failed to decode downloaded font:

用webpack打包的时候,页面的图标出不来了,比如:elementUI和fontawesome的图标,在console里出现:Failed to decode downloaded font:<URL>,网上查了大约有两种说法

1、springboot,需要在POM文件里加入对woff/eot等的文件的处理,然而我不是spring项目,所以就明显有问题

2、可能是打包的时候图标文件有问题,因为用webpack,可能就打的不是完整包(极有可能),所以用正常的覆盖一下。

我用方法2解决了。如果你遇到类似的问题,可以尝试一下。

咦,被white-space: nowrap;小坑了一把

咦,被white-space: nowrap;小坑了一把

小程序文本限制行数其实是比较简单的,只要指定最大高度,然后overflow隐藏一下,但由于我之前为了去空格,加了个white-space:nowwrap,导致换行一直失败,也就是说怎么着都在一行里面,去掉就好了

小程序文字限定行数换行就这几行:

.break{
overflow: hidden;
word-break: break-all;
text-overflow: ellipsis; //...显示
display: -webkit-box; //盒型
-webkit-box-orient: vertical;
-webkit-line-clamp: 2; //2行,这个最好配合一下元素的max-height和font-size,多试两下就OK了。
}

轻松搞定。

参考:

1、https://developer.mozilla.org/zh-CN/docs/Web/CSS/white-space,white-space CSS 属性是用来设置如何处理元素中的 空白

webpack和laravel-mix的一点笔记

webpack和laravel-mix的一点笔记

用了laravel之后,做网页好象不用laravel-mix总感觉缺了点什么,毕竟他能够帮你压缩JS和chunk文件。在以前,那得是用第三方库的,比如yahoo的工具等。这当然是后续的事情,但在开发的时候,常规做一个页面,刷新一下,其实也还是挺痛苦的。

直到后来,有了browsersync,嗯,这个插件laravel-mix内置了。如果要用,还是要npm install 一下的。browsersync唯一的问题,就是全量刷新。这个会有点痛苦而且明显页面会刷新一下。

再后来,看到了,还有laravel-mix用的webpack,其实还自带了一个hmr,嗯,看package.json的时候应该有注意到,有一个参数叫hot,运行的命令是mix watch --hot,平时的watch没有--hot参数。于是就想着利用它来折腾一下。

先说一下共同点和不同点

共同点:

1、都需要在页面里引入一个JS文件,不同的是browsersync引用的是自己的client.js,而webpack引用的还是app.js,只是另一个端口的罢了。

2、都是开启了一个新的程序,都利用了websocket,bs默认是3000,还有看UI结构的3001端口,而webpack默认开的是8080(8080,这个默认端口,哼哼,太容易被占用了。。。。。要注意一下)

3、BS和webpack都可以通过webpack.mix.js来修改端口和配置参数,hmr的话,要考虑跨域,bS则不需要,BS通过配置还可以将UI关闭,{ui:false},这样就不会默认开3001端口了,省点资源

不同点

1、browser-sync要npm install安装,webpack是内置的

2、bs默认是更改后直接refresh,而Webpack是看起来的局部刷新。如果是主项目,input框中的内容都不会消失。这个在测试的时候其实也挺重要(如果是子项目,则还是会消失,但页面并没有刷新)

3、命令:bs用yarn watch 就行了,webpack的要用yarn hot (基于laravel-mix的情况下)

----

其实可能还有更多的异同点,但目前对我来说可见的、一下子想起来的其实就这些(后续想到再补上)。

Spring项目如何设置session的过期时间

Spring项目如何设置session的过期时间

接手一个Spring项目,因为默认的session只有1天时间(已知是项目中的现状),再加上项目里的session是利用redis来管理的,实在是spring不熟,于是就google,大部分都是说,设置:server.session.timeout就行了。

然而并没有效果,继续翻google和stackoverflow,有人说你得看文档啊。,从springboot2.0开始,就是server.servlet.session.timeout了。于是继续 改。仍然不起作用,

这时候有一个评论数并不高的回复说,其实只要改@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60),如果有设置这个值,只要修改maxInactiveIntervalInSeconds就行了。

于是将值改为 86400*10,问题解决。

参考:

1、https://stackoverflow.com/questions/32501541/what-is-the-default-session-timeout-and-how-to-configure-it-when-using-the-sprin

uniapp编译的APP中如何打开pdf

uniapp编译的APP中如何打开pdf

uniapp支持编译成APP,同时支持IOS和Android,但这两个平台上面的行为有些不太一致。比如openDocument。

正常情况下,

1、我们如果是本地文件(PDF,现在只读PDF)。可以先利用plus.io.convertLocalFileSystemURL进行一次处理(记得只能存放在static目录下),static目录非常重要。,这时候可以获取相对于系统的全路径,然后用openDocument就可以打开了。

2、如果是网络文件,那就得先用uni.downloadFile来先下载,然后success(res){},res.url就是下载后的临时文件(依稀是这样,网上有很多例子,不多说)。然后再调用openDocument打开即可。

3、网络文件,也可以采用pdf.js来打开,这个就是mozilla提供的。他有提供两个版本,针对旧浏览器和现代浏览器的。如果没有什么特别要求,用现代浏览器的即可(这种pdfjs的方法,需要在webview里打开,可以参考uniapp的webview)。

--综上,看起来好象处理起来没那么复杂,然而问题来了,IOS这些都没问题,1、2、3的处理方法都OK。但安卓就不行了。1和2 在处理的时候,openDocument会直接调用系统,问你用哪个APP打开,一旦打开,就跳出你当前的APP了,这个就有点烦人,所以在android上几乎是只能采用第3种方式

默认mozilla提供的viewer.html的文件,非常复杂,因为他顶部的工具栏很多,如果没有时间定下心来研究或者处理,那一堆工具栏就显得有点多余,毕竟,我们是在手机上、PAD上打开,不需要那些工具栏,这时候就推荐一款基于pdfjs的一个微型库。居然还用了jquery的库的:https://github.com/gjTool/pdfh5,用法很简单,他本身也有test的demo,但有几个还是要注意一下,比如一些默认值的设置,默认点击会放大,而且默认是canvas渲染。官方的意思是:

pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决。

svg模式渲染存在缺陷,只能渲染普通pdf,带签名、印章的可能会渲染不全,报错,pdf.js官方目前没有给出解决方案

canvas模式本质是图片,默认进去的时候,图片在手机端被缩放,不是原分辨率,所以失真模糊。所以需要放大查看pdf

但问题是,如果pdf本来就是图片,而且宽度 很大,这个渲染非常耗时间。。。卡出翔来。如果你只是普通的PDF,那就直接用svg吧。几乎秒开。打开的速度依据你的网络下载PDF的速度而定。

--至此,问题几乎全部解决。

Maven 打包项目时mapper,xml文件不被打包

Maven 打包项目时mapper,xml文件不被打包

笔记和备份,来自各个网站

比如:
问题:打maven包的时候,打完包发现src/main/java中的的mapping文件没有被打包进去;
原因:mapping目录里面的文件都是xml文件并不是.java文件,而maven打包默认的src/main/java的是Java文件,它不会打包里面的xml文件,所以在打包之后里面不会有mapping。
解决办法: 在pom.xml中添加如下配置:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- 是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
————————————————
版权声明:本文为CSDN博主「liujiding」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liujiding/article/details/79231767
------------
Maven 项目中使用 Mybatis 框架 ,如果运行项目时报如下错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
原因是构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
Maven打包时,默认java目录下只将.java编译并将编译后的class文件打包,而mapper接口与mapper映射文件放在同一目录下时,mapper映射文件未被打包 。
以下几种方法都可以解决该问题。
1.build节点下添加 resources节点
<!--xml文件打包-->
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
2.如使用build-helper-maven-plugin插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
3.使用maven-resources-plugin插件
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
————————————————
版权声明:本文为CSDN博主「Fickle_actor」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Fickle_actor/article/details/82712663
App开发者需要更新此App以在此iOS版本上正常工作

App开发者需要更新此App以在此iOS版本上正常工作

原文来自:https://blog.csdn.net/weixin_43494305/article/details/117958342

---直接粘贴

最近随着iOS隐私协议更新以及iOS14.6系统正式放开,很多已经安装的app在升级到iOS14.6或者iOS15之后在打开App时都会提示“App开发者需要更新此App以在此iOS版本上正常工作 ”,而无法正常使用!此提示是因苹果正版签名(CodeSign)更新所致,导致所有之前macOS11以下系统打包的App在iOS14.6或者iOS15以上的设备会都提示需要更新才能正常工作。

解决方法:

1.首先打包环境 mac升级到macOS11以上,此时打包会采用新的签名机制!

2.在升级到最新系统之后,重新通过Xcode打包生成新的安装包即可!

3.对于企业签的App,则需要企业签名提供商签名mac环境同样升级到macOS11系统之上重新签名方可解决。

---SO EASY

linux非www用户如果写文件

linux非www用户如果写文件

之前确实有一篇,引用的overtrue的文章,但其实还是不太正常:https://neatstudio.com/show-2912-1.shtml

当时参考的时候,其实比较简单:(基于非ROOT用户)
1、sudo adduser deployer
2、
sudo usermod -aG www-data deployer
3、sudo chfn -o umask=022 deployer
4、sudo chown deployer:www-data /var/www/html
5、sudo chmod g+s /var/www/html => 这一步,需要调整为:sudo chmod -Rf g+s /var/www/html

chmod -Rf g+s sorgo/ #SGID,新生成文件或文件夹保持与父目录同一权限组
SGID属性对于像laravel框架这种有tinker让开发者在交互式命令行界面调试代码的特别有用。比如你使用tinker新建了一个日志文件,如果没有SGID那这个新日志文件的所有者和所有组会是uu:uu,这时www用户执行下的程序要写入东西到这个新日志的话就会因权限受阻而报错;而父目录有SGID属性的则会是uu:www,同时保证了两个相关的用户都能正常读写。
参考:https://segmentfault.com/a/1190000018373387
--
以下为新增,在这种情况下,部分目录可能还会存在写不进的问题。
6、sudo chmod -R 760 /var/www/html/storage => 对指定目录设置可写.