import * as dd from "dingtalk-jsapi";
created() {
this.setNavTitle("登录页");
}
/** 设置钉钉导航栏标题 */
setNavTitle(str = "") {
dd.ready(() => {
dd.biz.navigation.setTitle({
title: str, // 控制标题文本,空字符串表示显示默认文本
});
});
}
destroyed() {
this.setNavTitle("");
}
isEmpty(obj) {
let empty = true;
for (const key in obj) {
if (obj[key] && obj[key].length > 0) {
empty = false;
break;
}
}
return empty;
}
// 去除空对象
onFilter(array) {
return array.filter(item => !this.isEmpty(item));
}
// 使用 this.onFilter(newArray)
removalData(arrData) {
const hash = {};
arrData = arrData.reduce((item, next) => {
// businessType是你要以什么属性去重
// if (!hash[next.businessType]) {
// hash[next.businessType] = true;
// item.push(next);
// }
// return item;
hash[next.key] ? "" : (hash[next.key] = true && item.push(next));
return item;
}, []);
return arrData;
}
1.倒序
sort(property) {
return (a,b) => {
return a[property] < b[property] ? 1 : -1;
}
};
2.升序
sort(property) {
return (a,b) => {
return a[property] > b[property] ? 1 : -1;
}
}
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i].deptName === arr[j].deptName) {
this.$showWarningMsg(‘事业部重名了,请重新输入‘)
this.loading = false
return false
}
}
}
startDate = this.$moment(new Date()).format("YYYY-MM-DD"); // 当天
oneMonth = this.$moment(
new Date().setTime(new Date().getTime() + 3600 * 1000 * 24 * 30)
).format("YYYY-MM-DD"); // 一个月
threeMonth = this.$moment(
new Date().setTime(new Date().getTime() + 3600 * 1000 * 24 * 90)
).format("YYYY-MM-DD"); // 三个月
halfYear = this.$moment(
new Date().setTime(new Date().getTime() + 3600 * 1000 * 24 * 180)
).format("YYYY-MM-DD"); // 半年
oneYear = this.$moment(
new Date().setTime(new Date().getTime() + 3600 * 1000 * 24 * 365)
).format("YYYY-MM-DD"); // 1年
this.$moment().add(30, "d").format("YYYY-MM-DD") // 30天
objHeavy(arr) {
const newArr = []; // 存新数组
const obj = {}; // 存处理后转成字符串的对象
for (let i = 0; i < arr.length; i++) {
const keys = Object.keys(arr[i]);
keys.sort(function (a, b) {
return Number(a) - Number(b);
});
let str = "";
for (let j = 0; j < keys.length; j++) {
str += JSON.stringify(keys[j]);
str += JSON.stringify(arr[i][keys[j]]);
}
if (!obj.hasOwnProperty(str)) {
newArr.push(arr[i]);
obj[str] = true;
}
}
return newArr;
}
const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function replace(location) {
return originalReplace.call(this, location).catch(err => err);
};
input type="number" 去除上下箭头
注意:在使用 element-UI 的 vue 项目中重写 el_input 样式要在全局中写,在 scoped 重谢这些样式不起作用!!
禁止滚轮滚动改变数值
使用 type="number"后滚动鼠标的滚轮可以改变数值。要想去掉这个效果可以添加@mousewheel.native.prevent 事件
<el-input v-model.number="addManger.mobile" type="number" placeholder="请输入" @mousewheel.native.prevent />
input type = number 禁止输入 e
onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"
this.isPhone = /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent); // 判断是否是苹果手机
// /android/i.test(navigator.userAgent) 是否是安卓手机
// e.returnValue = false; // 阻止默认事件
e.preventDefault();
滚动加载
原理就是监听页面滚动事件,分析 clientHeight、scrollTop、scrollHeight 三者的属性关系。
window.addEventListener(‘scroll‘, function() {
const clientHeight = document.documentElement.clientHeight;
const scrollTop = document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight;
if (clientHeight + scrollTop >= scrollHeight) {
// 检测到滚动至页面底部,进行后续操作
// ...
}
}, false)
父组件里
include = [];
@Project(‘Add‘)
Add(val) {
const tmp = this.include.some(e => e === val);
// 如果不存在则加入
if(!tmp) {
this.include.push(val)
}
}
@Project(‘Detele)
Detele(val) {
const tmp = this.include.findIndex(e => e === val);
// 找不到会显示-1
if(tmp !== -1) {
this.include.splice(tmp,1)
}
}
子组件里
@Inject(‘Add‘) Add;
created() {
this.Add(‘需要缓存的 name‘)
}
// 1、挂载完成后,判断浏览器是否支持popstate
mounted() {
if(window.history && window.history.pushState) {
history.pushState(null,null,document.URL);
window.addEventListener(‘popstate‘,this.goBack,false);
}
}
destroyed() {
// 2、页面销毁时,取消监听。否则其他vue路由页面也会被监听
window.removeEventListener(‘popstate‘,this.goBack,false);
}
// 3、removeEventListener取消监听内容必须跟开启监听保持一致
goBack() {
this.$router.push(‘/‘)
}
activated(){
if(window.history && window.history.pushState) {
history.pushState(null,null,document.URL);
window.addEventListener(‘popstate‘,this.goBack,false);
}
}
deactivated() {
window.removeEventListener(‘popstate‘,this.goBack,false);
}
api
export function getPmprojectExport(data) {
return request({
url: "api/ProjectList/Export",
method: "post",
responseType: "blob",
data,
});
}
导出代码
const list = {};
getPmprojectExport(list).then(res => {
const Blob = res.data;
// 根据实际情况判断没有数据
if (Blob.type === "application/json") {
this.$message.error("目前没有数据");
} else {
const a = document.createElement("a");
// a.download = `${Number(new Date())}.xlsx`;
a.download = `${"项目列表"}.xlsx`;
a.href = URL.createObjectURL(Blob);
document.body.appendChild(a);
a.click();
a.remove();
}
});
<el-table :data="tableData"
border
height="100%"
v-loading="loading"
elementLoadingText="努力加载中"
elementLoadingSpinner="el-icon-loading"
elementLoadingBackground="rgba(0, 0, 0, 0.8)"
style="width: 100%;">
<el-table-column label="序号"
align="center"
width="70">
<template #default="{$index}"><span>{{ $index + (form.pageNumber - 1) * form.pageSize + 1 }}
</span></template>
</el-table-column>
<el-table-column v-for="item in columnList"
:key="item.id"
align="center"
:prop="item.prop"
:label="item.lable">
</el-table-column>
<el-table-column align="center"
prop="createTime"
label="日期">
<template #default="{row,column}">
<span>{{ row[column.property] ? $moment(row[column.property]).format(‘YYYY-MM-DD HH:mm:ss‘) : ‘‘ }}</span>
</template>
</el-table-column>
</el-table>
原文:https://www.cnblogs.com/DCL1314/p/14622335.html