8 changed files with 151 additions and 3 deletions
Unified View
Diff Options
-
29components/toast/index.js
-
9components/toast/index.json
-
33components/toast/index.wxml
-
1components/toast/index.wxss
-
70components/toast/toast.js
-
10pages/home/employee-info/index.js
-
1pages/home/employee-info/index.json
-
1pages/home/employee-info/index.wxml
@ -0,0 +1,29 @@ |
|||||
|
import { VantComponent } from '../common/component'; |
||||
|
VantComponent({ |
||||
|
props: { |
||||
|
show: Boolean, |
||||
|
mask: Boolean, |
||||
|
message: String, |
||||
|
forbidClick: Boolean, |
||||
|
zIndex: { |
||||
|
type: Number, |
||||
|
value: 1000, |
||||
|
}, |
||||
|
type: { |
||||
|
type: String, |
||||
|
value: 'text', |
||||
|
}, |
||||
|
loadingType: { |
||||
|
type: String, |
||||
|
value: 'circular', |
||||
|
}, |
||||
|
position: { |
||||
|
type: String, |
||||
|
value: 'middle', |
||||
|
}, |
||||
|
}, |
||||
|
methods: { |
||||
|
// for prevent touchmove
|
||||
|
noop() {}, |
||||
|
}, |
||||
|
}); |
||||
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"component": true, |
||||
|
"usingComponents": { |
||||
|
"van-icon": "../icon/index", |
||||
|
"van-loading": "../loading/index", |
||||
|
"van-overlay": "../overlay/index", |
||||
|
"van-transition": "../transition/index" |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
<van-overlay |
||||
|
wx:if="{{ mask || forbidClick }}" |
||||
|
show="{{ show }}" |
||||
|
z-index="{{ zIndex }}" |
||||
|
custom-style="{{ mask ? '' : 'background-color: transparent;' }}" |
||||
|
/> |
||||
|
<van-transition |
||||
|
show="{{ show }}" |
||||
|
custom-style="z-index: {{ zIndex }}" |
||||
|
custom-class="van-toast__container" |
||||
|
> |
||||
|
<view |
||||
|
class="van-toast van-toast--{{ type === 'text' ? 'text' : 'icon' }} van-toast--{{ position }}" |
||||
|
catch:touchmove="noop" |
||||
|
> |
||||
|
<!-- text only --> |
||||
|
<text wx:if="{{ type === 'text' }}">{{ message }}</text> |
||||
|
|
||||
|
<!-- with icon --> |
||||
|
<block wx:else> |
||||
|
<van-loading |
||||
|
wx:if="{{ type === 'loading' }}" |
||||
|
color="white" |
||||
|
type="{{ loadingType }}" |
||||
|
custom-class="van-toast__loading" |
||||
|
/> |
||||
|
<van-icon wx:else class="van-toast__icon" name="{{ type }}" /> |
||||
|
<text wx:if="{{ message }}" class="van-toast__text">{{ message }}</text> |
||||
|
</block> |
||||
|
|
||||
|
<slot /> |
||||
|
</view> |
||||
|
</van-transition> |
||||
@ -0,0 +1 @@ |
|||||
|
@import '../common/index.wxss';.van-toast{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:initial;color:#fff;color:var(--toast-text-color,#fff);font-size:14px;font-size:var(--toast-font-size,14px);line-height:20px;line-height:var(--toast-line-height,20px);white-space:pre-wrap;word-wrap:break-word;background-color:rgba(0,0,0,.7);background-color:var(--toast-background-color,rgba(0,0,0,.7));border-radius:8px;border-radius:var(--toast-border-radius,8px)}.van-toast__container{position:fixed;top:50%;left:50%;width:-webkit-fit-content;width:fit-content;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-width:70%;max-width:var(--toast-max-width,70%)}.van-toast--text{min-width:96px;min-width:var(--toast-text-min-width,96px);padding:8px 12px;padding:var(--toast-text-padding,8px 12px)}.van-toast--icon{width:88px;width:var(--toast-default-width,88px);min-height:88px;min-height:var(--toast-default-min-height,88px);padding:16px;padding:var(--toast-default-padding,16px)}.van-toast--icon .van-toast__icon{font-size:36px;font-size:var(--toast-icon-size,36px)}.van-toast--icon .van-toast__text{padding-top:8px}.van-toast__loading{margin:10px 0}.van-toast--top{-webkit-transform:translateY(-30vh);transform:translateY(-30vh)}.van-toast--bottom{-webkit-transform:translateY(30vh);transform:translateY(30vh)} |
||||
@ -0,0 +1,70 @@ |
|||||
|
import { isObj } from '../common/validator'; |
||||
|
const defaultOptions = { |
||||
|
type: 'text', |
||||
|
mask: false, |
||||
|
message: '', |
||||
|
show: true, |
||||
|
zIndex: 1000, |
||||
|
duration: 2000, |
||||
|
position: 'middle', |
||||
|
forbidClick: false, |
||||
|
loadingType: 'circular', |
||||
|
selector: '#van-toast', |
||||
|
}; |
||||
|
let queue = []; |
||||
|
let currentOptions = Object.assign({}, defaultOptions); |
||||
|
function parseOptions(message) { |
||||
|
return isObj(message) ? message : { message }; |
||||
|
} |
||||
|
function getContext() { |
||||
|
const pages = getCurrentPages(); |
||||
|
return pages[pages.length - 1]; |
||||
|
} |
||||
|
function Toast(toastOptions) { |
||||
|
const options = Object.assign( |
||||
|
Object.assign({}, currentOptions), |
||||
|
parseOptions(toastOptions) |
||||
|
); |
||||
|
const context = options.context || getContext(); |
||||
|
const toast = context.selectComponent(options.selector); |
||||
|
if (!toast) { |
||||
|
console.warn('未找到 van-toast 节点,请确认 selector 及 context 是否正确'); |
||||
|
return; |
||||
|
} |
||||
|
delete options.context; |
||||
|
delete options.selector; |
||||
|
toast.clear = () => { |
||||
|
toast.setData({ show: false }); |
||||
|
if (options.onClose) { |
||||
|
options.onClose(); |
||||
|
} |
||||
|
}; |
||||
|
queue.push(toast); |
||||
|
toast.setData(options); |
||||
|
clearTimeout(toast.timer); |
||||
|
if (options.duration != null && options.duration > 0) { |
||||
|
toast.timer = setTimeout(() => { |
||||
|
toast.clear(); |
||||
|
queue = queue.filter((item) => item !== toast); |
||||
|
}, options.duration); |
||||
|
} |
||||
|
return toast; |
||||
|
} |
||||
|
const createMethod = (type) => (options) => |
||||
|
Toast(Object.assign({ type }, parseOptions(options))); |
||||
|
Toast.loading = createMethod('loading'); |
||||
|
Toast.success = createMethod('success'); |
||||
|
Toast.fail = createMethod('fail'); |
||||
|
Toast.clear = () => { |
||||
|
queue.forEach((toast) => { |
||||
|
toast.clear(); |
||||
|
}); |
||||
|
queue = []; |
||||
|
}; |
||||
|
Toast.setDefaultOptions = (options) => { |
||||
|
Object.assign(currentOptions, options); |
||||
|
}; |
||||
|
Toast.resetDefaultOptions = () => { |
||||
|
currentOptions = Object.assign({}, defaultOptions); |
||||
|
}; |
||||
|
export default Toast; |
||||
Write
Preview
Loading…
Cancel
Save