Vue项目的一些小细节

vue-router跳转时打开新页面

let routeUrl = router.resolve({ path: '/', query: {} });
window.open(routeUrl.href, '_blank');

 elementui树形控件实现单选叶子节点

  <el-input
        placeholder="输入关键字进行过滤"
        v-model="filterText">
  </el-input>
  <el-tree
        :data="peopledata"
        show-checkbox
        node-key="id"
        ref="tree"
        :filter-node-method="filterNode"
        check-on-click-node
        @check-change="handleNodeClick"
        :props="defaultProps">
 </el-tree>
data(){
        return{
          defaultProps: {
            children: "children",
            label: "name",
            value: "id",
          },
          filterText:'',
          peopledata: [],
          selectNode:{}
        }
    },
 watch: {
      filterText(val) {
        this.$refs.tree.filter(val);
      }
    },
methods:{
 filterNode(value, data) {
        if (!value) return true;
        return data.name.indexOf(value) !== -1;
      },
 handleNodeClick(data, checked) {
          if (checked) {
            this.selectNode={}
            const a = this.$refs.tree.getNode(data.id);
            if (a.childNodes.length == 0) {
              this.$refs.tree.setCheckedKeys([]);
            this.$refs.tree.setCheckedNodes([data])
            this.selectNode = data
            }else{
              this.$refs.tree.setCheckedKeys([]);
            }
      }
    },
}

实时时间

setInterval(function () {
		let Datetime = new Date();
		let Y = Datetime.getFullYear() + '-';
		let M = (Datetime.getMonth() + 1 < 10 ? '0' + (Datetime.getMonth() + 1) : Datetime.getMonth() + 1) + '-';
		let D = (Datetime.getDate() < 10 ? '0' + Datetime.getDate() : +Datetime.getDate()) + ' ';
		let H = (Datetime.getHours() < 10 ? '0' + Datetime.getHours() : +Datetime.getHours()) + ':';
		let m = (Datetime.getMinutes() < 10 ? '0' + Datetime.getMinutes() : +Datetime.getMinutes()) + ':';
		let s = Datetime.getSeconds() < 10 ? '0' + Datetime.getSeconds() : +Datetime.getSeconds();
		time.value = Y + M + D + H + m + s;
	}, 1000);

实时天气

高德天气查询API

官方文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo/#t1

 参数:①key:官网申请;②city:城市编码https://lbs.amap.com/api/webservice/download

 ③extensions:气象类型,base实况天气,all预报天气;④output:返回格式JSON或XML

axios.get(`https://restapi.amap.com/v3/weather/weatherInfo?key=${userkey}&city=${citycode}&extensions=all`).then((res) => {
				console.log(res.data, '天气数据');
			});

elementui表格标题或内容换行

在需要换行的文字中间加上 \n 换行符

样式添加

:deep(.el-table) {
	.cell {
		white-space: pre-line; /*保留换行符*/
	}
}

vue3表格滚动vue3-seamless-scroll

安装

npm install vue3-seamless-scroll --save

引入

import { Vue3SeamlessScroll } from 'vue3-seamless-scroll';

使用

<el-table class="top" :data="tableData">
	<el-table-column type="index" width="40px" label="序号" />
	<el-table-column prop="renYuanLeiXing" label="人员类型" width="80px" ></el-table-column>
	<el-table-column prop="xingMing" label="姓名" width="60px"></el-table-column>
	<el-table-column prop="lianXiDianHua" label="手机号码" width="90px"> </el-table-column>
	<el-table-column prop="xianrenzhiwuGongzhong" label="工种" ></el-table-column>
	<el-table-column prop="sanJiJiaoYuShiJuan" label="三级教育" ></el-table-column>
	<el-table-column prop="gangQianJiaoYuShiJuan " label="岗前教育" > </el-table-column>
</el-table>
<div  class="bottom" style="height: calc(100% - 30px); overflow: hidden">
	<Vue3SeamlessScroll ref="vueSeamlessRef" :list="tableData" :hover="true" :step="2" class="scroll-list-seamless">
		<el-table :show-header="true" :cell-style="{ 'text-align': 'center' }" ref="datalist" :row-style="{ height: '16px' }" style="width: 100%" v-loading="loading" :data="tableData">
				 <el-table-column type="index" width="40px" label="序号" />
				<el-table-column prop="renYuanLeiXing" label="人员类型" width="80px" ></el-table-column>
				<el-table-column prop="xingMing" label="姓名" width="60px"></el-table-column>
				<el-table-column prop="lianXiDianHua" label="手机号码" width="90px"> </el-table-column>
				 <el-table-column prop="xianrenzhiwuGongzhong" label="工种" ></el-table-column>
				<el-table-column prop="sanJiJiaoYuShiJuan" label="三级教育" ></el-table-column>
				<el-table-column prop="gangQianJiaoYuShiJuan " label="岗前教育" > </el-table-column>
		
		</el-table>
	</Vue3SeamlessScroll>
</div>

vue2表格滚动tableScroll

tableScroll(table, speed = 30) {
        // 拿到表格中承载数据的div元素
        const divData = table.bodyWrapper;
        let timer;
        const startScroll = () => {
          // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
          clearInterval(timer);
          timer = setInterval(() => {
            // 元素自增距离顶部1像素
            divData.scrollTop += 1;
            // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
            if (divData.clientHeight + divData.scrollTop + 1 > divData.scrollHeight) {
              // 重置table距离顶部距离
              divData.scrollTop = 0;
            }
          }, speed);
        };
        startScroll();
        //鼠标移入
        divData.onmouseover = () => {
          clearInterval(timer);
        };

        //鼠标移出
        divData.onmouseout = () => {
          clearInterval(timer);
          startScroll();
        };

        //窗口发生改变
        window.onresize = () => {
          return (() => {
            window.screenHeight = document.body.clientHeight;
            document.clientHeight = window.screenHeight;
          })();
        };
      },

使用

this.tableScroll(this.$refs.group, 45)

文本滚动(自动滚动函数)

const contentRef = ref();
//自动滚动函数
const Autoscroll = (dom:any) => {
	const setInter = function () {
		if (dom.scrollTop+1 > dom.scrollHeight - dom.clientHeight) {
			dom.scrollTop = 0;
		} else {
			dom.scrollTop++;
		}
	};
	timer.value && clearInterval(timer.value);
	timer.value = setInterval(setInter, 100);
	dom.addEventListener('mouseover', function () {
		timer.value && clearInterval(timer.value);
	});
	dom.addEventListener('mouseout', function () {
		timer.value = setInterval(setInter, 100);
	});
};

调用

Autoscroll(contentRef.value);

echarts数据切换

 var option = Chart3.getOption()
    var a=[
    {
    value:1,name:"外部检测",
    },{
    value:4,name:"内部检测",
    }]
    option.series[0].data=a
    Chart3.setOption(option,true);

前端记住密码功能

安装crypto-js

npm install --save crypto-js

加密方法(判断记住密码是否勾选,已勾选就加密并存储在cookie,未勾选则清理cookie)

import * as CryptoJS from 'crypto-js';



if (ischecked.value) {
	var loginform={
		password:state.ruleForm.password,
		username:state.ruleForm.username
	}
	var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(loginform),'pigxpigxpigxpigx').toString();
	console.log(ciphertext,'加密后');
	setCookie(ciphertext, 7); //加密后存储在cookie
 } else {
       // 清理cookie
	     clearCookie()
        }

 // 设置cookie
 const setCookie=(params:string, days:number)=> {
        var date = new Date(); // 获取时间
        date.setTime(date.getTime() + 24 * 60 * 60 * 1000 * days); // 保存的天数
        // 字符串拼接cookie
        window.document.cookie = 'user' + '=' + params + ';path=/;expires=' + date;
      }
const clearCookie=()=> {
        var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
        console.log('keys', keys);
        if (keys) {
          for (var i = keys.length; i--;) {
            document.cookie = keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString(); //清除当前域名下的
          }
        }
      }

解密并回显用户名及密码(登录组件挂载时调用)

  // 获取cookie
const getCookie=()=> {
        if (document.cookie.length != 0) {
          let arr = document.cookie.split('; '); //分割成一个个独立的“key=value”的形式
          for (let i = 0; i < arr.length; i++) {
            let index = arr[i].indexOf('=');
            if (index !== -1) {
              if (arr[i].substring(0, index) == 'user') {
                var ciphertext = arr[i].substring(index + 1, arr[i].length);
                var bytes = CryptoJS.AES.decrypt(ciphertext, 'pigxpigxpigxpigx');
                var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
                console.log('解密后', decryptedData);
				state.ruleForm.password=decryptedData.password
				state.ruleForm.username=decryptedData.username
                ischecked.value = true;
              }
            }
          }
        }
	}

input框自动填充后背景颜色改变

场景:input 自动填充账号密码,选择完账号之后输入框的会有背景颜色

:deep(.el-input__inner) {
    -webkit-text-fill-color: #ededed !important;
    background-color: transparent !important;
    transition: background-color 50000s ease-in-out 0s;
}
//或者
input:-webkit-autofill {
    transition: background-color 5000s ease-in-out 0s;
    -webkit-text-fill-color: #ededed !important;
}

手动上传流文件

function uploadSectionFile(val){
    const formData=new FormData()
	formData.append('file',val)//val是二进制流
	upload(formData).then((res)=>{
		//上传成功
	})

}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值