import Vue , { PluginFunction } from 'vue' ; import TopTipsComponent from './WTopTips' ; import { isObj } from '@/utils' ; type TopTipsOptions = { message ? : string ; visible ? : boolean ; duration ? : number ; } ; type TopTipsParams = ( string | Partial < TopTipsOptions > ) ; type InstanceType = Vue & { visible ? : boolean ; timer ? : any ; } ; export interface WTopTips { ( params ) : InstanceType ; close ( ) : void ; setDefaultOptions ( options ) : void ; resetDefaultOptions ( ) : void ; install : PluginFunction < Vue > ; defaultOptions : TopTipsOptions ; } let instance ; const defaultOptions = { visible : true , message : '' , duration : 3000 , } ; function parseOptions ( params ) { return ( isObj ( params ) ? < object > params : { message : params } ) ; } const createInstance = ( ) => { instance = new ( Vue . extend ( TopTipsComponent ) ) ( { el : document . createElement ( 'div' ) , } ) ; instance . $on ( 'update:visible' , ( visible ) => { instance . visible = visible ; } ) ; document . body . appendChild ( instance . $el ) ; } ; const WTopTips = < WTopTips > function ( options ) { options = { ... WTopTips . defaultOptions , ... parseOptions ( options ) , } ; if ( ! instance ) { createInstance ( ) ; } Object . assign ( instance , options ) ; clearTimeout ( instance . timer ) ; Object . assign ( instance , { ... options as TopTipsOptions } ) ; if ( ( options as TopTipsOptions ) . duration ! > 0 ) { instance . timer = setTimeout ( ( ) => { instance . visible = false ; } , options . duration ) ; } return instance ; } ; WTopTips . defaultOptions = defaultOptions ; WTopTips . close = function ( ) : void { if ( instance ) { instance . visible = false ; } } ; WTopTips . setDefaultOptions = function ( options ) : void { WTopTips . defaultOptions = { ... defaultOptions , ... options } ; } ; WTopTips . resetDefaultOptions = function ( ) : void { WTopTips . defaultOptions = defaultOptions ; } ; WTopTips . install = ( ) => { Vue . component ( 'w-top-tips' , TopTipsComponent ) ; } ; Vue . prototype . $toptips = WTopTips ; export default WTopTips ;