vue 八大生命周期

  1. beforeCreate(创建前)
  2. created (创建后)
  3. beforeMount (载入前)
  4. mounted (载入后)
  5. beforeUpdate (更新前)
  6. updated (更新后)
  7. beforeDestroy( 销毁前)
  8. destroyed (销毁后)

Vue生命周期函数就是vue实例在某一个时间点会自动执行的函数

当Vue对象创建之前触发的函数(beforeCreate)

Vue对象创建完成触发的函数(Created)

当Vue对象开始挂载数据的时候触发的函数(beforeMount)

当Vue对象挂载数据的完成的时候触发的函数(Mounted)

Vue对象中的data数据发生改变之前触发的函数 (beforeUpdate)

Vue对象中的data数据发生改变完成触发的函数(Updated)

Vue对象销毁之前触发的函数 (beforeDestroy)

Vue对象销毁完成触发的函数(Destroy)

Linux服务器时间设置及同步

在同步网络时间之前,我们需要确保服务有安装  ntpdate 服务

ps aux |grep ntpdate

如果未安装,使用如下代码安装,系统会自动选择合适的镜像,按提示选择 y 就行。

yum install ntpdate

当然安装完成后,还可以执行第一条命令查看是否成功。确认安装成功后,输入如下代码

ntpdate -u cn.pool.ntp.org    //-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;

注意:若不加上-u参数, 可能会出现以下提示:no server suitable for synchronization found
    执行完毕后,可 使用 ‘date’命令查看服务器时间是否同步成功。

原文地址:

https://www.cnblogs.com/JackpotHan/p/10813237.html

linux安装svn服务器(yum方式)和SVN项目同步

1.查看yum是否安装

在终端中输入yum即可如果已经安装,会显示yum的参数,如果没有安装,会提示yum未安装或无效命令……

2.安装svn

yum -y install subversion

出现下面截图后,表示安装完成。

3.创建目录并配置

建立版本库目录(repo为要创建的版本库名称,可自定义)

mkdir -p /data/svn/repo

配置 

svnadmin create  /data/svn/repo

执行上面的命令后,自动建立repo测试库,查看/data/svn/repo 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

4.用户密码passwd配置

cd /data/svn/repo/conf
vi passwd

修改passwd为以下内容:

[users]
# harry = harryssecret
# sally = sallyssecret
hello=123

用户名=密码

以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

这样我们就建立了hello用户, 123密码

5.权限控制authz配置

vi  authz

目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

请别落下[/]

#设置[/]代表根目录下所有的资源   或者写成[repl:/]
[/]
hello = rw

意思是hello用户对repo测试库下所有的目录有读写权限,当然也可以限定。 如果是自己用,就直接是读写吧。

以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

6.服务svnserve.conf配置

vi svnserve.conf

追加以下内容:

[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限 
auth-access=write
#密码数据库的路径 
password-db=passwd
#访问控制文件 
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字 
realm=/data/svn/repositories

7.防火墙开启

/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT

8.启动svn服务器

svnserve -d -r /data/svn/

9.访问

在windows客户端,输入地址:svn://ip地址:3690/repo(iP地址为你linux的ip,repo为前文创建的版本库名称,3690为svn默认端口)

端口默认为3690,输入配置好的用户名和密码即可。

如果连接不上可能是服务器端口没开启

请 ping 3690端口确认是否通畅

telnet ip地址 3690

10.其他命令

# 查看占用端口的进程
lsof -i:3690   
# 关闭进程 21882
kill -9 进程号(上一步查到的pid)
#启动SVN (多个版本库)  /data/svn 是svn 安装位置
svnserve -d -r   /data/svn

11.svn代码同步到项目中

# 手动更新 
svn co svn://ip地址:3690/库名 同步的地址 --username 用户名 --password 密码
# 示例
svn co svn://127.0.0.1:3690/repo /www/wwwroot/repo --username hello --password 123

1.使用post-commit 实现同步代码

  代码同步需要使用到hooks文件目录下的post-commit勾子文件,在hooks下很多tmpl文件,这些文件都是勾子的模板来的,
  如果需要使用的时候copy 一份去掉.tmpl后缀便可使用

# 先移动到这个文件夹,再改名
cd /data/svn/repo/hooks/
cp post-commit.tmpl post-commit
# 设置post-commit 文件的权限 切记这步一定不可漏,不然后期运行时会报错
chmod 777 post-commit 

这样就会生成一个有效的post-commit 文件,文本改成下面的样式

#!/bin/sh
# 上边这个不是注释,必须带上,我之前在这里踩坑,以为是注释内容没带上
# 其实是linux用于指定由哪个解释器来执行脚本的标记
REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
# 项目版本库地址
BASEPATH=/www/wwwroot/repo
WEBPATH="$BASEPATH/"
export LANG=zh_CN.UTF-8
# 账号 hello 密码 123
svn update $WEBPATH --username hello --password 123 --no-auth-cache

最后操作是关闭服务然再打开服务,请参考上方其他命令重启svn服务

电脑端SVN地址:

https://pan.baidu.com/s/1kBjFWJCGCSuHqvlRR8fkIQ?pwd=kj73

文章来源

原文地址:https://www.freesion.com/article/711642592/

原文地址:https://www.runoob.com/w3cnote/linux-subversion-yum.html

原文地址https://blog.csdn.net/baixiaoshengaaa/article/details/108866038

Css 相关操作

css超出部分显示省略号

/*单行超出部分显示…*/
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;

/*多行超出部分显示…*/
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;

npm安装教程  node14

1下载安装

https://pan.baidu.com/s/1LRZA8adOieeldCTK5wuSaQ?pwd=b5ty

可以使用默认路径,本例子中自行修改为d:\nodejs

一路点Next,最后点Finish完成

2.打开CMD,检查是否正常

输入 node-v ,如图已经安装好

3.再看看另外2个目录,npm的本地仓库跑在系统盘c盘的用户目录了(没见到npm-cache是因为没有用过,一使用缓存目录就生成了),我们试图把这2个目录移动回到D:\nodejs

先如下图建立2个目录

node_global node_cache

然后运行以下2条命令

  • npm config set prefix “D:\nodejs\node_global”
  • npm config set cache “D:\nodejs\node_cache”

3.配置镜像站

输入命令npm config set registry=http://registry.npm.taobao.org 配置镜像站

检查一下镜像站行不行 命令 npm config get registry

出现下图表示成功

4.注意

此时,默认的模块D:\nodejs\node_modules 目录
将会改变为D:\nodejs\node_global\node_modules 目录,
如果直接运行npm install等命令会报错的。
我们需要做1件事情:
1、增加环境变量NODE_PATH 内容是:D:\nodejs\node_global\node_modules

(注意,一下操作需要重新打开CMD让上面的环境变量生效)

安装淘宝npm(cnpm)

npm install -g cnpm --registry=https://registry.npm.taobao.org

将 D:\nodejs\node_global 添加进环境变量

输入cnpm -v命令,查看结果

如果安装后出现 cmd管理员模式才能运行node 的错误

cmd输入命令set-ExecutionPolicy RemoteSigned

之后输入YES

内容来源:

https://www.cnblogs.com/goldlong/p/8027997.html

https://www.csdn.net/tags/NtzaEg1sNzM3MzktYmxvZwO0O0OO0O0O.html

win10 实时保护永久关闭

用CMD命令修改注册表

除了前两种方法外,有一个更高级的CMD命令,可以直接更改注册表,同样达到前两种方法实现的效果。

首先,用管理员身份打开CMD窗口(PowerShell),然后执行下面这条语句:

reg add  "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1

原文地址 http://www.webkaka.com/tutorial/system/2021/022431/#method_03

uniapp实现一键登录

1、开通uni一键登录服务

1)需要登录DCloud开发者中心,申请开通一键登录服务。(注:已在开发者中心开发了项目应用获取appid)

2)进入基础配置配置相关的信息,我这个是已经配置好了,在获取用户手机号码时需要云服务用到的ApiKeyApiSecret可在这里获取

真机调试无需添加应用,如需打包使用请添加。一键登录应用ID为离线打包时配置的appid

3)添加服务空间

2、uni-app项目开通uniCloud服务

1)在uni-app项目中创建云开发环境,可阿里云或者腾讯云(我的是阿里云)

2)创建云函数,右键云开发环境创建

3)云函数使用

'use strict';
exports.main = async (event, context) => {
	// event里包含着客户端提交的参数
		const res = await uniCloud.getPhoneNumber({
			appid: 'xxxx', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
			provider: 'univerify',
			apiKey: 'caf274f2f33c8715725f28ee5c755602', // 在开发者中心开通服务并获取apiKey
			apiSecret: '03f484268054c2b8f4cfb575ed5f2d89', // 在开发者中心开通服务并获取apiSecret
			access_token: event.access_token,
			openid: event.openid
		})
		// 这里已经成功获取手机号,访问后端接口处理
		const phone = res.phoneNumber
		const apiUrl = "xxxx" // 后端登录验证地址
		
		return await uniCloud.httpclient.request(apiUrl, {
		    method: 'POST',
		    data: {
		      phone: phone
		    },
		    contentType: 'json', // 指定以application/json发送data内的数据
		    dataType: 'json' // 指定返回值为json格式,自动进行parse
		  })
};

4)将云函数上传到云服务器(点击云函数右键上传)

5)项目配置(manifest.json中app模块的一键登录勾选)

3、项目开发

1)页面点击一键登录(客户端-预登录)

uni.preLogin({
					provider: 'univerify',
					success(res) { //预登录成功
					console.log('预登录成功'); 
						uni.login({
							provider: 'univerify',
							univerifyStyle: {
								"icon": {
									"path": "static/0105c858eeffaca8012049ef28010c.jpg" // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo   
								},
							},
							success(res) { // 登录成功
								uniCloud.callFunction({
									name: 'get_phone_with_card_token', // 你的云函数名称
									data: {
										access_token: res.authResult
											.access_token, // 客户端一键登录接口返回的access_token
										openid: res.authResult.openid // 客户端一键登录接口返回的openid
									}
								}).then(res => {
									console.log(res);
									if (res.result.data.status == 0) {
										// 登陆失败操作
										console.log('登陆失败操作');
									} else {
										console.log('登陆成功操作');
										// 登陆成功操作
										uni.closeAuthView()
									}
								}).catch(err => {
									console.log("获取失败");
								})
							},
							fail(res) { // 登录失败
							}
						})
					},
					fail(res) { // 预登录失败
						// 不显示一键登录选项(或置灰)
						// 根据错误信息判断失败原因,如有需要可将错误提交给统计服务器
						console.log('失败', 2222);
						console.log(res.errCode)
						console.log(res.errMsg)
					}
				});

2)运行时可在云函数中查看日志(判断是否请求成功)

注)如果手机没有插入有效的sim卡,或者手机蜂窝数据网络关闭,都有可能造成预登陆校验失败。(所以运行测试时需要在有sim卡的真机上测试,使用数据线连接电脑和手机,将项目运行在手机上)
连接后可自动检测

原文链接https://blog.csdn.net/weixin_42373488/article/details/113182370

PHP 后台配置规范

// 表单
// 输入框 'type' => 'input'
// 'maxlength' => 20 最大输入字符个数20
['field' => 'code', 'title' => '员工编号', 'type' => 'input', 'maxlength' => 20]

if(isempty($search, 'pantou_code')) // like 搜索
  $o->whereLike('a.pantou_code' , "%{$search['pantou_code']}%");
if(isempty($search, 'create_time')) { // 时间段内
  $date = $search['create_time'];
  $date[1] = date('Y-m-d H:i:s', strtotime($date[1].' 00:00:00')+86399);
  $o->whereTime('a.create_time', 'between', [$date[0].' 00:00:00', $date[1]]);
}

python中删除某个元素的3种方法

1.remove: 删除单个元素,删除首个符合条件的元素,按值删除
举例说明:
>>> str=[1,2,3,4,5,2,6]
>>> str.remove(2)
>>> str
[1, 3, 4, 5, 2, 6]

2.pop:  删除单个或多个元素,按位删除(根据索引删除)
>>> str=[0,1,2,3,4,5,6]
>>> str.pop(1)   #pop删除时会返回被删除的元素
1
>>> str
[0, 2, 3, 4, 5, 6]
>>> str2=['abc','bcd','dce']
>>> str2.pop(2)
'dce'
>>> str2
['abc', 'bcd']

3.del:它是根据索引(元素所在位置)来删除
举例说明:
>>> str=[1,2,3,4,5,2,6]
>>> del str[1]
>>> str
[1, 3, 4, 5, 2, 6]
>>> str2=['abc','bcd','dce']
>>> del str2[1]
>>> str2
['abc', 'dce']

除此之外,del还可以删除指定范围内的值。
>>> str=[0,1,2,3,4,5,6]
>>> del str[2:4]  #删除从第2个元素开始,到第4个为止的元素(但是不包括尾部元素)
>>> str
[0, 1, 4, 5, 6]

del 也可以删除整个数据对象(列表、集合等)
>>> str=[0,1,2,3,4,5,6]
>>> del str
>>> str         #删除后,找不到对象

Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    str
NameError: name 'str' is not defined

注意:del是删除引用(变量)而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除。

补充: 删除元素的变相方法
s1=(1,2,3,4,5,6)
s2=(2,3,5)
s3=[]
for i in s1:
if i not in s2:
    s3.append(i)
print 's1-1:',s1
s1=s3
print 's2:',s2
print 's3:',s3
print 's1-2:',s1