1. Excel 日期格式化
formatDate ( numb, format ) {
const time = new Date ( ( numb - 1 ) * 24 * 3600000 + 1 )
time. setYear ( time. getFullYear ( ) - 70 )
const year = time. getFullYear ( ) + ''
const month = time. getMonth ( ) + 1 + ''
const date = time. getDate ( ) - 1 + ''
if ( format && format. length === 1 ) {
return year + format + month + format + date
}
return year + ( month < 10 ? '0' + month : month) + ( date < 10 ? '0' + date : date)
}
2. Excel 中文键名转英文键名
async success ( { header, results } ) {
const userRelations = {
'入职日期' : 'timeOfEntry' ,
'手机号' : 'mobile' ,
'姓名' : 'username' ,
'转正日期' : 'correctionTime' ,
'工号' : 'workNumber'
}
let newArr = results. map ( ( item ) => {
let userInfo = { } ;
Object. keys ( item) . forEach ( ( key ) => {
userInfo[ userRelations[ key] ] = item[ key] ;
} ) ;
return userInfo;
} ) ;
await importEmployee ( arr)
this . $message. success ( "Excel导入成功!" ) ;
this . $router. back ( )
}
3. 时间过滤器
4. 数组对象转换树形结构
let input = [ {
id : 1 ,
val : '学校' ,
parentId : null
} , {
id : 2 ,
val : '班级1' ,
parentId : 1
} , {
id : 3 ,
val : '班级2' ,
parentId : 1
} , {
id : 4 ,
val : '学生1' ,
parentId : 2
} , {
id : 5 ,
val : '学生2' ,
parentId : 2
} , {
id : 6 ,
val : '学生3' ,
parentId : 3
} , ]
function transformTreeList ( list, val ) {
let arr = [ ]
list. forEach ( item => {
if ( item. parentId === val) {
const children = transformTreeList ( list, item. id)
item. children = children. length ? children : [ ]
arr. push ( item)
}
} )
return arr
}
function transformTreeList ( list, parentId ) {
const tree = { } ;
const items = { } ;
list. forEach ( item => {
items[ item. id] = { ... item, children : [ ] } ;
} ) ;
list. forEach ( item => {
if ( item. parentId === parentId) {
tree[ item. id] = items[ item. id] ;
} else {
console. log ( 'items[item.parentId]::: ' , items[ item. parentId] , items[ item. id] ) ;
if ( items[ item. parentId] ) {
items[ item. parentId] . children. push ( items[ item. id] ) ;
} else {
console. log ( '没有父节点的数据::: ' , item) ;
}
}
} ) ;
console. log ( 'items::: ' , items, tree) ;
return Object. values ( tree) ;
}
const ss = filterList ( input, null )
console. log ( ss) ;
5. 数组对象转对象树形嵌套
function fn1 ( list ) {
let obj = { }
list. forEach ( item => {
if ( ! item. parentId) {
obj. id = item. id
obj. val = item. val
const children = fn2 ( item. id)
obj. children = children. length ? children : [ ]
}
} )
function fn2 ( id ) {
let arr = [ ]
list. forEach ( item => {
if ( item. parentId === id) {
const children = fn2 ( item. id)
arr. push ( {
id : item. id,
val : item. val,
children : children. length ? children : [ ]
} )
}
} )
return arr
}
return obj
}
let s1 = fn1 ( input)
console. log ( s1) ;
6. 防抖(只执行最后一次)
data ( ) {
return {
timer : null
}
}
methods : {
if ( this . timer) {
clearTimeout ( this . timer) ;
}
this . timer && clearTimeout ( this . timer)
this . timer = setTimeout ( async ( ) => {
console. log ( 'wwwwwwww' ) ;
await saveUserDetailById ( {
... this . userInfo,
staffPhoto : fileList. length ? fileList[ 0 ] . url : " " ,
} )
this . $message. success ( "更新成功" )
this . timer= null
} , 500 ) ;
}
export function debounce ( fn, t ) {
let delay = t || 300 ;
let timer = null ;
return function ( ) {
timer && clearTimeout ( timer)
timer = setTimeout ( ( ) => {
fn . apply ( this , arguments) ;
} , delay) ;
}
}
change : Debounce ( function ( val ) {
console. log ( '防抖了' )
} , 500 )
btn : debounce ( async function ( val ) {
const fileList = this . $refs. staffPhoto. fileList;
await saveUserDetailById ( {
... this . userInfo,
staffPhoto : fileList. length ? fileList[ 0 ] . url : " " ,
} ) ;
console. log ( "防抖了" ) ;
} ) ,
7. 节流(等待上次执行完再执行)
data ( ) {
return {
timer : null
}
}
methods : {
if ( this . timer) {
return ;
}
this . timer = setTimeout ( async ( ) => {
await saveUserDetailById ( {
... this . userInfo,
staffPhoto : fileList. length ? fileList[ 0 ] . url : " " ,
} ) ;
this . timer = null ;
this . $message. success ( "更新成功" ) ;
} , 500 ) ;
}
export function throttle ( fn, delay = 500 ) {
let canRun = null ;
return function ( ) {
if ( canRun) return ;
canRun = setTimeout ( ( ) => {
fn . apply ( this , arguments) ;
canRun = null
} , delay) ;
} ;
}
btn : throttle ( async function ( val ) {
const fileList = this . $refs. staffPhoto. fileList;
await saveUserDetailById ( {
... this . userInfo,
staffPhoto : fileList. length ? fileList[ 0 ] . url : " " ,
} ) ;
console. log ( "节流了" ) ;
} ) ,
8. 下载文件 (全局混入)
export default {
methods : {
downLoad ( url ) {
console. log ( url) ;
let a = document. createElement ( "a" ) ;
let evt = document. createEvent ( "MouseEvents" ) ;
a. download = "1.docx" ;
a. href = url;
evt. initEvent ( "click" , true , true ) ;
a. dispatchEvent ( evt) ;
window. URL . revokeObjectURL ( a. href) ;
this . $message. success ( "操作成功" ) ;
} ,
}
}
9. 加载中
const loading = this . $loading ( {
lock : true ,
text : "正在加载中...请不要关闭此页面" ,
spinner : "el-icon-loading" ,
background : "rgba(0, 0, 0, 0.7)"
} ) ;
loading. close ( ) ;
10. 图片懒加载指令
lazy : {
mounted ( el ) {
console. log ( el) ;
let data = el. src
el. src = ''
const observer = new IntersectionObserver ( ( [ { isIntersecting } ] ) => {
if ( isIntersecting) {
el. src = data
observer. unobserve ( el)
}
} )
observer. observe ( el)
console. log ( observer) ;
}
}
11. 动态注册所有 components 下的组件
const componentsContext = require. context ( './components' , true , / index.vue$ / , 'sync' )
console. log ( componentsContext. keys ( ) ) ;
console. log ( componentsContext) ;
componentsContext. keys ( ) . forEach ( ( path ) => {
const key = componentsContext ( path) . default || componentsContext ( path)
vue. component ( key. name, key)
} )