记录vue+datav + element ui 项目问题
1. nginx跨域问题
首先是配置,在nginx.conf文件里配置文件路径
location / { root html/vue-sreen/dist; index index.html;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';}
配置
proxy_passlocation /api/getImageFile/dca6321268a5/{
proxy_pass http://xiaolongqx.natapp1.cc/getImageFile/dca6321268a5; }
(不确定是否影响)
location ~ \.php$ { proxy_pass http://xiaolongqx.natapp1.cc;}在vue中请求http://xiaolongqx.natapp1.cc/getImageFile/dca6321268a5时改为api/getImageFile/dca6321268a5`
首先引入ezuikit.js
import ezuikit from'./ezuikit.js'
import 'uikit/dist/css/uikit.min.css'
import './jquery.min.js'
不确定是否引入video.js(安装时不能冲突重复安装,命令行会报错)使用
updated () { if(this.rtmp_url!=""){ //如果在mounted中声明,直播地址还未取到,导致视频不显示。
所以放在了这里
this.player = new EZUIPlayer('myPlayer'); } },
问题:在动态更改src链接时,数据会改变,但不会渲染到视图层,需要强制刷新页面才能更改,需手动刷新页面才能可以,但使用感不好,在刷新时会出现页面闪白状态,可以使用跳转空白页,在空白页设置
beforeRouteEnter (to, from, next) { next(vm => { vm.$router.replace(from.path) }) }
路由会有一瞬间的变化,但页面不会闪
datav折线图
使用折线图时必须有x轴或y轴的data值为‘value’(根据数据上的值自动显示对应的长度距离)
.轮播预览
dataList: ["https://i1.mifile.cn/a4/xmad_15535933141925_ulkYv.jpg","https://i1.mifile.cn/a4/xmad_15532384207972_iJXSx.jpg","https://i1.mifile. cn/a4/xmad_15517939170939_oiXCK.jpg"],
currentIndex: 0, //默认显示图片
timer: null
computed: {
//上一张
prevIndex () {
if(this.currentIndex == 0) {
return this.dataList.length - 1;
}else{
return this.currentIndex - 1;
}
},
//下一张
nextIndex () {
if(this.currentIndex == this.dataList.length - 1) {
return 0;
}else {
return this.currentIndex + 1;
}
}
}
gotoPage(index) {
this.currentIndex = index; // console.log(index)
this.clickpic = "width:200px;height:100px;padding:4px;border:1px solid #000bf1"
},
runInv () {
this.timer = setInterval(() => {
this.gotoPage(this.nextIndex)
}, 1000) }
window.setInterval(() => { setTimeout(fn, 0) }, 5000)
elemen ui
getRowClass ({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 0) {
return 'background:#030c1b;border:1px solid #365595!important'
} else {
return 'background:#030c1b;border:1px solid #365595!important'
}
},
rowstyle({ row, column, rowIndex, columnIndex }){
// if (rowIndex === 0) {
return 'background:#030c1b;border:1px solid #365595!important'
// } else {
// return 'background:#101239'
// }
},
el-table tbody tr:hover>td {
background-color:#3c3c3c!important
}
/* .el-table--border::after, .el-table--group::after, .el-table::before{
background-color: #000 !important;
} */
.el-table__body-wrapper::-webkit-scrollbar {
/*width: 0;宽度为0隐藏*/
width: 0px !important;
}
.el-table td.gutter, .el-table th.gutter {
width: 0px !important;
}
.el-table--border, .el-table--group, .el-table td, .el-table th.is-leaf{
border-color: #365595;
}
.el-table--border:after, .el-table--group:after, .el-table:before{
background-color: #365595;
content: "";
position: absolute;
z-index: 1;
}
.current-row > td {
background: #02274c !important;
}
.el-table tbody tr:hover>td /deep/{
background-color:#02274c!important
}
选中效果
handleCurrentChange(val){
this.currentRow = val
},
固定高度就可以滑动
config/index.jsdev: {
// Paths assetsSubDirectory: 'static',
assetsPublicPath: './',
proxyTable:{ '/api': {
target: '192.168.1.19:8090',//后端接口地址
changeOrigin: true,//是否允许跨越
pathRewrite: { '^/api': '/',//重写, }
} }
build: { // Template for index.html index: path.resolve(__dirname, '../dist/index.html'),
// Paths assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
编译后背景图片路径404问题
build/utils.js
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath:'../../' //加上这句
}) }
有一个问题,在创建vue项目时vue自动会有vue的图标,这时删掉也还会存在,原因是谷歌浏览器记忆的问题,换做欧朋浏览器就会没有,但有时直接在index.html修改不会变这时修改配置文件
**
**
使用纯js
var videoHtml='
这种切换src可以时刻换路径也会渲染到视图层
**
**
window.addEventListener('scroll', () => {
let scrollTop = document.documentElement.scrollTop ||
document.body.scrollTop ||
document.querySelector('.element').scrollTop;
console.log(scrollTop);
if(scrollTop + window.innerHeight >= document.body.offsetHeight) {
console.log('bottom')
}//判断是否到底部
}, true)
**
**
$(document).ready(function() {
openSocket();
//setInterval("selectImageUrl()", 1000*3);//3秒查询一次设备状态
});
var socket;
// 心跳检测,每隔一段时间检测连接状态,如果处于连接中,就像Server主动发送消息,来重置Server段与客户端的最大连接时间,如果已经断开,发起重连
var heartCheck = {
// 9分钟发起一次心跳,比Server端设置的连接时间稍微小一点,在接近断开的情况下以通信的方式去重置连接时间
timeout: 240000,
serverTimeoutObj: null,
reset: function () {
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function () {
this.serverTimeoutObj = setInterval(function () {
if (socket.readyState == 1) {
console.log("连接状态,发送消息保持连接");
var msg = "{\"equipmentCode\":\"\",\"message\":\"{\\\"deviceState\\\":\\\"\\\",\\\"entercloseId\\\":\\\"\\\"}\"}";
socket.send(msg);
// 如果获取到消息,说明连接正常,重置心跳检测
heartCheck.reset().start();
} else {
console.log("断开连接,尝试重连");
openSocket();
}
}, this.timeout)
}
};
function openSocket() {
if(typeof(WebSocket) == "undefined") {
console.log("您的浏览器不支持WebSocket");
}else{
console.log("您的浏览器支持WebSocket");
//实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接
var socketUrl="http://192.168.1.29:33333/api/testOne?equipmentCode=0000000000000000b6d31fd46351531f";
socketUrl=socketUrl.replace("https","ws").replace("http","ws");
console.log(socketUrl);
if(socket!=null){
socket.close();
socket=null;
}
socket = new WebSocket(socketUrl);
//打开事件
socket.onopen = function() {
heartCheck.reset().start();
console.log("websocket已打开");
console.log(new Date());
//socket.send("这是来自客户端的消息" + location.href + new Date());
};
//获得消息事件
socket.onmessage = function(msg) {
heartCheck.reset().start();
console.log(msg.data);
var dataObj = JSON.parse(msg.data);
alert(dataObj);
//发现消息进入 开始处理前端触发逻辑
};
//关闭事件
socket.onclose = function(e) {
console.log('websocket已关闭: ' + e.code + ' ' + e.reason + ' ' + e.wasClean)
console.log(new Date());
};
//发生了错误事件
socket.onerror = function() {
console.log("websocket发生了错误");
}
}
}