md5 加密
1.npm安装:
npm install --save js-md5
2.在需要使用的项目文件中引入:
import md5 from 'js-md5';
3.使用
md5('holle')
vant下滑加载更多
html
<div class="detail">
<van-pull-refresh disabled v-model='isLoading'>
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
:offset="100"
>
<div class="single" v-for="(item, index) in list" :key="index">
<div class="detail-list">
<h2>{{item.symbol + ' ' + '永续/' + item.feeAsset + '逐仓'}}</h2>
<div class="table">
<div class="left">
<span>收益(USDT)</span>
<p>{{item.realProfit + item.fee}}</p>
</div>
<div class="center">
<span>张数</span>
<p>{{item.volume}}</p>
</div>
<div class="right">
<span>时间</span>
<p>{{dayjs(item.createTime).format('HH:mm MM/D')}}</p>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
js
export default {
data() {
return {
list: [],
loading: false,
finished: false,
num: 4, // 默认显示4条
isLoading: false
};
},
created () {
this.getProfitDetail()
},
methods: {
onLoad() {
this.num++;
this.Api.post('apiUserQuantifyConfigProfitList', {limit: this.num, page: 1}).then(res=> {
if (res.data.code) {
this.$message(res.data.msg)
return
}
res.data.data.profitList.list.map(res => {
this.list.push(res)
})
// 加载状态结束
this.loading = false;
// 数据全部加载完成
if (this.list.length >= res.data.data.profitList.totalCount) {
this.finished = true;
}
})
}
},
};
</script>
生成二维码
1,导入第三方插件
npm install –save qrcode
2.在页面上引入
import QRCode from 'qrcodejs2'
3 .html代码
<div id="qrcode" ref="qrcode"></div>
4.js方法
qrcode () {
this.$refs.qrcode.innerHTML = '' // 清空之前生成的二维码内容
let qrcode = new QRCode('qrcode',{
width: 180, // 设置宽度,单位像素
height: 180, // 设置高度,单位像素
text: this.userAddress.address // 设置二维码内容或跳转地址(完整链接)
})
console.log(qrcode)
},
点击复制功能
<p class="p2" ref="address">{{userAddress.address}}</p>
<button @click="copy">复制</button>
copy () {
let value = this.$refs.address.innerHTML
let input = document.createElement("input"); // 直接构建input
input.value = value; // 设置内容
document.body.appendChild(input); // 添加临时实例
input.select(); // 选择实例内容
document.execCommand("Copy"); // 执行复制
if (document.execCommand("Copy")) {
// console.log("okok");
// this.$toast.success("复制成功");
this.$toast({
message:'复制成功',
position: 'bottom'
})
} else {
this.$toast.success("复制失败,请重试。");
}
document.body.removeChild(input); // 删除临时实例
}
websocket获取后端传递数据,再实时更新页面数据
使用!
import { sendWebsocket, closeWebsocket } from '@/utils/websocket.js'
wsMessage (data) {
const dataJson = data
if (dataJson.datatype === 'tick') {
this.tickContractList.forEach((v, index) => {
if (v.symbol === dataJson.data.symbol) {
let lilv = (( dataJson.data.close - dataJson.data.open ) / dataJson.data.open * 100).toFixed(2)
this.$set(this.tickContractList[index], 'close', dataJson.data.close)
this.$set(this.tickContractList[index], 'beClose', lilv)
}
})
}
},
wsError () {
// 比如取消页面的loading
console.log("连接错误")
},
requstWs () {
// 防止用户多次连续点击发起请求,所以要先关闭上次的ws请求。
closeWebsocket()
// 跟后端协商,需要什么参数数据给后台
const obj = {}
// 发起ws请求
sendWebsocket('ws://47.108.68.132:8889/websocket/contract-all', obj, this.wsMessage, this.wsError)
},
websocket.js
import { Toast } from 'vant';
// import { getToken } from '@/utils/authToken' // 与后端的协商,websocket请求需要带上token参数
let websock = null
let messageCallback = null
let errorCallback = null
let wsUrl = ''
// let tryTime = 0
// 接收ws后端返回的数据
function websocketonmessage (e) {
messageCallback(JSON.parse(e.data))
}
/**
* 发起websocket连接
* @param {Object} agentData 需要向后台传递的参数数据
*/
function websocketSend (agentData) {
// 加延迟是为了尽量让ws连接状态变为OPEN
setTimeout(() => {
// 添加状态判断,当为OPEN时,发送消息
if (websock.readyState === websock.OPEN) { // websock.OPEN = 1
// 发给后端的数据需要字符串化
websock.send(JSON.stringify(agentData))
}
if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3
console.log('websock.readyState=3')
// Toast.fail('ws连接异常,请稍候重试')
errorCallback()
}
}, 500)
}
// 关闭ws连接
function websocketclose (e) {
// e.code === 1000 表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
// e.code !== 1000 表示非正常关闭。
if (e && e.code !== 1000) {
// Toast.fail('ws连接异常,请稍候重试')
errorCallback()
// // 如果需要设置异常重连则可替换为下面的代码,自行进行测试
// if (tryTime < 10) {
// setTimeout(function() {
// websock = null
// tryTime++
// initWebSocket()
// console.log(`第${tryTime}次重连`)
// }, 3 * 1000)
//} else {
// Message.error('重连失败!请稍后重试')
//}
}
}
// 建立ws连接
function websocketOpen (e) {
console.log(e, 'ws连接成功')
}
// 初始化weosocket
function initWebSocket () {
if (typeof (WebSocket) === 'undefined') {
Toast.fail('您的浏览器不支持WebSocket,无法获取数据')
return false
}
// const token = 'JWT=' + getToken()
// ws请求完整地址
const requstWsUrl = wsUrl
websock = new WebSocket(requstWsUrl)
websock.onmessage = function (e) {
websocketonmessage(e)
}
websock.onopen = function () {
websocketOpen()
}
websock.onerror = function () {
// Toast.fail('ws连接异常,请稍候重试')
errorCallback()
}
websock.onclose = function (e) {
websocketclose(e)
}
}
/**
* 发起websocket请求函数
* @param {string} url ws连接地址
* @param {Object} agentData 传给后台的参数
* @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
* @param {function} errCallback ws连接错误的回调函数
*/
export function sendWebsocket (url, agentData, successCallback, errCallback) {
wsUrl = url
initWebSocket()
messageCallback = successCallback
errorCallback = errCallback
websocketSend(agentData)
}
/**
* 关闭websocket函数
*/
export function closeWebsocket () {
if (websock) {
websock.close() // 关闭websocket
websock.onclose() // 关闭websocket
}
}
AES加密
注意事项
1.注意后端使用的那种加密方式
区别
1)ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
2)CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)
1.安装 crypto.js
npm install crypto-js --save-dev
2.在src目录下新建个放公用js文件夹(utils),再建一个AES.js文件
3.AES.js 文件中写如下代码
import CryptoJS from 'crypto-js';
export default {
//随机生成指定数量的16进制key
generatekey(num) {
let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let key = "";
for (var i = 0; i < num; i++) {
let randomPoz = Math.floor(Math.random() * library.length);
key += library.substring(randomPoz, randomPoz + 1);
}
return key;
},
//加密
encrypt(word, keyStr) {
keyStr = keyStr ? keyStr : 'abcdsxyzhkj12345'; //判断是否存在ksy,不存在就用定义好的key
var key = CryptoJS.enc.Utf8.parse(keyStr);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
},
//解密
decrypt(word, keyStr) {
keyStr = keyStr ? keyStr : 'abcdsxyzhkj12345';
var key = CryptoJS.enc.Utf8.parse(keyStr);
var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
-
在需要使用的地方引入
import AES from “@/utils/AES.js”5.调用该方法
let encrypts = AES.encrypt(JSON.stringify(需要加密的内容));
let dess = JSON.parse(AES.decrypt(encrypts));
console.log(encrypts) //打印加密
console.log(dess) //打印解密